
Представьте кошелек, который несколько лет лежит в сейфе. Сид-фраза записана на металле, никто её не видел, а само устройство практически не подключалось к компьютеру. Однажды владелец проверяет баланс и видит ноль.
Именно это произошло летом 2026 года с владельцами COLDCARD. Причём злоумышленникам не понадобилось получать удалённый доступ к устройствам, красть сид-фразы или взламывать компьютеры пользователей. Они восстановили приватные ключи самостоятельно. Причиной стала ошибка в генерации случайных чисел, из-за которой сид-фразы, созданные на определённых версиях прошивки, получались значительно менее случайными, чем предполагалось. История с COLDCARD ударила по самой идее холодного хранения.
Главный вопрос: как украсть биткоины, не прикасаясь к кошельку
Первые сообщения об атаке появились 30 июля 2026 года. Тогда исследователи обнаружили около 594 BTC, выведенных примерно с 500 адресов всего за несколько десятков минут. Но это была только часть первой волны.
Исследовательская команда Galaxy Research позже проследила более полный набор транзакций: с 01:10 до 01:51 UTC 30 июля были опустошены 1196 адресов, с которых вывели 1082 BTC. К 14 августа Galaxy уже связывала с атакой 1778 BTC более чем с 8600 адресов. Это количество подтвержденных с высокой степенью уверенности потерь. Если добавить менее надёжные совпадения и неподтверждённую четвертую волну, оценка доходила до 2417 BTC.
Биткоины не хранятся внутри аппаратного кошелька. Устройство хранит секрет, из которого выводятся приватные ключи, позволяющие подписывать транзакции. Если злоумышленник способен самостоятельно восстановить тот же секрет, ему не нужен доступ к устройству. Именно это и произошло. Атакующий перебирал возможные состояния генератора случайных чисел, восстанавливал из них сид-фразы, выводил Bitcoin-адреса и сравнивал их с публичным блокчейном. Когда находился сид, соответствующий адресу с деньгами, можно было получить приватные ключи и подписать обычную Bitcoin-транзакцию. Никакого удалённого взлома COLDCARD для этого не требовалось.
Хронология атаки
17 марта 2021 года в прошивке произошли изменения, связанные с генерацией случайности. При миграции криптографического кода на библиотеку libNgU из-за ошибки в сборке вместо аппаратного генератора случайных чисел чипа STM32 фактически стал использоваться программный генератор Yasmarang из MicroPython. Ошибка оставалась незамеченной больше пяти лет. Проблема была не в том, что аппаратный RNG сломался. Он оставался в прошивке, но при создании сид-фразы использовался другой генератор, который давал значительно менее непредсказуемый результат.
30 июля 2026 года прошла первая и самая крупная волна. Первоначальные 594 BTC были лишь ее частью. После расширения выборки Galaxy насчитала 1082,65 BTC с 1196 адресов за 41 минуту.
31 июля последовала вторая волна. Она затронула еще около 1478 адресов, с которых вывели примерно 76,16 BTC. Общий ущерб после двух волн составил около 1158,81 BTC.
2 августа исследователи выделили третью волну: еще 207,73 BTC с 1912 адресов. Изменился и почерк транзакций. Средства чаще собирали пакетами, а затем распределяли по новым адресам. После трех волн оценка достигла 1367,05 BTC с 4585 адресов.
3 августа появилась возможная четвертая волна примерно на 449 BTC. Но часть переводов могла принадлежать владельцам, которые сами срочно спасали монеты. Galaxy не включила эту группу в подтвержденный итог, поскольку не получила достаточных свидетельств от пострадавших.
К 14 августа картина стала шире. После общения со 190 пострадавшими Galaxy связала с атакой 1778,84 BTC более чем с 8600 адресов. Помимо трех основных волн, исследователи обнаружили не менее 33 отдельных следов с другим паттерном транзакций. Если добавить менее надежные совпадения и спорную четвертую волну, верхняя оценка достигает 2417,35 BTC. Это возможный масштаб, а не подтвержденная сумма.
Вероятно, действовал не один хакер. Различия в транзакциях указывают на нескольких атакующих, которые независимо искали слабые ключи. При этом по одним только ончейн-данным нельзя со стопроцентной уверенностью установить владельцев всех затронутых адресов. Новых подтвержденных волн после 6 августа Galaxy не обнаружила, хотя сведения от жертв продолжали уточнять масштаб уже произошедшего ущерба.
Где сломалась случайность

