Coldcard пять лет делал предсказуемые ключи: кого это касается и что делать владельцу

25 мин. чтения
BYBIT COPY TRADING
Копируй профи
Bybit повторит сделки трейдера за тебя
Начать

Коротко

30 июля 2026 года с биткоин-кошельков увели больше тысячи BTC, не притронувшись ни к одному устройству. Причина — ошибка в прошивке аппаратного кошелька Coldcard, из-за которой сид-фразы пять лет создавались не из аппаратного шума, а из предсказуемых чисел. Ключи можно было подобрать на обычном компьютере.

Главное, что нужно знать владельцу:

  • Обновление прошивки не чинит уже созданный сид. Оно защищает только следующий, который вы сгенерируете заново.
  • Проверить, слабый ли ваш сид, невозможно. Публичного теста не существует, и слабый сид ведёт себя как совершенно нормальный.
  • Если сид создавался на затронутой прошивке — переносите средства на новый. Не откладывайте: Galaxy Research предупреждает о вероятности новых волн.
  • Затронуты Mk2, Mk3, Mk4, Mk5 и Q. Не затронуты Mk1, самые старые сборки Mk2/Mk3, а также TAPSIGNER, OPENDIME и SATSCARD.
  • Уцелели те, кто при создании сида добавил собственную случайность: броски игрального кубика или свою секретную приписку к сид-фразе (passphrase).

Что именно сломалось

Сид-фраза — это не «пароль, который придумал кошелёк». Это очень большое случайное число, записанное словами. Вся защита держится на одном: число должно быть по-настоящему случайным. Если его можно предсказать или перебрать, все остальные меры бессмысленны — сейф, тайник, отсутствие интернета не значат ничего.

Чтобы получить настоящую случайность, устройства используют аппаратный генератор — отдельный блок внутри чипа, который снимает физический шум (тепловые колебания, дребезг схемы). Такой шум непредсказуем в принципе. Программный генератор устроен иначе: он берёт стартовое значение и разворачивает его в длинную последовательность по формуле. Зная стартовое значение, всю последовательность можно повторить точь-в-точь.

BYBIT COPY TRADINGКопитрейдинг на BybitОткрытая статистика трейдеров, старт с $10, отключение в один клик.Выбрать трейдера

В прошивке Coldcard произошло следующее. При сборке проверялось, включён ли аппаратный генератор, — но проверка смотрела только на наличие настройки, а не на её значение. Настройка присутствовала и была равна нулю. Формально условие выполнилось, и код молча подключился к программному генератору MicroPython. Сборка не упала, предупреждений не было, тесты прошли: генератор исправно выдавал числа, просто предсказуемые.

Стартовое значение бралось из того, что было под рукой. По разбору Block, при первом запуске генератор засеивался уникальным идентификатором микроконтроллера — постоянной заводской меткой, частично видной снаружи как USB-серийный номер устройства, — вместе со счётчиком системного таймера и двумя регистрами часов реального времени. Ни одна из этих величин не является криптографическим секретом: идентификатор фиксирован и читается, показания таймеров можно оценить со стороны. Получилась фабрика ключей, работающая по одному и тому же чертежу.

Ошибка попала в код с коммитом от 1 марта 2021 года и вышла к пользователям с версией прошивки 4.0.0 17 марта 2021 года. Она пролежала в публичном репозитории пять лет — открытость кода сама по себе её не поймала.

Аналогия, которая описывает произошедшее точнее всего: замок никто не взламывал. Его выточили на заводе по предсказуемому шаблону. Сейф всё это время стоял закрытым — ключ подобрали снаружи, по чертежу.

Как из слабого сида делают деньги

Отсюда следует неприятное: атакующему не нужно ни устройство, ни доступ к нему, ни ваша сеть.

Схема простая и полностью офлайновая. Атакующий воспроизводит логику генератора, перебирает возможные стартовые значения и получает список кандидатов в сид-фразы. Из каждого кандидата по публичным правилам (они одинаковы для всех биткоин-кошельков) выводятся адреса. Дальше остаётся сверить эти адреса с блокчейном — а блокчейн открыт для всех. Совпал адрес с деньгами — ключ найден. Ваш Coldcard в этот момент выключен и лежит в сейфе.

