Ad
Криптовалюта

Кошелёк не взламывали: ошибку Coldcard связали с выводом 594 BTC

Маша Даровская
By Маша Даровская , IT-редактор и автор
Кошелёк не взламывали: ошибку Coldcard связали с выводом 594 BTC
Обложка © Anonhaven

Производитель аппаратных биткоин-кошельков Coinkite предупредил владельцев Coldcard о критической ошибке при создании сид-фраз. На устройствах Mk3 эффективная энтропия могла падать примерно до 40 бит. На более новых Mk4, Mk5 и Q показатель в отдельных случаях составлял около 72 бит вместо целевых 128.

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

Предупреждение появилось почти одновременно с необычной серией переводов в сети Bitcoin. За три блока и примерно 25 минут было перемещено 594,48 BTC стоимостью около 38 млн долларов. Доступные данные пока не доказывают, что всю сумму вывели благодаря ошибке Coldcard. Coinkite продолжает расследование и ещё не опубликовал полный технический разбор.

Для Coldcard Mk3 проблема присутствует в прошивках от 4.0.1 до 4.1.9 включительно. Версия 4.0.1 появилась в марте 2021 года. Потенциально слабые сид-фразы могли создаваться на этих устройствах более пяти лет.

Обновлённое предупреждение Coinkite распространяется и на более новые модели. Затронуты фразы, созданные:

  • на Mk3 с прошивкой 4.0.1–4.1.9;

  • на Mk4 и Mk5 до стандартной версии 5.6.0;

  • на Mk4 и Mk5 до экспериментальной версии Edge 6.6.0X;

  • на Q до стандартной версии 1.5.0Q;

  • на Q до версии Edge 6.6.0QX.

Tapsigner, Opendime и Satscard не затронуты, поскольку используют другую кодовую базу.

Некоторые первые публикации указывали, что проблема касается всех версий Mk3 до 5.0.3, а Mk4, Mk5 и Q не пострадали. Эти сведения устарели. Coinkite обновил предупреждение 31 июля и указал более узкий диапазон для Mk3, одновременно добавив в список другие модели.

Сид-фраза представляет исходный секрет кошелька в виде последовательности слов. Из неё программное обеспечение получает начальное значение, а затем рассчитывает приватные ключи и биткоин-адреса.

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

Журнал изменений прошивки указывает, что на Mk3 эффективная энтропия могла составлять всего около 40 бит. Для Mk4, Mk5 и Q она могла опускаться примерно до 72 бит при целевом уровне в 128 бит.

40 бит соответствуют примерно 2⁴⁰, или 1,1 трлн возможных состояний. Для человека это огромное число, но для современного криптографического секрета такой уровень считается критически низким. Производитель прямо потребовал заменить созданные на затронутых версиях фразы.

72 бита дают значительно больше вариантов, чем 40, однако этот показатель также остаётся ниже заявленного Coinkite целевого уровня. Компания считает проблему серьёзной для всех перечисленных моделей.

Стандарт BIP-39 позволяет создавать мнемонические фразы длиной от 12 до 24 слов. Для стандартной фразы из 24 слов сначала генерируются 256 бит исходной энтропии. К ним добавляется восьмибитная контрольная сумма, после чего 264 бита делятся на 24 группы по 11 бит. Каждая группа указывает на слово из словаря, содержащего 2048 позиций.

Полное пространство исходных значений в таком случае составляет 2²⁵⁶ вариантов. Длина фразы показывает объём данных, который способен хранить формат, но не доказывает качество случайности. Алгоритм может вывести корректную последовательность из 24 слов с правильной контрольной суммой, выбрав её из небольшого подмножества всех допустимых вариантов.

Внешне такая фраза ничем не отличается от безопасной. Она восстанавливается в совместимых кошельках, создаёт корректные адреса и позволяет подписывать транзакции. Проблема проявляется только в том, что возможных исходных значений намного меньше, чем ожидает пользователь.

Получать физический доступ к Coldcard в таком сценарии необязательно. Не требуется также заражать компьютер владельца или перехватывать соединение с аппаратным кошельком.

Атакующий, знающий механизм ошибки, может воспроизводить возможные результаты генератора. Из каждого значения рассчитываются мнемоническая фраза, начальное значение кошелька, приватные ключи и соответствующие адреса.

Проверить, получали ли рассчитанные адреса средства, можно без обращения к устройству владельца. Если адрес с ненулевым балансом найден, правильный приватный ключ уже известен атакующему.

