Поиск хакера Coldcard: вор первой волны может быть известен ФБР
Ключевые выводы
- •Первая волна выводов средств с Coldcard переместила 1 082,65 BTC 30 июля 2026 года, и эти монеты пока не были переведены с адреса злоумышленника.
- •Block заявил, что связал свипы с платной учетной записью у провайдера blockchain-services, а журналы провайдера с чрезвычайной точностью совпали с шаблоном запросов.
- •К началу августа подтвержденные и оценочные потери по нескольким волнам превысили 1 800 BTC на более чем 5 000 адресов, а подтвержденный ущерб составил примерно $118 миллионов.
- •Уязвимость возникла из-за сбоя энтропии при генерации seed-фраз в прошивке Coldcard и затронула устройства вплоть до MK2 с прошивкой 4.0.1 и новее.
- •По словам исследователей, некоторые более поздние волны демонстрируют иное операционное поведение, что может указывать на то, что после раскрытия уязвимостью воспользовались дополнительные участники.

Правоохранительные органы, возможно, уже знают, кто вывел более 1 000 bitcoin с кошельков Coldcard в первой и крупнейшей волне июльских выводов 2026 года. По данным расследования Block, цепочка on-chain-свипов злоумышленника была связана с платной учетной записью у крупного поставщика данных о блокчейне, а внутренние журналы провайдера совпали с шаблоном кражи с «чрезвычайной точностью».
PSA: Атака продолжается и нацелена на слабые приватные ключи, сгенерированные на устройствах вплоть до MK2 с прошивкой 4.0.1 и более поздних версий. Если у вас может быть такое устройство, проверьте его и переведите средства как можно скорее. См. рекомендацию Coinkite и страницу статуса.
Монеты из этой первой волны — 1 082,65 BTC — по-прежнему остаются нетронутыми на адресе злоумышленника. Это оставляет надежду, что пострадавшие смогут вернуть хотя бы часть украденных средств. Главный вопрос теперь — кто именно стоит за атакой и указывает ли тот же след на изощренного внешнего злоумышленника или на нечто ближе к внутренней «retirement attack», о которой Coinkite когда-то сам предупреждал.
Риски выходят далеко за пределы пользователей Coldcard. Устройства Coldcard, выпускаемые Coinkite, входят в число наиболее известных аппаратных кошельков для хранения bitcoin в режиме self-custody, где приватные ключи генерируются и хранятся офлайн, а не на подключенных к интернету серверах. Ошибка в генерации случайности для этих ключей подрывает саму основу этой модели.
Что известно
30 июля 2026 года злоумышленник начал систематически выводить bitcoin из аппаратных кошельков Coldcard, которые сгенерировали seed-фразы под уязвимой прошивкой — ошибка оставалась незамеченной годами. Первая и крупнейшая волна переместила 1 082,65 BTC. Затем последовали новые волны, и оценки превысили 2 000 BTC. Алекс Торн из Galaxy Research отслеживал активность с помощью анализа on-chain-шаблонов и добровольных отчетов пострадавших. К началу августа подтвержденные и оценочные потери по нескольким волнам превысили 1 800 BTC более чем с 5 000 адресов, хотя окончательные итоги продолжают уточняться по мере поступления новых сообщений. В денежном выражении подтверждено кражу примерно на $118 миллионов.
Торн публично говорил, что у правоохранительных органов, возможно, уже есть конкретная зацепка по оператору, стоящему за крупнейшей частью вывода. В сегменте Bitcoin Policy Institute, опубликованном на YouTube-канале Bitcoin Magazine, Торн заявил: «Wave one’s identity, attacker identity, may be known to law enforcement.» Он добавил, что Wave 1 по-прежнему остается крупнейшим отдельным блоком, идентифицированным на данный момент, а монеты все еще находятся на адресе злоумышленника; также он отметил, что шаблон Wave 2 достаточно похож и может указывать на того же самого участника. Wave 2 добавляет к общей сумме еще около 76 bitcoin.
Основной источник утверждения о том, что личность хакера может быть известна, — Clay Garrett, инженерный руководитель в Block, работающий над Bitkey. 31 июля 2026 года Garrett опубликовал выводы расследования Block:
«During our investigation of the Coldcard drain yesterday, we identified an unusual pattern in the sweeps. That pattern led us to a hypothesis that has since been confirmed: the operator used a paid account at a well-known blockchain-services provider to query the source addresses and perform other related activity during the sweeps.»
«We contacted the provider directly. Their internal logs matched the suspected workflow with extraordinary specificity, including the number, timing and sequence of requests. The provider was supplying its standard services in response to requests that did not reveal their broader purpose. We have seen no evidence that the provider knowingly participated in or facilitated the suspected theft.» Garrett said, and added that; «We are sharing the relevant information with the appropriate authorities. We will provide further updates when doing so will not interfere with the investigation.»
Для следствия этот вывод важен, потому что он соединяет on-chain-кражу с реальной личностью: свипы были связаны с платной учетной записью, журналы запросов которой — количество, время и последовательность обращений — сохранились у провайдера, создавая внечейн-след, который, по словам Garrett, Block теперь передает соответствующим органам.
Торн и другие отмечали, что более поздние, меньшие волны демонстрируют иные операционные шаблоны — включая быстрые, opportunistic drains с последующим оперативным отмыванием, — что позволяет предположить, что дополнительные участники могли реверс-инжинирить то же слабое пространство seed-фраз после первоначальной публичной информации. По собственным отчетам, подтвержденные выводы резко замедлились после 6 августа, хотя многие потенциально уязвимые seed-фразы, созданные на затронутой прошивке между 2021 годом и патчем июля 2026 года, остаются под риском, пока пользователи не переведут средства.
Это была внутренняя атака?
Характер сбоя породил теории заговора о внутренних атаках, которые Coinkite когда-то сам обсуждал публично. В октябре 2021 года официальный аккаунт COLDCARD определил «retirement attack» как сценарий, «when the project makers could have a ‘bug’ in the entropy generation for later retrieval.» Сообщение по-прежнему доступно здесь.
Уязвимость 2026 года привела именно к такому результату: seed-фразы были сгенерированы с гораздо меньшей энтропией, чем предполагалось, из-за чего их можно было искать спустя годы. Некоторые в Bitcoin-сообществе теперь считают, что взлом мог быть внутренней операцией Coinkite, тогда как другие с этим не согласны. Публичных доказательств по-прежнему недостаточно для однозначного вывода, а новые сведения, вероятно, появятся лишь через годы, возможно только в ходе судебных процессов.
Критическое изменение вошло в кодовую базу 1 марта 2021 года в коммите с названием «First pass w/ libNgU» (b18723dd). Этот коммит заменил оставшийся код криптографии и BIP-39, унаследованный от Trezor, новой библиотекой libngu и изменил логику генерации seed-фраз. Предполагалось, что вызов случайности будет использовать истинный генератор случайных чисел STM32. Однако ошибка перенаправила вызов на программный PRNG Yasmarang в MicroPython, что привело к эффективному падению энтропии примерно до 40 бит на старых моделях и около 72 бит на новых. Это означало, что сгенерированные bitcoin-приватные ключи по сути можно было угадать с помощью современного вычислительного оборудования. Для масштаба: корректно сгенерированная Bitcoin seed-фраза обычно должна содержать от 128 до 256 бит энтропии, поэтому падение примерно до 40 бит сокращает пространство поиска на многие порядки — разница между ключами, которые практически невозможно угадать, и ключами, которые можно просто перебрать.
Переключение библиотек было внесено в кодовую базу Doc-Hex, также известным как Peter Gray, техническим директором Coinkite.
По словам Zach Herbert, CEO и основателя Foundation Devices, этот шаг мог быть вызван давлением, связанным с лицензированием, хотя Coinkite отрицала, что это было основной причиной изменения кода, заявив: «COLDCARD had to make this change to move to libsecp256k1; the license change is irrelevant to this. libsecp256k1 is the standard library used by Bitcoin Core.»
Coldcard использовал код, производный от Trezor, под лицензией GPLv3 open source. После того как Foundation Devices форкнул связанный материал, Coinkite стремился перевести оставшиеся компоненты на более ограничительную схему MIT + Commons Clause, ограничивавшую коммерческое повторное использование. Переписывание было крупным и преследовало сложные инженерные цели; именно эта интеграция, по всей видимости, и оставила тихий сбой в цепочке энтропии.
Скепсис по поводу ухода от криптобиблиотеки Trezor возник еще 7 апреля 2021 года, когда участник Telegram-группы Coinkite написал: «do we really want to replace the many-years-old TrezorCrypto code that has been heavily scrutinized by white hatters like Johoe and penetration tested by wallet.fail», добавив: «switch may be a talented pseudonymous coder, but their commit history sucks.» Однако критика была быстро отодвинута NVK, который назвал библиотеку Trezor «shitcoin shitshow.» Ирония в том, что открытый характер этой кодовой базы означал более глубокую проверку со стороны сообщества, чем Libngu, вероятно, когда-либо получил бы даже спустя годы.
Switch и Peter Gray, он же Doc-Hex
Переключение криптографических библиотек, приведшее к ошибке, внес Doc-Hex, CTO Coinkite, Peter D. Gray. Он заменил криптобиблиотеку Trezor под GPLv3 на Libngu — малоизвестную кодовую базу, созданную псевдонимом «Switch», у которого до появления Libngu не было заметной предшествующей истории.
Аккаунт Switch впервые появился в X 3 августа 2019 года со ссылкой на DEFCON — международную конференцию хакеров, которую обычно посещают инженеры по кибербезопасности. 16 октября 2020 года Switch поблагодарил Doc-Hex в X за вливание его кода: «Thanks for merge @DocHex … I’m making yet another bitcoin library. Could be useful on @COLDCARDwallet someday.» Спустя несколько дней Switch опубликовал ссылку на Libngu, отметив, что создал «useful thing.»
Однако, согласно исследованию участника Bitcoin Core James O’Beirne, Switch и Peter D. Gray, похоже, подписывали коммиты одними и теми же GPG-ключами. O’Beirne показал с помощью GPG-подписей коммитов, что десятки коммитов, автором которых указан switck, были подписаны личным ключом Peter D. Gray, сооснователя и CTO Coinkite, который также работает как DocHex. Zach Herbert также утверждал, что номера телефонов, оканчивающиеся на те же две цифры, были связаны с аккаунтами DocHex и switck в X ( post ). Другие исследователи указывали на совпадающие шаблоны DNS-регистрации.
На момент написания ни Gray, ни Coinkite публично не прокомментировали выводы по GPG-подписям и не ответили на запросы о комментарии. Аккаунт Switch по-прежнему активен и, как минимум, 17 августа 2026 года вносил изменения в Libngu.
Некоторые в индустрии Bitcoin рассматривают это как косвенное свидетельство неправомерных действий. Однако сама по себе эта связь не является доказательной. Если бы Gray действительно намеревался использовать ошибку RNG для эксплуатации пользователей Coldcard, непонятно, зачем ему было бы подписывать коммиты своим личным GPG-ключом. Скрытая ошибка, дремавшая годами, тоже плохо сочетается с использованием временного псевдонима в легко отслеживаемой форме. Псевдонимы широко распространены в кругах разработчиков Bitcoin; самый известный пример — Satoshi. Сама по себе связь Gray-Switch, по-видимому, не закрывает вопрос о поиске хакера Coldcard.
Участники MicroPython
Несколько других разработчиков open source также были недавно идентифицированы как лица, так или иначе затронувшие код, сыгравший роль в ошибке RNG Coldcard.
Аналитик данных LaurentMT изучил часть пути RNG на стороне MicroPython. MicroPython — это компактная open-source-реализация Python 3, предназначенная для микроконтроллеров и других устройств с ограниченными ресурсами. Из-за этой ошибки прошивка Coldcard в итоге вызывала резервный псевдослучайный генератор Yasmarang в MicroPython, что и привело к генерации с низкой энтропией.
Работа над логикой PRNG в MicroPython началась 20 августа 2020 года, когда на GitHub была открыта issue #6347 пользователем под именем «mirko». Он пожаловался, что его оборудование ESP32 всегда возвращает один и тот же результат при определенном вызове random.choice(), тогда как ожидались случайные результаты. В issue в течение следующих месяцев велось обсуждение правильной логики и ожидаемого поведения, которое, как показал Mirko, было контринтуитивным.
Laurent указывает, что «robert-hh initialized a [Pull Request] implementing the PRNG seeding change» 22 августа 2020 года. Позднее, 29 октября 2020 года, dpgeorge, сопровождающий MicroPython, слил в master-репозиторий слегка измененную версию этого pull request, реализовав «the (UID+SysTick+RTC) to address some limitations in robert-hh’s solution.» Таким образом, соответствующий код RNG уже находился в master-репозитории MicroPython, когда Coldcard форкнул его для использования в Libngu, но еще до официального релиза новой версии библиотеки MicroPython. Как правило, строить на основе master-ветки репозитория рискованно, поскольку код может продолжать меняться, в отличие от официального стабильного релиза. Следующий релиз MicroPython вышел только 3 февраля 2021 года, версия v1.14. И даже тогда изменение логики RNG было лишь кратко упомянуто в анонсе релиза: «the urandom module will randomize its seed on import on stm32, esp8266, esp32 and rp2 ports.»
В интервью Bitcoin Magazine Laurent однозначно заявил, что «without this modification the bug in Coldcard code would have been immediately detected.» Комментируя цепочку событий, приведшую к ошибке, он также сказал, что «there are a lot of ‘coincidences’ in this timeline,» добавив, что «while they don’t prove anything, I don’t see how an official investigation may completely ignore them.»
Важно отметить, что нет доказательств того, что кто-либо из упомянутых выше разработчиков намеренно пытался внедрить ошибку RNG Coldcard с помощью этих изменений, и в конечном счете ответственность за внедрение критического кода несет Coinkite — компания, производящая аппаратные кошельки. MicroPython — крупный и широко используемый open-source-проект. Тем не менее, из этой последовательности событий, пожалуй, можно извлечь множество уроков — по крайней мере пока что это трагикомедия ошибок.
Почему версия о внутренней атаке выглядит маловероятной
Несколько факторов говорят против преднамеренной, давно спланированной внутренней retirement attack. Идентичность «switck» была плохо сегментирована; общий GPG-ключ и другие совпадения сделали атрибуцию Doc-Hex, то есть Peter Gray, относительно простой, как только исследователи начали проверять. Аккаунт также был в значительной степени заброшен на годы. Между тем, участники MicroPython работали открыто над проектом с высокой видимостью.
Расследование Hodlonaut на Citadel21 и другие технические обзоры не нашли явных доказательств того, что отказ энтропии был преднамеренным. В техническом отчете инженера Alekos Filini прямо сказано: «My goal is to purely present facts and NOT make any conclusions.» Технический autopsy от Wizardsardine описывает несколько не сработавших защит и указывает, что сбой находился «across a submodule boundary, which is precisely where reviewers stop looking.» Глубокий технический разбор Steven Geller не делал сильных заявлений в ту или иную сторону. Воссоздание бага в виде proof-of-concept от DK27ss описывает проблему как «a chain of four flaws, each harmless in appearance.»
Если бы вывод средств был классической внутренней retirement attack или долгой аферой, сегодняшняя дискуссия выглядела бы иначе. Последним крупным long-con-взломом в индустрии Bitcoin, вероятно, был QuadrigaCX — канадская централизованная биржа, основателя которой, Gerald Cotten, в 2018 году объявили «dead in India» при загадочных обстоятельствах вскоре после того, как пропажа средств стала известна. Ontario Securities Commission обвиняла основателей в присвоении депозитов пользователей биржи на сумму почти 170 млн CAD на протяжении многих лет перед исчезновением.
В отличие от этого, руководство Coinkite остается публично активным, реагируя на инцидент, выпуская патченные прошивки, помогая пользователям с миграцией и обсуждая технические детали. Основатели и операторы Coinkite по-прежнему управляют компанией на момент написания и не исчезли одновременно с пропажей средств.
Тем временем средства Wave 1 — более 1 000 BTC — по-прежнему сосредоточены на трех адресах, за которыми наблюдают сотни инженеров и, вероятно, правоохранительные органы, включая FBI. Если бы Coinkite действительно проводил retirement attack в стиле «5D chess», он действовал бы гораздо осторожнее с украденными монетами. Он не стал бы сводить их на несколько легко отслеживаемых адресов, а его основатели, вероятно, не оказались бы в положении, когда они могут обсуждать этот инцидент.
Сейчас дальнейшее развитие истории определяется несколькими открытыми вопросами: уйдут ли монеты Wave 1 с трех отслеживаемых адресов; публично ли Gray или Coinkite прокомментируют выводы по GPG-подписям, чего они на момент написания не сделали; и успеют ли владельцы по-прежнему уязвимых seed-фраз, созданных между 2021 годом и патчем июля 2026 года, перевести свои средства до того, как до них доберутся охотники за поздними волнами.
Окончательных выводов пока нет, и расследования, вероятно, продолжатся еще годы. Пока что совокупность признаков указывает на культурный провал в сообществе Bitcoin-maximalist и self-custody, на недостаток широкого обучения хорошей гигиене open source и, задним числом, на излишнюю самоуверенность раннего руководства Coinkite.
Эта статья впервые появилась в Bitcoin Magazine и написана Juan Galt.