Что подтверждает, что это был именно перебор, а не адресная атака на конкретных людей, — по разбору Galaxy Research, у всех транзакций стояла одна и та же захардкоженная комиссия 30 sat/vB — в 30–75 раз выше медианной на тот момент, — одинаковый способ упаковки транзакций и ни одного выхода со сдачей. Атакующий не оптимизировал ничего: он просто выгребал всё, что нашёл. Среди пострадавших адресов оказались все три поколения форматов: 1 183 современных, 7 старого типа и 6 ещё более старого — так выглядит работа сканера, а не выбор жертв.

BYBIT COPY TRADINGКопитрейдинг на BybitОткрытая статистика трейдеров, старт с $10, отключение в один клик.Выбрать трейдера

Портрет пострадавшего адреса, по данным Galaxy Research: все — с одной подписью (без мультиподписи), баланс выше 0,15 BTC, медианный адрес не двигался около трёх с половиной лет. И ключевая деталь, которая связывает кражу именно с этим багом: среди украденных не оказалось ни одной монеты, полученной раньше 17 марта 2021 года — даты выхода той самой версии прошивки.

Хронология вывода средств (данные Galaxy Research, срез на 1 августа 2026 года):

ВолнаКогдаВыведеноАдресов
Первая30 июля, 01:10–01:51 UTC (41 минута)1 082,65 BTC1 196
Вторая31 июля76,16 BTC1 478
Третья31 июля — 1 августа~208 BTC1 912
Итого1 367,05 BTC (~$88,6 млн)4 585

Столбец с адресами не сходится на единицу, и это не опечатка: в прямой цитате Galaxy для первой волны стоит 1 196 адресов, а в её же поволновой разбивке — 1 195. Итог приведён по сводной оценке — 4 585. Все суммы в долларах здесь и далее пересчитаны по курсу на даты соответствующих событий; на 2 августа 2026 года биткоин стоил около $63 462.

Первая опубликованная оценка — 594 BTC, около $38 млн с примерно 500 адресов (31 июля). За сутки она выросла более чем вдвое. Это не противоречие в источниках, а рост охвата: ранние подсчёты видели один адрес-получатель из четырёх. По той же причине «гуляет» длительность первой волны — 15, 25 и 41 минута в разных публикациях.

Мы писали об этом событии в новости — первая волна вывода 30 июля тогда оценивалась в 594 BTC.

Кого касается: модели, прошивки, исправления

Ниже — сводная таблица по всем линейкам. Важно понимать: значение имеет та прошивка, на которой сид был СОЗДАН, а не та, что стоит на устройстве сейчас.

УстройствоЗатронутые прошивкиОценка CoinkiteОценка BlockИсправлено в
Coldcard Mk2 / Mk34.0.1 – 4.1.9 (Block: с 4.0.0)~40 бит вместо 128до 2^40,7; при известных таймерах — тривиально4.2.0 и новее
Coldcard Mk4 / Mk5всё до 5.6.0~72 бита вместо 128потолок 2^32 (~4,3 млрд), в среднем ~2^315.6.0 и новее
Coldcard Qвсё до 1.5.0Q~72 битатот же порядок1.5.0Q и новее
Ветка Edge (Mk4/Mk5)всё до 6.6.0X~72 битатот же порядок6.6.0X
Ветка Edge (Q)всё до 6.6.0QX~72 битатот же порядок6.6.0QX
Coldcard Mk1не затронут
Mk2 / Mk3 до версии 3.2.2 включительноне затронуты
TAPSIGNER, OPENDIME, SATSCARDне затронуты

Две оговорки к таблице, обе важные.

Первая. По нижней границе для Mk2/Mk3 источники расходятся на одну версию: Coinkite называет 4.0.1, Block — 4.0.0. Для владельца безопаснее считать затронутой всю ветку 4.0.x целиком.

