Ошибка сборки в прошивке Coldcard привела к потере 38 миллионов долларов в биткоинах за 25 минут

BTC
снижение энтропииАппаратный кошелеккража биткоиновошибка прошивкиэксплойт с ИИColdcard
2026-08-01Источник: crypto.news
Ошибка сборки в прошивке Coldcard привела к потере 38 миллионов долларов в биткоинах за 25 минут

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

Резюме

  • Злоумышленник вывел 594 BTC (примерно 38 миллионов долларов) из примерно 500 аппаратных кошельков Coldcard за 25 минут 31 июля, воспользовавшись ошибкой генерации сид-фразы, присутствовавшей с марта 2021 года.
  • Ошибка снизила эффективную энтропию сид-фраз Mk3 со 128 бит до примерно 40 бит, что сделало приватные ключи угадываемыми с помощью вычислений методом перебора, а не криптографической атаки.
  • Coinkite, производитель Coldcard, считает, что злоумышленник использовал ИИ для обнаружения уязвимости в их открытом исходном коде прошивки, и утверждает, что их собственный ИИ-аудит того же кода несколькими неделями ранее ничего не нашел.
  • Каждая текущая модель Coldcard затронута в той или иной степени: для Mk4, Q и Mk5 энтропия сид-фраз оценивается примерно в 72 бита вместо 128, и обновление прошивки не исправляет уже созданные сид-фразы.
  • Block, Trezor и Ledger подтвердили, что их продукты не затронуты, в то время как инцидент поднимает фундаментальные вопросы о том, можно ли доверять аппаратным кошелькам как единственному уровню хранения значительных объемов биткоина.

Атака заняла 25 минут. В 2:14 UTC 31 июля одна сущность начала выводить биткоины с аппаратных кошельков Coldcard. К 2:39 UTC 594 BTC были перемещены из примерно 500 кошельков на консолидационный адрес. Средства, стоимостью примерно 38 миллионов долларов на момент вывода, не были украдены с помощью фишинга, вредоносного ПО или физического доступа к устройствам. Они были украдены, потому что устройства генерировали предсказуемые приватные ключи.

Coinkite, компания из Торонто, производящая Coldcard, опубликовала предупреждение и технический разбор 30 июля после обнаружения уязвимости. Компания заявила, что ошибка сборки в прошивке привела к тому, что генерация сид-фразы использовала программный резервный источник случайности вместо аппаратного генератора случайных чисел, который устройство должно было использовать. Ошибка присутствовала с версии прошивки 4.0.1, выпущенной в марте 2021 года. Каждая сид-фраза, сгенерированная на затронутом Coldcard за последние пять лет, была слабее, чем считал ее владелец.

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

Механизм: как 128 бит превратились в 40

Техническое объяснение одновременно простое и тревожное. Прошивка Coldcard вызывает функцию для получения случайности во время генерации сид-фразы. В кодовой базе существовали две реализации этой функции с одинаковыми сигнатурами: аппаратный генератор случайных чисел, написанный Coinkite, и программный резервный, унаследованный от MicroPython, встроенной среды выполнения Python, на которой построена прошивка.

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

Для Mk3 Coinkite оценивает эффективное пространство поиска для сид-фразы, сгенерированной в этом состоянии, примерно в 40 бит. 128-битная сид-фраза имеет больше возможных комбинаций, чем атомов в наблюдаемой вселенной. 40-битная сид-фраза имеет примерно триллион комбинаций. Это достижимо для злоумышленника со средними ресурсами, использующего обычное оборудование. Разница не является ошибкой округления. Это разница между замком, который нельзя взломать, и замком, который можно выбить.

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

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

Измерение ИИ

В рекомендациях Coinkite было заявление, которое сразу же вызвало критику со стороны сообщества специалистов по безопасности. Компания заявила, что считает, что «кто-то использовал ИИ для проверки предыдущих версий нашей прошивки», чтобы обнаружить ошибку. Она также добавила, что за несколько недель до атаки прогнала ту же самую модель «одну из лучших доступных моделей» по тому же коду, и модель «не нашла эту ошибку или что-то серьезное».

Это утверждение правдоподобно, но не подтверждено. Прошивка Coldcard является открытым исходным кодом и публично доступна на GitHub. Любой человек или автоматизированная система может ее проверить. Конкретный класс ошибок, защита препроцессора, которая проверяет определение, а не значение, — это тот тип тонких ошибок в пути кода, которые большие языковые модели показали разную способность обнаруживать в зависимости от контекста, инженерии запросов и используемой модели.

Асимметрия, описанная Coinkite, реальна, даже если ее конкретная атрибуция является спекулятивной. У атакующих и защитников действительно есть доступ к одним и тем же инструментам ИИ. Но у атакующих есть структурное преимущество: им нужно найти одну эксплуатируемую уязвимость, в то время как защитникам нужно найти все. ИИ, который проверяет код и не сообщает о серьезных проблемах, дает ложную уверенность. ИИ, который проверяет код и находит единственный эксплуатируемый путь, предоставляет атакующему все необходимое.

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

