Четыре строки кода.
Более 1596 BTC украдено.
В марте 2021 года одна из сборок прошивки COLDCARD перестала запрашивать случайные числа у аппаратного чипа и вместо этого поручила их генерацию обычному программному обеспечению. Никто не замечал этого пять лет. В июле 2026 года злоумышленники произвели расчеты и начали опустошать кошельки.
Проверка безопасности, которая была и ничего не делала
Вся защита держится на одном числе, которое невозможно угадать
Аппаратный кошелек выполняет несколько задач. Он показывает, что именно вы подписываете на самом деле, избавляя от необходимости доверять экрану зараженного компьютера, и хранит ваш ключ внутри чипа, защищенного от вскрытия. Каждая из этих систем защиты исходит из того, что число, из которого получен ваш ключ, невозможно угадать. Если это возможно, злоумышленнику вообще не нужно преодолевать защиту. Пул, из которого выбирается фраза из 24 слов, содержит примерно по одному числу на каждые тысячу атомов в наблюдаемой вселенной. Пул такого размера невозможно перебрать. В этом и заключается вся модель безопасности.
12 слов несут 128 бит энтропии, 24 слова — 256 бит, дополненные контрольной суммой SHA-256 от этой энтропии. Стандарт BIP-39 преобразует результат в мастер-ключ BIP-32.
12 слов несут 128 бит энтропии, 24 слова — 256 бит, дополненные контрольной суммой SHA-256 от этой энтропии. Стандарт BIP-39 преобразует результат в мастер-ключ BIP-32.
COLDCARD перестала использовать этот диапазон
В обновлении прошивки 2021 года кошелек незаметно перестал запрашивать случайное число у выделенного чипа генерации случайных чисел, переложив эту задачу на обычный программный код. Наглядно суть инцидента сводится к следующему:
Это безопасность, сокращенная не на две трети. Каждый бит удваивает объем работы, поэтому 88 недостающих битов уменьшают задачу в 2⁸⁸ раз. Триллион — большое число для человека и маленькое для того, кто арендует высокопроизводительные машины для перебора.
Генерация сид-фразы была перенесена с ckcc.rng_bytes() на ngu.random.bytes(). Компания Coinkite оценивает оставшееся пространство поиска примерно в 40 битов на Mk3 и примерно в 72 бита на Mk4/Mk5/Q при целевом показателе в 128 битов. Независимый анализ, проведенный Block, приходит к аналогичным порядкам значений (менее 2⁴⁰·⁷ и менее 2⁷३·³) и выявляет более узкие условия, при которых остается еще меньше вариантов.2
Генерация сид-фразы была перенесена с ckcc.rng_bytes() на ngu.random.bytes(). Компания Coinkite оценивает оставшееся пространство поиска примерно в 40 битов на Mk3 и примерно в 72 бита на Mk4/Mk5/Q при целевом показателе в 128 битов. Независимый анализ, проведенный Block, приходит к аналогичным порядкам значений (менее 2⁴⁰·⁷ и менее 2⁷३·³) и выявляет более узкие условия, при которых остается еще меньше вариантов.2
Программный код не способен генерировать случайность
Подумайте о том, что делает подброску монеты непредсказуемой. Сила броска, гравитация, сквозняк от кондиционера, слабые подземные толчки. Десятки факторов, которые вы можете назвать, и десятки тех, которые не можете. Никто не может рассчитать траекторию, поэтому никто не может назвать результат. Программное обеспечение работает иначе. Оно запускает фиксированную формулу для горстки начальных значений и выдает фиксированный ответ. Здесь этими значениями были серийный номер чипа и время работы устройства после включения. Злоумышленник, узнавший рецепт и ингредиенты, заново вычисляет результат, а не угадывает его.
При отключенном аппаратном генераторе случайных чисел функция rng_get() была привязана к программному генератору Yasmarang PRNG из MicroPython, который инициализировался из незащищенных состояний (UID, SysTick, RTC) и после этого не собирал новую энтропию, что позволяет выполнять перебор вариантов в автономном режиме. Coinkite не считает сид-фразы, смешанные с 50 или более честными и закрытыми бросками, уязвимыми только в силу этой проблемы: 50 × log₂6 ≈ 129 бит.3
При отключенном аппаратном генераторе случайных чисел функция rng_get() была привязана к программному генератору Yasmarang PRNG из MicroPython, который инициализировался из незащищенных состояний (UID, SysTick, RTC) и после этого не собирал новую энтропию, что позволяет выполнять перебор вариантов в автономном режиме. Coinkite не считает сид-фразы, смешанные с 50 или более честными и закрытыми бросками, уязвимыми только в силу этой проблемы: 50 × log₂6 ≈ 129 бит.3
А проверка, призванная это остановить, задала неверный вопрос
В сборке была проверка, написанная специально для того, чтобы предотвратить выпуск прошивки без аппаратного генератора. Она проверяла существование настройки, а не то, включена ли она. Настройка существовала, и она была выключена. Проверка промолчала, сборка не сообщила об ошибках, и прошивка ушла в релиз.
Директива #ifndef проверяет только факт определения макроса. В конфигурации платы MICROPY_HW_ENABLE_RNG была задана со значением 0 — то есть была объявлена и отключена, поэтому ошибка #error никогда не срабатывала, а компоновщик привязал rng_get() к программному резервному варианту.3
Директива #ifndef проверяет только факт определения макроса. В конфигурации платы MICROPY_HW_ENABLE_RNG была задана со значением 0 — то есть была объявлена и отключена, поэтому ошибка #error никогда не срабатывала, а компоновщик привязал rng_get() к программному резервному варианту.3
Фрагмент дефектного кода из исходных материалов.3
В течение пяти лет все выглядело абсолютно нормально
Слабая фраза восстановления выглядит точно так же, как сильная. Двадцать четыре обычных слова, правильная контрольная сумма, устройство ведет себя нормально. Никаких предупреждений на экране и никаких ошибок при сборке. Исходный код все это время был публичным. Чтобы заметить проблему, кому-то все равно требовалось открыть тот конкретный файл.
Слабый PRNG успешно проходит стандартные тесты на длину вывода, отсутствие нулевых значений и отсутствие повторов, поэтому поверхностные тесты не смогли бы его выявить.
Слабый PRNG успешно проходит стандартные тесты на длину вывода, отсутствие нулевых значений и отсутствие повторов, поэтому поверхностные тесты не смогли бы его выявить.
А затем кто-то произвел расчеты
Злоумышленники не прикасались ни к одному устройству. Они сгенерировали вероятные фразы на собственном оборудовании, вычислили соответствующие им биткоин-адреса и проверили эти адреса по публичному блокчейну. Все адреса с положительным балансом были опустошены. Кошелек, лежавший без дела в ящике стола с 2022 года, оказался ровно так же уязвим, как и устройство ежедневного использования.
Кандидаты выводятся в автономном режиме по стандартам BIP-39/BIP-32; сеть затрагивает только финальная проверка баланса, поэтому со стороны жертвы не поступает никаких предварительных сигналов.3
Кандидаты выводятся в автономном режиме по стандартам BIP-39/BIP-32; сеть затрагивает только финальная проверка баланса, поэтому со стороны жертвы не поступает никаких предварительных сигналов.3
Эта страница — не повод для триумфа.
Команда Coinkite раскрыла уязвимость, опубликовала технический отчет и выпустила исправление. Сторонние исследователи смогли восстановить ход событий, потому что COLDCARD имеет открытый исходный код.
Одно предостережение относительно оценок: они описывают объем работы по подбору, с которым сталкивается злоумышленник при текущих предположениях, а не данные секундомера. Никто не может сказать, сколько времени потребуется на взлом какого-то конкретного кошелька.2
Прочтите это в первую очередь
Необходимые действия зависят от того, какое устройство вы использовали при первичном создании фразы восстановления, а не от того, чем вы владеете сегодня.
Исходите из того, что это происходит прямо сейчас. Фразы стали угадываемыми в 2021 году, а метод теперь стал публичным, поэтому любой может запустить такой поиск. Не существует патча, способного устранить проблему извне, и у злоумышленников нет причин останавливаться. Если вы в зоне риска, единственное безопасное предположение заключается в том, что между вами и грабителями осталось совсем немного времени.
Mk2 и Mk3: переведите ваши монеты прямо сейчас
Затронутый диапазон версий прошивки — с 4.0.1 по 4.1.9. Версия 4.2.0 исправляет процесс создания новых фраз, но ни одно обновление не может вернуть и добавить случайность в уже существующую фразу. Создайте новый кошелек на устройстве, которому вы доверяете, и переведите на него свои средства.1
Mk4 и Mk5: проверьте версию прошивки
Если фраза была создана на прошивке старше версии 5.6.0 (или 6.6.0X для сборок Edge), обновите устройство, создайте абсолютно новый кошелек на обновленной прошивке, а затем переведите средства. Само по себе обновление не исправляет старую фразу.1
Q: аналогично, пороговая версия — 1.5.0Q
Обновитесь до версии 1.5.0Q или новее (либо до 6.6.0QX для сборок Edge), создайте новый кошелек, запишите и проверьте резервную копию, отправьте одну небольшую тестовую транзакцию, а затем переведите остаток.1
Исправляет ли обновление прошивки COLDCARD уже созданную резервную фразу?
Как узнать, какая версия прошивки использовалась при создании моей резервной фразы COLDCARD?
Как проверить, не затронул ли этот сбой мой адрес?
Защищают ли броски костей или кодовая фраза фразу восстановления COLDCARD?
Охватывает ли официальное предупреждение Coinkite все уязвимые устройства COLDCARD?
Устройства OneKey не затронуты
Ни одна модель из тех, что мы когда-либо выпускали, не подвержена этой проблеме. В нашей прошивке нет зависимостей от libngu, Coinkite, COLDCARD или CKCC, поэтому аварийного пути кода просто не существует, и вы можете проверить это самостоятельно в наших репозиториях. На нашем текущем оборудовании ключ поступает из истинного генератора случайных чисел внутри сертифицированного защищенного элемента, а не из программного обеспечения на главном процессоре. Именно такая подмена и стала причиной этого сбоя.
Мы не стали принимать это на веру. Когда появились новости, Anzen Lab отследила работу нашей системы генерации случайных чисел от начала и до конца (откуда она берется, что ее вызывает и какие настройки сборки определяют, какая именно версия попадет на ваше устройство) и опубликовала точные файлы, которые они проверяли.12
Читать повторную проверку Anzen LabМогло ли это произойти с OneKey?
Для возникновения этого сбоя должны были одновременно совпасти три независимых фактора. В OneKey ни один из них невозможен, и вы можете самостоятельно проверить все три пункта.
Откуда же берется случайность в устройствах OneKey?
Создается внутри чипа с сертификацией EAL 6+
Ваши ключи создаются и хранятся внутри специализированного защищенного от вскрытия чипа, а не универсального процессора, который управляет всем остальным. EAL 6+ — это уровень доверия, используемый для платежных и идентификационных карт.
Случайность под собственным контролем
Этот чип генерирует случайные числа на основе реального физического шума и непрерывно тестирует собственный результат. Если случайные числа начинают вести себя некорректно, чип замечает это вместо того, чтобы молча продолжать работу.
Мы провели повторную проверку собственного кода
После новостей о COLDCARD специалисты Anzen Lab полностью проследили работу нашей собственной генерации случайных чисел (источники, прямые вызовы функции и настройки сборки, определяющие попадание кода на устройство) и опубликовали список проверенных файлов.11