Вторая, и она серьёзнее. Часть изданий 1 августа написала, что Mk4, Q и Mk5 «не затронуты». Это неверно. Такая строка действительно была в первой редакции предупреждения Coinkite — как предварительная оценка, — но в обновлённой редакции того же дня компания сама даёт для этих моделей оценку около 72 бит вместо проектных 128. Ни одно русско- или украиноязычное издание эту правку не отработало. Если вы читали, что новые модели вне опасности, — источник устарел.

Для полноты картины: обновление прошивки не «лечит» существующий ключ. Coldcard Mk4 firmware update до версии 5.6.0 защищает только тот сид, который вы создадите после обновления, — если вы остались на старом, ключ у вас тот же. То же и с Coldcard Mk3 firmware: исправление 4.2.0 работает только вперёд.

Почему «72 бита» и «4 миллиарда» — про одно и то же

В обсуждениях эти две цифры выглядят как спор о том, кто прав. На деле это одна арифметика при разных допущениях.

Стартовое значение генератора собиралось из нескольких полей таймеров. Coinkite считает эти поля независимыми друг от друга — при таком допущении получается свободный потолок около 2^73, отсюда и «~72 бита». Block показывает, что поля коррелированы между собой и частично наблюдаемы снаружи, поэтому реальное пространство перебора сжимается до 2^32 — примерно 4,3 миллиарда вариантов, в среднем около 2^31 попыток. И сам Block прямо оговаривает: его же верхняя оценка 2^73 — не криптостойкость, а именно свободный потолок.

Сколько бит случайности осталось в ключе: 128 по проекту, 72 по оценке Coinkite для Mk4/Mk5/Q, 40 по оценке Coinkite для Mk2/Mk3 и 32 по оценке Block для тех же Mk4/Mk5/Q

Шкала здесь в битах, а каждый бит — это удвоение работы для перебора. Разница между 128 и 72 битами выглядит как «чуть меньше половины», но на деле это разница в 2^56 раз. Разница между 72 и 32 битами — ещё в триллион раз.

Для владельца практический вывод один и тот же, и он не зависит от того, чья модель точнее. 2^31 вариантов перебирается на одной обычной машине за выходные. Даже если верна более щадящая оценка, речь идёт о запасе прочности, который заведомо ниже проектного и продолжает дешеветь вместе с железом. Считайте себя затронутым.

Кто оказался защищён — и с какими оговорками

Уцелели ровно те, кто добавил в генерацию собственную случайность. Иронично, что вендор годами подавал эти опции как необязательные, «для параноиков».

Броски игрального кубика. Coldcard умеет принимать результаты честных бросков как источник энтропии. От 50 приватных бросков дают не менее 128 бит собственной случайности, от 99 — около 256 бит. Слово «приватных» здесь ключевое: бросали при свидетелях или на видео — эффект теряется.

Passphrase. Сильная уникальная passphrase (дополнительное слово поверх сид-фразы) создаёт фактически отдельный кошелёк, до которого перебор сида не добирается. Но она не чинит сам сид: базовый кошелёк остаётся уязвимым, и переносить средства всё равно нужно.

Мультиподпись — и вот здесь распространённый совет работает наполовину. По сети разошёлся тезис «мультисиг спас». Первоисточник — разбор Block — говорит иначе: мультиподпись защищает, только если кворум не состоит целиком из уязвимых устройств. Схема «2 из 3» на трёх Coldcard с одной и той же прошивкой уязвима полностью — атакующий подбирает все три ключа. Защищает не мультиподпись как таковая, а разнородность железа. Из этого следует, что привычная рекомендация взять вторым устройством такое же для резерва после этой истории стала вредной.

Что ещё считать скомпрометированным, кроме сид-фразы

Почти все материалы по теме говорят только о сид-фразе. На самом деле от того же генератора зависело больше, и это стоит проверить по списку:

  • Бумажные кошельки, сгенерированные на Coldcard, — худший случай во всём инциденте. Там нет промежуточных преобразований: выход генератора становится приватным ключом напрямую. А публичный адрес такого кошелька работает для атакующего оракулом — он сразу видит, угадал или нет.
  • Маски Seed XOR в режиме случайного разделения — если вы разбивали сид на части этой функцией.
  • Ключи клонирования и USB-ключи устройства.
  • Key Teleport — материал для переноса между устройствами.
  • TOTP-секрет Web2FA — двухфакторная привязка.
  • Пароли, сохранённые в Secure Notes.
  • Локальный код HSM, если вы им пользовались.