Сообщество исследователей безопасности обсуждало утверждение об атрибуции ИИ со скепсисом. Некоторые исследователи отметили в социальных сетях, что конкретный класс ошибок, защита препроцессора, проверяющая определение, а не значение, хорошо задокументирован в литературе по встроенным системам и мог быть найден с помощью обычной проверки кода. Они утверждали, что формулировка с ИИ рискует скрыть более фундаментальный провал: у Coinkite не было достаточных процессов ручной проверки для критического пути кода, который не менялся в течение пяти лет. Независимо от того, нашла ли ошибку ИИ или исследователь-человек, основная проблема та же. Код был публичным, ошибка была тонкой, но не новой, и никто на стороне защиты ее не заметил.

Block опубликовал независимый технический анализ 31 июля, подтвердив, что ни один из его продуктов, включая Bitkey, не затронут. Руководитель аппаратного обеспечения Block Макс Гиз призвал всех, у кого есть затронутый Coldcard, «перевести средства как можно скорее и безопасно». Trezor подтвердил, что его устройства используют другой подход к генерации энтропии и не уязвимы. Ledger не опубликовал официального ответа, но его архитектура Secure Element использует выделенный аппаратный генератор случайных чисел, который работает независимо от прошивки.

Пятилетнее окно

Временные рамки уязвимости так же разрушительны, как и сама уязвимость. Версия прошивки 4.0.1, в которой была обнаружена ошибка, была выпущена в марте 2021 года. Каждая сид-фраза, сгенерированная на затронутом Coldcard в период с марта 2021 года по выпуск исправленных прошивок 31 июля 2026 года, потенциально скомпрометирована. Это пять лет и четыре месяца затронутой генерации сид-фраз.

В течение этого окна Coldcard выпустил Mk3 (затронут на 40 бит), Mk4 (затронут на 72 бита) и Q (затронут на 72 бита). Mk5, выпущенный в 2026 году, также затронут на 72 бита. Coinkite выпустила несколько обновлений прошивки в этот период, ни одно из которых не устранило и не обнаружило проблему с энтропией. Собственные проверки безопасности компании, включая недавний ИИ-аудит, не выявили ее.

Пятилетнее окно также совпало с периодом значительного роста цены биткоина. Сид-фразы, сгенерированные на затронутых устройствах Mk3 в 2021 году, когда биткоин торговался между 29 000 и 69 000 долларов, теперь защищают активы по ценам выше 60 000 долларов. Экономический стимул для атакующего вкладывать вычислительные ресурсы в подбор 40-битных ключей методом перебора возрастал с каждым ростом цены. Кошелек с 1 BTC, который стоил 30 000 долларов, когда была сгенерирована сид-фраза, теперь стоит вдвое больше. Окупаемость инвестиций атакующего улучшилась просто благодаря ожиданию.

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

Схема консолидации атакующего указывает на систематическую подготовку. 594 BTC были собраны примерно из 500 кошельков в консолидационный адрес, а затем перемещены на один адрес, содержащий 562 BTC. Окно выполнения в 25 минут и количество одновременно атакованных кошельков указывают на то, что атакующий заранее вычислил уязвимые ключи до начала сбора. Это не была оппортунистическая атака. Это была операция, требовавшая недель или месяцев подготовки.

Анализ цепочки при сборе показывает методичную последовательность выполнения. Атакующий не транслировал все 500 транзакций одновременно, что могло бы привести к перегрузке мемпула и потенциальному опережению ботами в стиле MEV, отслеживающими необычные паттерны транзакций. Вместо этого транзакции были сгруппированы в пакеты, каждый из которых подтверждался в течение одного-двух блоков. Консолидационный адрес получал средства через несколько блоков, прежде чем финальная транзакция переместила 562 BTC на адрес, который, по-видимому, является адресом долгосрочного хранения. На момент написания этой статьи средства не перемещались дальше.

Проблема миграции

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

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

Для пользователей, хранящих биткоин в мультиподписных схемах, где Coldcard служил одним из нескольких устройств для подписи, миграция сложнее, но риск частично смягчен. Мультиподписной кошелек 2 из 3, где только один ключ был сгенерирован на затронутом Coldcard, остается безопасным, пока атакующий не сможет скомпрометировать второй ключ. Однако скомпрометированный ключ все равно ослабляет общую модель безопасности и должен быть заменен. Процесс требует координации со всеми держателями ключей для создания нового мультиподписного кошелька с заменяющим ключом, подписания транзакции миграции с существующим кворумом и проверки новой схемы перед перемещением оставшихся средств.