Практическая сложность такого перебора зависит от устройства, используемых путей получения ключей, типов адресов, алгоритма преобразования BIP-39 и точного характера ошибки. Coinkite пока не опубликовал воспроизводимый способ вычисления затронутых сид-фраз, поэтому оценивать необходимое время и оборудование преждевременно.

Исследователи отдельно изучают скоординированную серию переводов, прошедшую в течение трёх блоков Bitcoin. Предварительный анализ руководителя AnchorWatch Роба Хэмилтона указывает на 1324 потраченных непогашенных выхода транзакций, объединённых примерно в 500 новых транзакциях. Общая сумма составила 594,48 BTC.

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

Число 1324 нельзя считать количеством транзакций, пострадавших пользователей или взломанных кошельков. Примерно 500 транзакций также не доказывают наличие 500 отдельных сид-фраз: несколько переводов могли относиться к одному владельцу, а одна фраза способна создавать множество адресов.

Около 562 BTC позднее собрали на одном адресе. Изученные входы относились к одноподписным кошелькам.

Интерес к Coldcard усилился после сообщения пользователя, который обнаружил исчезновение средств с кошелька. Сид-фраза была создана на Mk3, приобретённом в мае 2021 года, а позднее восстановлена на Mk4.

Специалисты предположили, что серия переводов может быть связана со слабым источником случайности в определённой библиотеке, партии устройств или версии прошивки. Рассматривалась и версия, что атакующий проверял ограниченный набор стандартных путей BIP-84. Она могла бы объяснить преобладание адресов Native SegWit и частичное опустошение некоторых кошельков. Публично не представлены полный список затронутых сид-фраз, воспроизводимый алгоритм их перебора или техническое доказательство, связывающее все 594,48 BTC с Coldcard.

Coinkite выпустил следующие исправленные версии:

  • Coldcard Mk3 — 4.2.0 или новее;

  • Mk4 и Mk5, стандартная ветка — 5.6.0 или новее;

  • Coldcard Q, стандартная ветка — 1.5.0Q или новее;

  • Mk4 и Mk5, ветка Edge — 6.6.0X или новее;

  • Coldcard Q, ветка Edge — 6.6.0QX или новее.

Стандартная ветка и Edge нумеруются отдельно. Высокий номер старой Edge-прошивки не означает, что исправление уже включено. Пользователю необходимо установить выпуск, предназначенный для его модели и ветки.

Создавать новую сид-фразу на затронутом устройстве до установки исправления нельзя.

Прошивка участвует в создании сид-фразы только в момент генерации. После этого кошелёк постоянно получает одни и те же ключи из уже существующей мнемонической последовательности.

Версия 4.2.0 исправляет генерацию новых фраз на Mk3, но не может добавить случайность в созданный ранее секрет. То же относится к исправлениям для Mk4, Mk5 и Q.

Владельцу затронутого кошелька нужно установить исправленную прошивку, создать новую сид-фразу и записать резервную копию. Затем необходимо проверить отпечаток кошелька и адрес получения, отправить небольшую тестовую сумму и только после её подтверждения переводить оставшийся баланс.

Старую резервную копию не следует уничтожать до полного завершения и проверки миграции. Coinkite предупреждает, что спешка при переносе может создать более серьезный риск, чем сама ошибка.

Владельцы Mk3 могут провести миграцию на том же устройстве после установки версии 4.2.0. При этом придётся несколько раз переключаться между старым и новым кошельками, восстанавливая соответствующие фразы.

Производитель рекомендует перед удалением любого секрета проверить письменную резервную копию и отпечаток кошелька. При наличии второго устройства с исправленной прошивкой процедура становится проще, но покупать новую модель специально для миграции необязательно.

К сид-фразе можно добавить отдельную парольную фразу BIP-39. Её иногда называют 25-м словом, хотя она может иметь произвольную длину и не обязана входить в стандартный словарь.

BIP-39 преобразует мнемоническую фразу в двоичное начальное значение с помощью PBKDF2-HMAC-SHA512 и 2048 повторений. Парольная фраза входит в соль этой операции. Каждый её вариант создаёт отдельный действительный кошелёк.

Сильная и уникальная парольная фраза добавляет независимый барьер. Атакующему потребуется определить не только потенциально слабые 24 слова, но и дополнительный секрет.

Короткую цитату, дату, распространённое выражение или повторно используемый пароль нельзя считать надёжной защитой. Coinkite рекомендует перейти на новую сид-фразу даже владельцам кошельков с сильной парольной фразой.