Сид-фраза выглядит как 12 или 24 слова, но в ее основе лежит случайное число. Для стандартной сид-фразы из 12 слов используется 128 бит исходной энтропии, для 24 слов — 256 бит. Чем непредсказуемее эта энтропия, тем сложнее подобрать seed.
Представьте, что нужно случайно выбрать одну песчинку. В нормальных условиях это песчинка из огромной пустыни — количество возможных вариантов колоссально. А уязвимая прошивка COLDCARD фактически ограничивала выбор небольшим ящиком с песком. Для владельца результат всё равно выглядел случайным. Но атакующий, знавший границы этого «ящика», мог перебрать все возможные варианты.
Код COLDCARD должен был получать данные от аппаратного генератора случайных чисел STM32. Но после миграции на libNgU в 2021 году конфигурация сборки привела к тому, что в нужном месте использовался Yasmarang — обычный программный PRNG из MicroPython. Он инициализировался значениями, связанными с идентификатором микроконтроллера и состоянием таймеров. Такие параметры не являются криптографическим секретом и имеют намного меньше пространства состояний, чем требуется для безопасной генерации сида.
Сильнее всего пострадали Mk2 и Mk3. Для них Coinkite оценивает эффективную энтропию примерно в 40 бит вместо ожидаемых 128. У Mk4, Q и Mk5 добавлялась случайность из Secure Element, поэтому ситуация была лучше: Coinkite оценила эффективное пространство примерно в 72 бита. Но это все равно существенно меньше требуемых 128 бит.
Почему разница настолько важна? 40 бит — это 2⁴⁰ возможных вариантов, а ожидаемые 128 бит — 2¹²⁸. То есть переход от 40 до 128 бит увеличивает пространство поиска в 2⁸⁸ раз. Даже 72 бита против 128 — это разница в 2⁵⁶ раз.
Это не означает, что любой человек мог взломать любой COLDCARD за вечер. Сложность зависела от модели, прошивки, параметров генератора и того, какую дополнительную информацию мог использовать атакующий. Но вместо практически невозможного прямого перебора появился алгоритм, который можно автоматизировать.
Почему офлайн-режим не помог
Воздушный зазор защищает от удаленного доступа к устройству. Он не исправляет ключ, который изначально создан из слабой случайности. Если сид был создан с недостаточной энтропией, атакующему не нужно получать доступ к самому COLDCARD. Он может перебрать возможные варианты генерации, получить из них соответствующие адреса и сравнить их с адресами, на которых уже есть биткоины. Поэтому наличие устройства в сейфе само по себе ничего не меняет: если секрет можно вычислить, красть само устройство не требуется.
Поэтому офлайн-хранение само по себе не гарантирует безопасность. Значение имеет вся цепочка: как была создана энтропия, какая прошивка использовалась и какой код реально выполнялся при генерации сид-фразы.
Кто находится в зоне риска

Смотреть нужно не на дату покупки, а на прошивку, на которой создавался исходный сид.
- Mk2 и Mk3: версии 4.0.1-4.1.9
- Mk4 и Mk5 Standard: версии до 5.6.0
- Q Standard: версии до 1.5.0Q
- Mk4 и Mk5 Edge: версии до 6.6.0X
- Q Edge: версии до 6.6.0QX
TAPSIGNER, OPENDIME и SATSCARD не затронуты. Импортированная безопасная сид-фраза не становится слабой из-за ввода в COLDCARD. Но перенос фразы, созданной уязвимой прошивкой, в другой кошелек проблему не решает. Слабость находится в сид-фразе, а не в устройстве.
Если при создании сид-фразы вы использовали броски кубика, это добавляло дополнительную случайность и защищало от описанной проблемы. 50 и более бросков дают достаточно энтропии для защиты 128-битного сида. Если бросков было меньше, вы не помните их количество или не уверены, что всё сделали правильно, Coinkite рекомендует считать сид-фразу уязвимой и перенести средства на новую.
Что делать владельцу COLDCARD