Coinkite рассмотрела один крайний случай, который дает частичное облегчение. Пользователи, которые добавили как минимум 50 независимых бросков игральных костей во время генерации сида, внесли достаточно внешней энтропии, чтобы поднять общую сумму выше 128 бит, независимо от ошибки прошивки. Ввод с костей был хэширован вместе со случайностью, сгенерированной устройством, поэтому сильная энтропия костей компенсировала слабую энтропию устройства. Пользователи, добавившие 99 или более бросков, внесли примерно 256 бит только от костей.

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

Что это значит для безопасности аппаратных кошельков

Инцидент с Coldcard — не первый случай компрометации аппаратного кошелька. Ledger столкнулся с утечкой базы данных в 2020 году, которая раскрыла информацию о клиентах. Trezor раскрыл уязвимость физического извлечения в 2023 году. Но те инциденты касались либо раскрытия метаданных, либо требований физического доступа. Ошибка Coldcard отличается тем, что она подрывает фундаментальное обещание безопасности устройства: что оно генерирует по-настоящему случайные закрытые ключи.

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

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

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

Практический урок заключается в том, что аппаратные кошельки не следует рассматривать как единственный уровень хранения значительных объемов биткоина. Схемы с несколькими подписями, распределяющие ключи между несколькими устройствами разных производителей, в сочетании с независимо генерируемыми источниками энтропии, обеспечивают эшелонированную защиту, которую не может обеспечить ни одно отдельное устройство. Инцидент с Coldcard демонстрирует, что даже самое надежное устройство может выйти из строя способами, незаметными для пользователя, пока средства не исчезнут.

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

За чем следить

  • **Перемещение атакующим 562 BTC после консолидации.** Будут ли средства смешаны, отправлены на биржи или останутся на месте, даст информацию о сложности и юрисдикции атакующего. Фирмы по анализу цепочек уже отслеживают этот адрес.
  • **Дополнительные затронутые кошельки помимо первоначальных 500.** Атакующий мог вычислить ключи для дополнительных кошельков, но решил не вычищать их одновременно. Общий объем средств, затронутых во всех затронутых моделях Coldcard, может быть значительно больше первоначальных 38 миллионов долларов.
  • **Темпы миграции пользователей.** Coinkite не может заставить пользователей генерировать новые сид-фразы. Количество кошельков, остающихся на скомпрометированных сид-фразах через 30, 60 и 90 дней, покажет, насколько эффективно предупреждение достигло затронутой базы пользователей.
  • **Реакция регулирующих органов.** Потеря 38 миллионов долларов, вызванная ошибкой в прошивке производителя в потребительском финансовом продукте, вызвала бы регулирующие меры в традиционных финансах. Ответят ли агентства по защите прав потребителей или финансовые регуляторы на этот инцидент, покажет, как правительства классифицируют аппаратные кошельки.
  • **Раскрытие информации о безопасности конкурентами.** Block, Trezor и Ledger подтвердили, что они не затронуты. Публикация ими подробного технического анализа собственных процессов генерации энтропии покажет, рассматривает ли отрасль это как специфический сбой Coldcard или как системную возможность для пересмотра.

Часто задаваемые вопросы

Сколько биткоинов было украдено в результате эксплойта Coldcard?

Примерно 594 BTC, стоимостью около 38 миллионов долларов, было выведено примерно из 500 аппаратных кошельков Coldcard за 25 минут 31 июля 2026 года. Средства были консолидированы на одном адресе, содержащем 562 BTC.

Что вызвало уязвимость Coldcard?

Ошибка сборки в прошивке Coldcard привела к тому, что при генерации сид-фразы использовался программный резервный генератор случайных чисел из MicroPython вместо аппаратного генератора случайных чисел. Защита препроцессора проверяла только, определена ли конфигурационная настройка, а не ее значение, поэтому сборка без предупреждения связалась с неправильной реализацией.

Насколько слабыми были затронутые сид-фразы?

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

Исправляет ли проблему обновление прошивки?

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

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

Каждая текущая модель затронута в той или иной степени. Mk3 наиболее серьезно затронут с 40 битами энтропии. Mk4, Mk5 и Q затронуты примерно на 72 бита. Tapsigner, Opendime и Satscard используют другой код и не затронуты.

Затронуты ли другие аппаратные кошельки?

Block, Trezor и Ledger подтвердили, что их продукты не затронуты. Block опубликовал независимый технический анализ. Trezor заявил, что его устройства используют другой подход к генерации энтропии. Уязвимость специфична для процесса сборки прошивки Coldcard.

Знала ли Coinkite об ошибке до атаки?

Coinkite утверждает, что обнаружила недостаток и опубликовала рекомендации 30 июля, после того как об ошибке сообщили. Компания заявляет, что провела ИИ-проверку своей прошивки за несколько недель до атаки, и проверка не выявила проблему. Ошибка присутствовала с марта 2021 года.

Что сейчас следует сделать владельцам Coldcard?

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