Проще всего исходить из правила: всё, что устройство когда-либо «придумывало» само на затронутой прошивке, считаем скомпрометированным.

Что делать — пошагово

  1. Определите прошивку на момент создания сида. Не текущую. Если не помните — считайте, что попадаете под удар: доказать обратное нечем.
  2. Обновитесь до исправленной версии своей ветки (см. таблицу выше). Это нужно не для спасения старого ключа, а чтобы новый создавался нормально.
  3. Сгенерируйте новый сид на обновлённом устройстве. Если есть возможность — добавьте броски кубика.
  4. Сделайте и проверьте резервную копию нового сида, сверьте отпечаток кошелька и адрес получения.
  5. Проведите тестовую транзакцию на небольшую сумму и убедитесь, что средства приходят и отправляются.
  6. Переведите остаток со старых адресов на новые.
  7. Старую резервную копию не уничтожайте, пока не убедитесь, что на старых адресах ничего не осталось.

Если Coldcard у вас единственный. Этот сценарий есть только в самом предупреждении Coinkite и по-русски нигде не пересказан. Устройство одно, а сидов нужно два, поэтому их придётся по очереди подставлять на одно и то же устройство — старый, чтобы подписать перевод, новый, чтобы принять средства. Порядок такой:

  1. Проверьте бумажную резервную копию затронутого сида и сверьте отпечаток кошелька — вам придётся возвращать этот сид ещё дважды.
  2. Установите исправленную прошивку своей ветки и убедитесь по экрану устройства, что версия действительно сменилась.
  3. Сотрите устройство и создайте на нём новый сид. Запишите его, проверьте резервную копию, зафиксируйте отпечаток кошелька и адрес получения.
  4. Восстановите на устройстве затронутый сид и отправьте небольшую тестовую транзакцию на записанный адрес нового кошелька.
  5. Восстановите новый сид и убедитесь, что отпечаток совпал, а тестовая сумма пришла.
  6. Снова восстановите затронутый сид и переведите на новые адреса весь остаток.
  7. Восстановите новый сид и подтвердите, что баланс на месте. Старую резервную копию храните, пока не убедитесь в этом окончательно.

Смысл манёвра — ни в один момент не остаться без работающей копии ключей и не отправлять крупную сумму на непроверенный адрес.

Если вы покупаете второе устройство под миграцию — не пропускайте распаковку: как проверить аппаратный кошелёк на подлинность, мы разбирали отдельно.

Чего делать НЕ надо

  • Не восстанавливайте старый сид на новой прошивке «чтобы починить». Прошивка не меняет уже существующий ключ.
  • Не спешите. Coinkite прямо предупреждает: суета при миграции опаснее самой уязвимости. Потерять доступ по собственной ошибке проще, чем попасть под перебор.
  • Не считайте passphrase поводом остаться. Она защищает конкретный кошелёк, а не сид.
  • Не переносите средства на биржу «на время». Из инцидента с генератором ключей не следует, что кастодиальное хранение надёжнее — вы просто меняете один класс рисков на другой.
  • Не полагайтесь на самопроверку. Её не существует: слабый сид даёт валидные слова, валидную контрольную сумму, валидные адреса и валидные подписи. Это редкий класс уязвимостей, где «у меня всё работает» — не аргумент, а симптом.

Что эта история меняет в правилах выбора и эксплуатации

Аппаратный кошелёк защищает от того, что происходит после рождения ключа: от вируса на компьютере, от подмены адреса, от физического доступа к устройству. Этот инцидент случился до — в момент создания ключа. Туда почти никто не смотрел, и проверить это самостоятельно владелец не может в принципе.

Отсюда три вывода, которые стоит перенести на любой кошелёк, а не только на Coldcard. Они же меняют логику того, как выбрать аппаратный кошелёк:

Разнородность важнее бренда. Два одинаковых устройства — это одна точка отказа, удвоенная. Если делаете мультиподпись, берите разных производителей.