Четырехуровневая проверка каждого OneKey, где ни один компонент не доверяет остальным трем
Любой из них может что-то пропустить. Суть в том, что всем четырем пришлось бы пропустить одно и то же. У COLDCARD не было такой подстраховки: было достаточно одной не проверенной настройки сборки.
Открытый код, который действительно можно проверить
Наш исходный код прошивок и приложений опубликован на GitHub, а сборки воспроизводимы. Это значит, что вы можете самостоятельно пересобрать код и убедиться, что он в точности соответствует ПО на вашем устройстве. Именно этот шаг позволяет предотвратить проблему «правильный код, но не та версия».
OneKey на GitHub
Независимый аудит с официальным подтверждением
Аудиторская компания SlowMist проверяет нас и публикует отчеты. Отдельные проверки охватывают OneKey Pro, Classic 1S и наш SDK. Наша практика безопасности сертифицирована по стандарту ISO/IEC 27001, а линейки Pro и Classic 1S прошли сертификацию на соответствие EN 18031 уполномоченным органом ЕС. Все документы опубликованы, и ничто не основано на внутренних оценках.13
Читать сводку аудита SlowMistСобственная команда тестировщиков на проникновение
Anzen Lab — это наша собственная команда безопасности, состоящая из инженеров по защите аппаратного обеспечения, прошивок и приложений, которые работают в сотрудничестве с привлеченными исследователями. Их задача — взламывать аппаратные кошельки, включая наши собственные, до того, как они поступят в продажу. Когда разразилась эта история, они заново проверили систему генерации случайных чисел OneKey от начала до конца и опубликовали точный список проверенных ими файлов.11
Читать анализ Anzen LabМы платим сторонним специалистам за поиск наших ошибок
Любой желающий может конфиденциально сообщить нам об уязвимости через нашу публичную программу на BugRap или напрямую на [email protected] и получить вознаграждение. Размер выплаты зависит от степени критичности по шкале CVSS. Главная цель — сделать сообщение нам выгоднее, чем продажа уязвимости.15
OneKey на BugRapПроверьте кошелек в своей руке
entro.tools — это бесплатный инструмент с открытым исходным кодом, который считывает реальные случайные числа, поступающие из аппаратного кошелька, и запускает для них стандартные статистические тесты работоспособности прямо в вашем браузере через USB, без загрузки данных куда-либо и без необходимости обновления прошивки.
Локально запускает тесты работоспособности FIPS 140-2, NIST SP 800-22 и SP 800-90B через WebUSB (в настольных браузерах Chrome или Edge). Устройство запрашивает экспорт энтропии — пакета только что сгенерированных случайных чисел, но никогда не запрашивает вашу фразу восстановления.16
Универсальный тест Маурера требует не менее 387 840 бит; при меньшем объёме отчёт прямо помечает его как пропущенный, а не убирает молча.16
Поддерживаемые модели кошельков для проверки
Возможность для постороннего лица прочитать исходные случайные числа устройства. Это лишь один узкий аспект. См. примечание ниже.
Вопросы, которые это вызывает у всех остальных
Затронут ли сбой генерации энтропии в COLDCARD устройства OneKey?
Каких аппаратных кошельков касается сбой генерации энтропии в COLDCARD?
Могу ли я проверить случайность генерации в своем собственном кошельке?
Как определить, можно ли доверять аппаратному кошельку?
Объяснять сложное — наша работа
Безопасность, которую можно проверить, а не та, в которую просят верить.
Открытый исходный код с возможностью воспроизведения сборки, аудит сторонними специалистами, проверки нашей собственной лаборатории и денежные вознаграждения за найденные уязвимости. Именно об этих принципах идет речь.
Источники
Источники ниже получены по состоянию на 6 августа 2026 года. Сначала идут официальное уведомление и технический отчет Coinkite, затем независимый анализ исходного кода и ончейн-расследование. Показатели ущерба продолжают пересчитываться в сторону увеличения: компания Galaxy Research подтвердила кражу 1,596 BTC на 4 августа и оценивает предполагаемый ущерб ближе к 2,055 BTC.
- 1. Coinkite · COLDCARD Mk3 Seed Generation Security Advisory
- 2. Coinkite · Technical Deep Dive into the Entropy Issue
- 3. Block Engineering · Predictable RNG Fallback and 32-Bit Reseed in COLDCARD Firmware
- 4. CoinDesk · Bitcoin cold-wallet attack spreads to 4,500 addresses as losses near $89 million
- 5. CoinDesk · Major bitcoin wallet flaw drains 594 BTC in 25-minute sweep
- 6. Crypto Briefing (Galaxy Research) · Galaxy Research identifies 1,367 BTC drained in attacks on Coldcard addresses
- 7. The Crypto Times (Galaxy Research) · Coldcard hack losses hit $100M with 1,596 BTC stolen in ongoing attack
- 8. The Crypto Times (Galaxy Research) · 15 attackers exploit ongoing Coldcard hack as losses approach $130M
- 9. The Hacker News · Coldcard Hardware Wallet Flaw Linked to $70 Million Bitcoin Theft in 41 Minutes
- 10. Bitcoin Magazine · Coinkite Releases Fixed Firmware After Coldcard Bug
- 11. OneKey Anzen Lab · The COLDCARD Entropy Failure: How a Silent RNG Fallback Cost Users $38 Million
- 12. OneKey · Statement: OneKey devices are not affected by this issue
- 13. OneKey · OneKey has passed a security audit by SlowMist — separate reports cover the Pro, the Classic 1S and the SDK
- 14. SlowMist · SlowMist Audit Report — OneKey Pro
- 15. BugRap · OneKey Bug Bounty Program
- 16. entro.tools · Entropy Check — verify your hardware wallet's randomness (device support matrix)