Речь идёт именно о BIP-39-пароле, а не о PIN-коде устройства. PIN ограничивает доступ к физическому Coldcard, но не участвует в расчёте кошелька из сид-фразы.

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

Coinkite считает, что от 50 до 98 независимых, честных и никому не известных бросков добавляли не менее 128 бит энтропии. Не менее 99 бросков обеспечивали примерно 256 бит.

Фраза не считается подверженной именно этой ошибке, если при её создании пользователь ввёл хотя бы 50 независимых бросков и нигде не сохранял последовательность. При меньшем количестве, отсутствии точных воспоминаний или возможной утечке результатов нужно перейти на новый кошелёк.

После обновления Mk3 до версии 4.2.0 опытные пользователи могут создать фразу исключительно из результатов кости. Для этого требуется не менее 99 бросков. Процедура необязательна: обычная генерация в исправленной прошивке уже считается достаточной.

Код прошивки Coldcard опубликован на GitHub. Репозиторий содержит инструкции по воспроизводимой сборке: исследователь может собрать прошивку самостоятельно и сравнить результат с официальным двоичным файлом.

Воспроизводимая сборка отвечает на вопрос, соответствует ли распространяемый файл опубликованному исходному коду. Она не доказывает, что сам код не содержит ошибок.

В репозитории используется лицензия MIT с условием Commons Clause, запрещающим продавать программное обеспечение или продукты и услуги, стоимость которых в значительной степени основана на его функциях. Поэтому более аккуратная формулировка — «исходный код опубликован и доступен для проверки».

Кодовая база была публичной, однако критическое снижение энтропии не раскрывалось с марта 2021 года до июля 2026-го. Доступность исходников создаёт возможность аудита, но не гарантирует, что специалисты действительно проверят нужный участок и обнаружат ошибку вовремя.

Решающее значение имеет не текущая прошивка, а модель и версия, на которой первоначально создавалась сид-фраза.

Миграция требуется для фраз, созданных:

  • на Mk3 с версиями 4.0.1–4.1.9;

  • на Mk4 или Mk5 до стандартной 5.6.0;

  • на Mk4 или Mk5 до Edge 6.6.0X;

  • на Q до стандартной 1.5.0Q;

  • на Q до Edge 6.6.0QX.

Исключение действует для фраз, при создании которых использовали не менее 50 независимых и секретных бросков честной кости.

Восстановление слабой фразы на новом Coldcard не исправляет её. Новое устройство рассчитывает те же приватные ключи из того же исходного секрета.

Вопросы и ответы

Из Coldcard действительно украли 38 млн долларов?

В сети Bitcoin зафиксировано перемещение 594,48 BTC стоимостью около 38 млн долларов. Публичных доказательств того, что всю сумму получили через ошибку Coldcard, пока нет.

Пострадали 500 кошельков?

Это не установлено. Предварительный анализ указывает примерно на 500 транзакций и 1324 потраченных UTXO. Одна сид-фраза может контролировать много адресов и участвовать в нескольких транзакциях.

Какие модели затронуты?

В список входят Mk3, Mk4, Mk5 и Q, если фраза была создана до установки соответствующего исправления. Tapsigner, Opendime и Satscard не затронуты.

Достаточно обновить прошивку?

Нет. Обновление исправляет генерацию новых фраз, но не усиливает ранее созданную. Средства нужно перевести на кошелёк с новым секретом.

Нужно ли покупать новый аппаратный кошелёк?

Нет. Mk3 после обновления до версии 4.2.0 способен корректно создать новую фразу. Второе устройство лишь упрощает перенос.

Защищает ли PIN-код?

Нет. PIN защищает доступ к физическому устройству, но не мешает использовать приватные ключи, рассчитанные из найденной сид-фразы.

Помогает ли парольная фраза BIP-39?

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

Безопасны ли фразы с бросками кости?

Coinkite считает достаточными не менее 50 независимых и секретных бросков, добавленных при создании фразы. При меньшем количестве или отсутствии уверенности требуется миграция.

Почему опубликованный код не помог?

Публикация исходников позволяет проводить аудит, но не означает, что аудит уже состоялся. Воспроизводимая сборка подтверждает соответствие файла исходному коду, а не безопасность самого кода.

Есть новость? Станьте автором.

Мы сотрудничаем с независимыми исследователями и специалистами по кибербезопасности. Отправьте нам новость или предложите статью на рассмотрение редакции.