Собственная энтропия перестала быть опцией. Броски кубика при создании сида — это минут десять один раз в жизни кошелька, и в этом инциденте они оказались единственной защитой, сработавшей на сто процентов.

Схема генерации ключа — вопрос, который надо задавать до покупки. Здесь показательна реакция конкурентов: Ledger заявил, что использует сертифицированный аппаратный генератор внутри защищённого элемента с 256 битами энтропии (подробности — в нашем обзоре Ledger Nano X), Trezor сообщил, что их код с Coldcard не пересекается, Foundation 1 августа опубликовала собственную ревизию энтропии Passport. Всё это заявления заинтересованных сторон, проверяемые только по их же документации, — но сам факт, что вендоры бросились отчитываться именно по этому пункту, показывает, насколько он оказался слепым пятном. Есть и принципиально другие схемы — например, холодное хранение без сид-фразы, где ключ вообще не выводится наружу в виде слов.

Отдельно — про совет разносить средства по нескольким кошелькам, который 1 августа публично дал Чанпэн Чжао со словами «ничто не даёт 100%». Совет по существу верный, но у него есть источник со своим интересом: это основатель крупнейшей биржи, для которой самостоятельное хранение — конкурент.

Ещё один урок — организационный, и он неочевидный. Как отметил сооснователь Casa Джеймсон Лопп, Coinkite удаляет данные покупателей через 120 дней — чтобы их нельзя было украсть при утечке. Из-за этого компания физически не может обзвонить владельцев уязвимых устройств за пять лет продаж. Требования безопасности здесь конфликтуют между собой: приватность клиентов и возможность их предупредить оказались взаимоисключающими.

Риски, которые остаются после миграции

Миграция закрывает главную проблему, но не превращает хранение в беспроблемное. Честный список того, что остаётся:

Риск самой миграции — сейчас он выше остальных. Вы работаете с ключами вручную, часто торопясь, часто впервые. Coinkite прямо предупреждает: суета опаснее уязвимости. Типовые способы потерять доступ здесь — ошибиться при записи новой сид-фразы, стереть устройство до того, как средства реально дошли, перепутать старый и новый бэкап. Отсюда пункты 4–7 плана выше: тестовая транзакция и сохранение старой копии до конца — это не перестраховка, а основной способ не потерять деньги на ровном месте.

Новые волны вывода вероятны. Galaxy Research отслеживает семь адресов-накопителей и 293 адреса-хранилища и предупреждает, что перебор может продолжиться, пока владельцы не переместят средства. Каждый день на старом сиде — это ставка на то, что до вашего адреса не дошла очередь.

Оценка стойкости может ухудшиться. Обе цифры — и 72 бита Coinkite, и 2^32 Block — помечены самими авторами как предварительные. Уточнения в этом жанре обычно идут в сторону «хуже, чем думали»: так уже случилось с оценкой ущерба, выросшей с 594 до 1 367 BTC за сутки.

За ошибку вендора платит владелец. Это оборотная сторона самостоятельного хранения, и её стоит проговорить прямо: страховки нет, компенсации нет, откатить транзакцию нельзя. Из этого не следует, что кастодиальное хранение безопаснее — там свой набор рисков, от блокировки счёта до банкротства площадки. Следует другое: раз цена ошибки полностью на вас, разумно не держать всё в одной схеме и в одном устройстве.

Обратная сторона: аппаратные кошельки не перестали работать. Ни одно устройство в этом инциденте не было взломано, физическая защита сработала как задумано, сломался один компонент у одного вендора. Скорость реакции оценивают по-разному: по хронологии Block предварительное предупреждение Coinkite вышло 30 июля, в день первой волны, а исправленные прошивки для всех веток — 31 июля и 1 августа; CryptoBriefing при этом оценивает задержку до предупреждения примерно в 30 часов от начала выводов. Репутационный след уже есть: 31 июля в каталоге кошельков Bitcoin.org открыли запрос на удаление листингов Coldcard и Coldcard Q, 1 августа его приняли — кошельки из каталога убрали. Вывод «аппаратные кошельки бесполезны» из этой истории не следует — следует, что проверять надо и то, как именно рождается ключ.

Что осталось невыясненным

