Мы используем такие технологии, как файлы «куки», для хранения и/или доступа к информации об устройстве. Мы делаем это, чтобы улучшить удобство просмотра и показывать (не-)персонализированную рекламу. Согласие на использование этих технологий позволит нам обрабатывать такие данные, как поведение при просмотре или уникальные идентификаторы на этом сайте. Несогласие или отзыв согласия может отрицательно повлиять на определенные функции и возможности.
Техническое хранение или доступ строго необходимы для законной цели предоставления возможности использования конкретной услуги, явно запрошенной подписчиком или пользователем, или с единственной целью осуществления передачи сообщения по сети электронных коммуникаций.
Техническое хранение или доступ необходимы для законной цели хранения предпочтений, которые не запрошены подписчиком или пользователем.
Техническое хранилище или доступ, используемый исключительно для статистических целей.
Техническое хранилище или доступ, который используется исключительно для анонимных статистических целей. Без повестки в суд, добровольного согласия со стороны вашего интернет-провайдера или дополнительных записей от третьей стороны информация, хранящаяся или полученная только для этой цели, обычно не может быть использована для вашей идентификации.
Техническое хранилище или доступ необходимы для создания профилей пользователей для отправки рекламы или отслеживания пользователя на веб-сайте или на нескольких веб-сайтах в аналогичных маркетинговых целях.
Как взломали Coldcard и почему обновление прошивки не спасает сид
30 июля в 01:10 UTC начался взлом Coldcard: за 41 минуту кто-то полностью опустошил 1 196 биткоин-адресов. Никакого фишинга, никакого физического доступа к устройствам, никаких подписанных пользователями транзакций.
Причина оказалась в одной строке конфигурации прошивки Coldcard, из-за которой кошелёк пять лет подряд генерировал сид с помощью программного псевдослучайного генератора вместо аппаратного.
Ниже разбираем взлом Coldcard: как работает уязвимость RNG, кого она затрагивает, что делать прямо сейчас и какие выводы из этого стоит сделать каждому, кто хранит криптовалюту на аппаратном кошельке, даже если Coldcard у него никогда не было.
Взлом Coldcard: хронология от первого свипа до четвёртой волны
Первая волна: 41 минута, 1 082 BTC
Первые сообщения выглядели так: 594 BTC (около $38 млн) примерно с 500 односигнатурных кошельков за 25 минут. Но это была лишь часть картины.
Galaxy Research сопоставила транзакции по общему почерку и восстановила картину всей волны: 1 196 адресов были опустошены полностью, с них вывели 1 082,65 BTC (около $70,2 млн по курсу того дня) в промежутке с 01:10:20 до 01:51:26 UTC 30 июля, за девять блоков — с 960 183 по 960 191.
Chainalysis показала, что атакующий действовал не случайно: сначала опустошались адреса с крупнейшими балансами, а более $30 млн были собраны за первые десять минут. Один пострадавший потерял около $1,8 млн. Йозеф Тетек из Trezor назвал крупнейший опустошённый адрес — на нём находился 51 BTC.
Почерк транзакций указывал на автоматизированный инструмент: каждый свип (полное опустошение адреса одним переводом) платил одинаковую завышенную комиссию 30 sat/vB — в 30–75 раз выше медианы той недели — и не оставлял сдачи.
Первое публичное предупреждение Coinkite появилось примерно через 30 часов после этой волны.
Вторая, третья и четвёртая волны
Вторая волна прошла 31 июля между 04:54 и 08:36 UTC: 76,16 BTC были выведены с 1 478 адресов. Третья растянулась с 31 июля на 1 августа и унесла 207,73 BTC с 1 912 адресов.
Средняя сумма на одного пострадавшего снижалась с каждым заходом: в первой волне это почти целый биткоин, в третьей — около 0,1 BTC. Алекс Торн из Galaxy объясняет это просто: крупные адреса из доступного пространства ключей уже были вычищены, осталась мелочь.
3 августа началась четвёртая волна, и Торн предупредил о ней в прямом эфире, пока транзакции ещё находились в мемпуле. На этот раз атакующие подписывали транзакции с включённым RBF, поэтому до подтверждения жертва теоретически могла заменить собственную транзакцию другой — с более высокой комиссией — и успеть вывести монеты первой.
Скорость составляла 13,8 свипа на блок против 0,3 в контрольный период до инцидента.
По состоянию на 4 августа Galaxy с высокой уверенностью оценивает объём выведенных средств в 1 596 BTC примерно с 7 300 адресов: три подтверждённые волны плюс 14 более мелких инцидентов. Это уже свыше $100 млн. Если подтвердится четвёртая волна, общая сумма достигнет 2 055 BTC — около $130 млн.
Около 90% украденного до сих пор не перемещается. Galaxy передала примерно 600 подозрительных адресов федеральным следователям и комплаенс-компаниям и напрямую работает с 73 пострадавшими.
Что сделал Coinkite
Родольфо Новак (NVK), сооснователь Coinkite, извинился 31 июля и взял на себя полную ответственность за баг, признав, что внутреннее ревью его не обнаружило.
Компания выпустила исправленные прошивки для всех затронутых моделей и веток, уничтожила складские запасы устройств с уязвимой прошивкой, а покупателям, чьи устройства уже были отправлены, разослала письма с инструкциями. TAPSIGNER, OPENDIME и SATSCARD работают на другой кодовой базе и этой проблемой не затронуты.
В чём суть уязвимости Coldcard: один макрос против пяти лет
Как должна работать генерация сида
Когда Вы создаёте новый кошелёк, устройство берёт 32 байта из аппаратного генератора случайных чисел — отдельного физического блока в микроконтроллере, который использует физический шум и не зависит от программного кода. Из этих байтов формируются 12 или 24 слова BIP-39, то есть 128 или 256 бит энтропии.
Вся модель безопасности держится на одном предположении: эти биты действительно случайны и никто, кроме Вас, не может их воспроизвести. Перебрать 2¹²⁸ вариантов практически невозможно.
Что пошло не так
У Coldcard есть собственная обёртка над аппаратным генератором STM32, поэтому в конфигурации плат присутствует строка
#define MICROPY_HW_ENABLE_RNG (0). Это осознанное решение: «не компилируй встроенную реализацию MicroPython, у нас есть своя».Библиотека libngu, через которую проходила генерация, проверяла этот макрос директивой
#ifndef, то есть смотрела только на то, определён ли макрос вообще, а не на его значение. Макрос определён, поэтому libngu считает аппаратный путь доступным и привязывается к функцииrng_get().MicroPython, наоборот, смотрит именно на значение, видит ноль и компилирует вместо аппаратного блока программный fallback Yasmarang. Сборка проходит без единой ошибки, а каждый вызов генератора случайных чисел идёт через обычный псевдослучайный алгоритм.
1 марта 2021 года Coldcard перенесла генерацию сида на libngu (коммит b18723dd), а 17 марта это изменение попало в релиз прошивки 4.0.0. После этого код более пяти лет оставался открытым в публичном репозитории.
Чем инициализировался программный fallback
Yasmarang инициализируется один раз, при первом вызове, тремя значениями: младшим 32-битным словом UID чипа (через XOR со счётчиком SysTick), регистром времени
RTC->TRи субсекундным счётчикомRTC->SSR. После этого новая энтропия вообще не собирается: каждое следующее значение является детерминированным переходом состояния.Ни один из этих источников не является секретным. UID — это заводской идентификатор чипа, фиксированный на весь срок службы микроконтроллера, который читается из памяти и частично попадает в USB-серийный номер устройства.
SysTick — это счётчик, который перезагружается каждую миллисекунду: 80 000 возможных значений на Mk2/Mk3 и 120 000 на современных моделях. При холодном старте Mk2/Mk3 выбранный RTC-осциллятор вообще отключён, поэтому значения регистров времени с высокой вероятностью нулевые или статичные.
Поверх этого libngu накладывала XOR со вторым генератором Yasmarang, инициализированным публичными константами, которые лежат прямо в исходном коде. XOR не создаёт энтропию: если оба входа воспроизводимы, их XOR тоже воспроизводим.
Встроенная проверка «здоровья» генератора отбрасывала только одинаковые соседние значения, а псевдослучайный алгоритм проходит такую проверку без проблем.
Сколько энтропии осталось
Coinkite оценивает последствия так: около 40 бит на Mk3 и около 72 бит на Mk4, Mk5 и Q вместо ожидаемых 128. Технический отчёт Block даёт ещё более жёсткую картину.
Предел в 2⁷³ для современных моделей, который иногда цитируют, в самом отчёте Block сопровождается прямым предупреждением: это не 73-битная криптографическая стойкость. Поля таймеров коррелируют между собой, могут занимать гораздо более узкий диапазон, а атакующий способен профилировать их на собственном аналогичном устройстве.
Хеширование ситуацию не спасает. SHA256d делает вывод статистически равномерным, но не увеличивает количество возможных входных значений: сколько кандидатов было до хеша, столько и останется после. Контрольная сумма BIP-39 тоже не добавляет энтропии.
Чтобы почувствовать масштаб: 40 бит — это около триллиона вариантов, которые можно перебрать офлайн за разумное время на обычном оборудовании.
Проверять кандидаты дёшево, потому что публичный адрес или xpub работает как оракул: можно сгенерировать кандидата, вывести из него адрес и сразу сверить его с блокчейном. Само устройство для этого вообще не требуется.
Почему обновление прошивки не спасает сид
Патч исправляет генерацию новых сидов. Но уже созданный сид он не меняет: слова уже записаны и уже потенциально вычислимы. Перенос такого сида на другое устройство тоже ничего не даёт, потому что слабость находится в самих словах, а не в железе, которое их хранит.
Кого затрагивает уязвимость Coldcard, а кого нет
Главное правило: имеет значение не дата покупки устройства и не сама модель, а версия прошивки, на которой был создан конкретный сид.
Исправленные прошивки
Standard и Edge — это две разные ветки релизов. Номер 6.x выглядит больше 5.6.0, но старая сборка Edge от этого не становится исправленной. Если Вы используете Edge, Вам нужен именно исправленный Edge-релиз для Вашей модели.
Броски кубика
Баг затронул энтропию, которую генерировало само устройство. Независимую энтропию, добавленную пользователем, он не затронул. На уязвимых прошивках Coldcard хешировал сгенерированный устройством сид вместе со всеми бросками, введёнными через Add Dice Rolls:
Слово «приватных» здесь не формальность. Броски не должны попадать на камеру, сохраняться в файл или вводиться на компьютере, подключённом к интернету. Последовательность бросков — такой же ключевой материал, как и сам сид.
Что ещё генерировалось тем же генератором
История не ограничивается сидами кошельков. Тот же вызов использовался для генерации:
Мультисиг
Мультисиг спасает только тогда, когда кворум невозможно собрать из затронутых ключей. Схема 2-из-3, в которой все три устройства — Coldcard на уязвимых прошивках, не защищает: атакующий восстанавливает необходимое количество ключей и подписывает транзакцию самостоятельно.
Block в своём отчёте формулирует это прямо: нужен кворум устройств, у которых нет этой уязвимости.
Что делать прямо сейчас
Спешка во время миграции сама по себе может создать риск больше того, от которого Вы пытаетесь уйти. Поэтому порядок действий имеет значение.
Если Mk3 — Ваше единственное устройство
Прошивка 4.2.0 позволяет сгенерировать корректный новый сид прямо на Mk3, поэтому покупать новое устройство только ради этого необязательно.
Неудобство в том, что Вам придётся переключаться между старым и новым сидом на одном устройстве: проверить бэкап и XFP старого кошелька, обновиться, на пустом устройстве сгенерировать новый сид, записать его бэкап и адрес, восстановить старый сид, отправить тестовую сумму, восстановить новый и убедиться, что она поступила, затем снова восстановить старый и вывести остаток.
Процесс утомительный, но он работает и без второго устройства. Если у Вас есть второе устройство с исправленной прошивкой, удобнее использовать его.
Passphrase: когда спасает, а когда нет
Passphrase BIP-39, которую часто называют 25-м словом, — это не PIN-код устройства. Это строка, которая вместе с сидом создаёт другой кошелёк с другими адресами. Атакующий, восстановивший Ваш сид, получает доступ только к базовому кошельку без passphrase и не видит кошелёк, защищённый ею.
Проблема в том, что passphrase перебирают вместе с сидом. Если пространство сида сузилось до нескольких миллиардов вариантов, а passphrase — это «Bitcoin2024!», дата рождения или строка из любимой песни, общий перебор остаётся реалистичным. Слабое 25-е слово в такой ситуации не барьер, а формальность.
Сильная passphrase в этом сценарии означает несколько конкретных вещей: это случайная строка, а не фраза, построенная по человеческой логике; она нигде больше не используется; никогда не вводилась на сайте или недоверенном компьютере; и не была сгенерирована на уязвимом устройстве, потому что встроенный генератор паролей в Secure Notes использовал тот же сломанный RNG.
Есть и обратная сторона. Passphrase не восстанавливается из сида, хранится отдельно от слов, и о её существовании должны знать те, кто унаследует доступ. Кошельков, потерянных из-за забытой passphrase, мы видели больше, чем спасённых ею.
И главное: passphrase снижает срочность, но не исправляет сид. Coinkite прямо рекомендует владельцам кошельков с passphrase тоже мигрировать, просто без паники в первую же ночь.
Как защититься от атак такого класса
Кубики
Это единственный способ вообще не зависеть от генератора случайных чисел производителя. 50 независимых приватных бросков шестигранного кубика дают 128 бит, 99 бросков — около 256.
Метод можно проверить: Coldcard документирует математику расчёта, и Вы можете самостоятельно сверить результат. Платить приходится временем и дисциплиной: броски нельзя фотографировать, сохранять в файл или вводить на подключённом к интернету компьютере.
Мультисиг с устройствами разных производителей
Смысл мультисига не в количестве ключей, а в независимости отказов. Схема 2-из-3, собранная из Coldcard, Trezor и BitBox, переживает баг в энтропии одного производителя: атакующий не сможет собрать кворум. Схема из трёх одинаковых устройств от такого класса проблем не защищает.
Цена за это — сложность: нужно хранить дескриптор кошелька вместе с бэкапами, восстановление занимает больше времени, а наследникам приходится объяснять больше деталей. Для сумм, потеря которых будет ощутимой, такой компромисс оправдан. Для кошелька на несколько сотен долларов — уже нет.
Как другие производители создают энтропию
Это не реклама конкурентов, а полезный способ оценивать архитектуру устройства перед покупкой.
Вывод здесь простой. Архитектура с одним источником случайности может полностью сломаться из-за одной ошибки интеграции, и пользователь этого не увидит: слова будут выглядеть нормально, контрольная сумма сойдётся, устройство не покажет никаких ошибок.
Архитектура с двумя независимыми источниками способна пережить такой класс сбоя. Поэтому при выборе устройства вопрос должен звучать не «есть ли здесь аппаратный генератор», а «что произойдёт, если он незаметно перестанет работать».
Все три производителя доступны в Украине, а новые устройства Coldcard уже поставляются с исправленной прошивкой. Но привычка проверять версию прошивки на экране до генерации сида должна остаться навсегда, независимо от бренда.
Открытый код в 2026 году
Исходный код Coldcard был публичным все пять лет, и это годами подавалось как преимущество. Баг никто не заметил.
NVK предполагает, что атакующий прогнал старые версии прошивки через ИИ, и отдельно признал неприятный факт: собственный аудит Coinkite одной из лучших доступных моделей за несколько недель до инцидента не нашёл ни этого бага, ни чего-то серьёзного вообще. Уже после публикации разработчик на Reddit воспроизвёл находку через Claude Code за восемь минут.
Практический вывод для пользователя один: «код открыт и его столько лет никто не взломал» больше не является аргументом в пользу безопасности. Любой публичный код старых версий теперь может анализироваться автоматизированными инструментами быстрее, чем командами безопасности.
Важно другое: насколько быстро производитель реагирует, публикует ли технический разбор и заложена ли в устройстве архитектура, способная пережить ошибку в одном компоненте.
Означает ли взлом Coldcard, что аппаратные кошельки не работают
Протокол Bitcoin отработал штатно. Подписи были валидными, сеть выполнила ровно то, что ей отправили. Сломалась случайность на этапе создания ключа — это другая часть стека.
Аргументом в пользу хранения средств на бирже этот инцидент тоже не является: биржи теряли пользовательские средства на порядок больше и по гораздо более банальным причинам. Подробнее о различиях мы разбирали в статье «Аппаратный кошелёк vs биржа: где действительно безопаснее хранить крипту».
Важная разница в другом. Если уязвимый сид уже создан, ни один некастодиальный кошелёк — аппаратный или программный — не может удалённо заменить его без действий владельца. Производитель аппаратного устройства точно так же не может ни добраться до air-gapped кошелька (устройства, которое физически не подключается к сети), ни исправить уже созданный сид.
Та же автономность, которая защищает от блокировок и изъятий, делает такой сбой неисправимым без действий самого владельца.
Поэтому вывод сугубо практический: генерацию ключа стоит считать отдельным этапом риска. Добавляйте собственную энтропию с помощью кубиков, распределяйте доверие между производителями там, где сумма этого оправдывает, и проверяйте версию прошивки до создания сида, а не после новостей о проблеме.
Итог
Если Ваш сид был создан на Coldcard с уязвимой версией прошивки, не откладывайте миграцию независимо от того, использовали Вы passphrase или нет. Исключение — сид, к которому при создании было добавлено не менее 50 независимых приватных бросков кубика.
Обновление прошивки исправляет генерацию новых сидов, но не исправляет старые.
Общий вывод переживёт этот конкретный инцидент. Доверие к единственному источнику случайности — это точка отказа, которую пользователь может закрыть самостоятельно: кубиками или мультисигом с устройствами разных производителей.
Если Вы ещё не разобрались с базовыми правилами, начните со статьи «Хранение seed-фразы: 5 безопасных способов в 2026» в нашем блоге.
Похожие записи
Лучшие приватные мессенджеры со сквозным шифрованием. Топ приложений в 2026 году
Лучшие приватные мессенджеры 2026 года защищают переписку сквозным шифрованием, но далеко не каждое популярное приложение действительно приватно. Многие сервисы хранят сообщения на сервере в открытом виде: компания-владелец может их прочитать, передать по ордеру или потерять при утечке. В приватных — нет. Между этими двумя категориями есть большая серая зона, где маркетинг говорит «зашифровано», а на …
Обновление прошивки аппаратного кошелька: когда обновлять, а когда лучше не спешить
Обновление прошивки аппаратного кошелька часто кажется мелочью: устройство покупают для того, чтобы оно лежало в ящике и не создавало проблем. Чаще всего так и происходит, пока в приложении не появляется сообщение о доступном обновлении прошивки. И тут люди делятся на два лагеря, которые ошибаются зеркально: одни годами сидят на прошивке с задокументированными уязвимостями, потому что …
Физические атаки на владельцев криптовалют: как защитить себя от wrench attack
Wrench attack — это физическая атака на владельца криптовалюты с целью заставить его передать доступ к кошельку. В крипте принято говорить о хакерах, фишинге и уязвимостях смарт-контрактов. Но есть угроза, против которой стандартный сетап кошелька бессилен: человек с гаечным ключом, который стоит у Вашей двери. Защита существует, но требует совершенно другого подхода. 2025 год стал …
Что такое Shamir Backup и SLIP39?
Приветствую! В этой статье мы разберемся в принципе шифрования Shamir Backup. Узнаем, почему это один из лучших способов защитить ваши криптоинвестиции. Сравним стандарт шифрования SLIP39 и BIP39 и ответим себе на вопрос “Как защитить свою криптовалюту от кражи и спокойно спать ночью?”. Я попробую уместить всю полезную и важную инфу в короткий и простой текст. …