- Не вводите сид-фразу и кодовую фразу на сайтах проверки, не отправляйте их поддержке и не доверяйте сервисам «спасения». После громких атак быстро появляются фишинговые страницы.
- Определите модель вашего кошелька и версию прошивки, на которой создавался сид. Если это выяснить нельзя, следует считать фразу уязвимой.
- Проверьте валидность резервной копии сид-фразы в настройках аппаратного кошелька.
- Установите исправленную прошивку с официального сайта и проверьте ее подпись. Затем создайте новую сид-фразу. Обновление исправляет будущую генерацию, но не меняет старую фразу.
- Запишите новый сид, проверьте отпечаток MFP и адрес получения. Восстановите кошелек, отправьте небольшую тестовую сумму и только после проверки переводите остаток. Старую копию нельзя уничтожать до завершения миграции.
Нужна ли кодовая фраза
BIP-39 passphrase часто называют кодовой фразой или 25-м словом, хотя это может быть любая строка. Вместе с сид-фразой она создает другой набор ключей и отдельный кошелек. Даже одна ошибка в символе откроет иной кошелек.
В этой атаке сильная уникальная passphrase действительно могла затруднить доступ к средствам на слабом сиде. Злоумышленнику пришлось бы не только восстановить сам сид, но и подобрать дополнительную passphrase. Но она не исправляет сам сид. Coinkite рекомендует перейти на новую фразу даже владельцам, которые использовали passphrase.
Если вы добавляете такую защиту, сохраните кодовую фразу отдельно от сид-фразы. Кодовая фраза должна быть длинной, уникальной и нигде больше не использоваться. Запишите отпечаток MFP кошелька и заранее проведите полное тестовое восстановление. Иначе дополнительный замок может закрыть доступ не только злоумышленнику, но и владельцу.
Заключение
COLDCARD не взламывали через интернет. Атакующие нашли более короткий путь: восстановили ключи, которые казались случайными, но были созданы из ограниченного набора вариантов.
Главный вывод шире одной модели. Холодное хранение начинается не с отключенного кабеля, а с качественно созданного секрета. Обновляйте прошивку до генерации нового сида, проверяйте источник устройства и резервные копии, а кодовую фразу используйте только вместе с раздельным хранением и тестовым восстановлением.
Особенно показателен технический аспект этой истории. В прошивке действительно присутствовал код аппаратного генератора случайных чисел, но этого оказалось недостаточно: критический путь генерации сида из-за ошибки фактически использовал другую реализацию. Проверка наличия правильного кода в прошивке не гарантировала, что именно он вызывается.
История еще не закрыта окончательно. Новых подтвержденных атак после 6 августа исследователи не выявили, но масштаб ущерба и технические детали продолжают уточняться. Если вы владелец COLDCARD и ваши средства не были затронуты атакой, это ещё не означает, что ваша сид-фраза безопасна. Если вы подозреваете, что создавали её на уязвимой версии прошивки, лучше не ждать и перенести средства на новую фразу. Перед этим внимательно проверьте модель COLDCARD, версию прошивки и способ, которым создавался сид. Новую фразу создавайте только после установки исправленной прошивки, а старую не уничтожайте до тех пор, пока не убедитесь, что все средства успешно перенесены.
Понравилась статья? Подпишитесь на наш Telegram-канал, где мы регулярно публикуем советы по безопасному хранению и использованию криптовалют, актуальные новости и не только.