Честная граница знания на 2 августа 2026 года выглядит так.

Причинная связь формально не доказана. Block в своём разборе прямо пишет, что не проводил полного эмпирического тестирования эксплуатируемости. Главный аргумент в пользу связи — то самое совпадение: среди украденных монет нет ни одной старше даты релиза уязвимой прошивки.

Роль ИИ — версия, а не факт. Coinkite предполагает, что кто-то прогнал старые версии кода через ИИ-модель и так нашёл ошибку. Сама компания за несколько недель до инцидента прогоняла тот же код через одну из лучших моделей — та не нашла ничего. Из этого не следует ни «ИИ взломал кошелёк», ни «ИИ бесполезен»: следует только, что автоматическое ревью — не гарантия ни для одной из сторон.

Шанс на возврат средств ненулевой. Атакующий допустил бытовую ошибку: запрашивал данные по адресам через платный аккаунт известного блокчейн-провайдера, и логи совпали по числу, времени и порядку запросов. Материалы 31 июля переданы правоохранительным органам. Практический вывод шире конкретного дела: анонимность в биткоине ломается не о сам блокчейн, а о сервисы вокруг него.

Это не первый случай такого рода. В 2013 году биткоины воровали из-за недосеянного генератора случайных чисел в Android — механизм был тот же. Первопричину в этот раз чинят на уровне библиотеки: в libngu добавляют режим, при котором отсутствие аппаратного источника энтропии приводит к аварийной остановке вместо тихого перехода на программный, программный генератор заменяют на проверенный по стандарту, а проверку добавляют на этап сборки.

FAQ

Мой Coldcard куплен в 2023 году. Я в опасности? Скорее всего да, если это Mk4, Mk5 или Q и сид создавался на заводской прошивке. Устройства с 2021 по июль 2026 года поставлялись с затронутыми версиями. Дата покупки роли не играет — играет прошивка на момент создания сида.

Я обновил прошивку. Этого достаточно? Нет. Обновление защищает только сид, созданный после него. Ключ, который у вас уже есть, обновлением не меняется. Нужен новый сид и перенос средств.

Мой сид с Coldcard я давно ввёл в другой кошелёк. Там безопасно? Нет. Слабость находится в самом сиде, а не в устройстве. Любой кошелёк, восстановленный из этого сида, наследует ту же проблему.

Ledger и Trezor тоже под ударом? По этому конкретному багу — нет, код не общий. Оба вендора выступили с заявлениями о собственных генераторах. Проверить эти заявления независимо нельзя, так что относитесь к ним как к позиции заинтересованной стороны, а не как к аудиту.

Я бросал кубик, но не помню сколько раз. Считайте, что защиты нет, и мигрируйте. Нижняя граница — 50 честных приватных бросков; всё, что меньше, оставляет заметный разрыв, а «примерно столько» здесь не работает.

Могу ли я как-то проверить свой сид на слабость? Нет. Публичного инструмента не существует, и по устройству это никак не видно: слабый сид проходит все стандартные проверки. Это и есть причина, по которой единственное честное правило звучит как «сомневаешься — мигрируй».

BYBIT · СПОТ И ФЬЮЧЕРСЫ
Крипта с нуля
Комиссия 0,1%, торги 24/7, старт с $10
Открыть счёт
Поделиться
Связаться:
Крипто- и data-аналитик, инженер-программист (факультет компьютерных наук ХНУРЭ). В IT с 2008 года: администрировал корпоративный мониторинг в «Vodafone Украина», семь лет разрабатывал и продвигал веб-проекты, пять лет руководил маркетингом на метриках — конверсия, CTR, ROI, LTV.Криптовалютными рынками занимаюсь с 2021 года: ончейн-метрики, токеномика, макроэкономические индикаторы. Разработал собственную data-driven модель анализа рынка на 30+ метрик. Стек — Python (pandas, NumPy, SciPy, matplotlib), математическая статистика и EDA; сбор и сверку данных автоматизирую AI-агентами.Принцип — «Don't trust, verify»: каждая цифра проверена по первоисточнику, ключевые — минимум по двум независимым; прогнозы — только сценарии с условиями. Тезис без данных не публикуется.