Уязвимость энтропии в Coldcard могла привести к краже биткоинов на $38 млн
СРОЧНОЕ ПРЕДУПРЕЖДЕНИЕ ПО БЕЗОПАСНОСТИ. Если вы генерировали seed-фразу на Coldcard Mk3, Mk4, Mk5 или Q до выхода последнего hotfix-прошивочного обновления, ваши средства могут быть под угрозой. Ознакомьтесь с рекомендациями и выполните миграцию как можно быстрее.
Что произошло: вывод средств на $38 млн в сети
По данным Lookonchain, свыше $38 млн в Bitcoin (точно 594.48 BTC) были переведены примерно из 500 кошельков на адрес-консолидатор, начинающийся с bc1qnk…, в узком временном диапазоне и в пределах небольшого числа блоков.
Характеристики затронутых кошельков указывают на целевую атаку:
— Преимущественно одиночная подпись (singlesignature), без защиты multisig.
— Часть кошельков не проявляла активности годами, что больше похоже на «вынос» заранее уязвимых seed-фраз, а не на компрометацию недавно используемых адресов.
— Переводы выполнены согласованно и почти одновременно — типичный признак автоматического «свипа» по seed-фразам, которые можно перечислить или восстановить в суженном пространстве поиска.
Coinkite официально не подтверждала, что именно дефект энтропии стал причиной этого конкретного вывода. Тем не менее совпадение по времени между публикацией предупреждения и ончейн-движением, а также профиль кошельков, заставили исследователей безопасности назвать наиболее вероятным объяснением уязвимость генерации seed с низкой энтропией.
Техническая причина: что сломалось в источнике энтропии Coldcard
Источник: технический разбор Coinkite — blog.coinkite.com/entropytechnicalbackgrounder/
Согласно advisory Coinkite, цепочка ошибок привела к тому, что аппаратный генератор истинных случайных чисел (TRNG) фактически не участвовал в генерации seed на затронутых версиях прошивки. В результате процесс создания seed — криптографической основы Bitcoin-кошелька — опирался на программный псевдослучайный генератор (PRNG) MicroPython вместо ожидаемого аппаратного RNG.
Причина — конфигурация сборки и проверка препроцессора, которые не обеспечили обязательный переход на аппаратный RNG. В качестве «тихого» fallback использовался софтверный вариант без каких-либо заметных пользователю признаков.
Практический эффект для безопасности:
— Mk3: эффективная стойкость около 40 бит при целевых 128 бит.
— Mk4, Mk5, Q: около 72 бит (частичное улучшение за счет secure elements) при целевых 128 бит.
40 бит означают примерно 1 трлн возможных seed — огромно по бытовым меркам, но потенциально достижимо для хорошо оснащенного противника. 72 бита заметно лучше, но все равно существенно ниже 128-битного стандарта, при котором перебор практически невозможен в обозримой перспективе. Разница между 40/72 и 128 бит — это граница между «практически не взломать» и «теоретически перебираемо при достаточных ресурсах».
Какие устройства и прошивки подвержены риску
Источник: advisory Coinkite — blog.coinkite.com/coldcardmk3seedgenerationwarning/
Mk3 — ВЫСОКИЙ РИСК:
Seed, сгенерированные на прошивках 4.0.1 (релиз март 2021) и выше вплоть до последней поддерживаемой 5.0.3, считаются уязвимыми. Для Mk3 оценка эффективной энтропии — порядка 40 бит.
Mk4, Mk5 и Q — ПОВЫШЕННЫЙ РИСК:
Seed, сгенерированные на любой прошивке до последнего hotfix, также имеют сниженную энтропию — примерно 72 бита.
Не затронуты:
TAPSIGNER, OPENDIME и SATSCARD — у них иная кодовая база, данная уязвимость на них не распространяется.
Кому риск ниже:
— Пользователям, которые при генерации seed добавляли минимум 50 независимых приватных бросков кубиков (внешняя энтропия, которую устройство не может «уменьшить»).
— Пользователям, применяющим сильную уникальную BIP39 passphrase. Passphrase обрабатывается отдельно от внутренней энтропии устройства и повышает защиту даже при проблемах с RNG.
Что нужно сделать: пошаговая миграция
Позиция Coinkite однозначна: обновление прошивки не исправляет уже созданные seed. Недостаточная энтропия была заложена в момент генерации, и прошивка не может «добавить случайности задним числом». Единственный выход — создать новый seed и перевести средства.
Шаг 1. Считайте текущий seed потенциально скомпрометированным
Если seed был создан на уязвимой связке устройство/прошивка и при генерации не было 50+ бросков кубиков и нет сильной passphrase, исходите из того, что он может быть уязвим. Не откладывайте действия в ожидании дополнительных подтверждений.
Шаг 2. Немедленно обновите прошивку до исправленной
— Mk4 и Mk5: 5.6.0 или новее.
— Q: 1.5.0Q или новее.
— Mk3: исправления нет (см. временную меру ниже).
Шаг 3. Сгенерируйте полностью новый seed на обновленной прошивке
На обновленном устройстве создайте новый seed с нуля, не восстанавливайте старую seed-фразу. Новый seed будет сформирован с корректным участием аппаратной энтропии.
Рекомендуемые усиления:
— Добавьте минимум 50 независимых бросков кубиков при генерации.
— Используйте сильную уникальную BIP39 passphrase и храните ее отдельно от резервной копии seed.
Шаг 4. Корректно сделайте резервные копии seed и passphrase
Запишите новую seed-фразу на бумаге и храните в безопасном месте. Если используете BIP39 passphrase, держите ее отдельно от seed. Для доступа к кошельку нужны оба компонента, потеря любого приведет к утрате доступа.
Шаг 5. Проверьте кошелек
Сверьте fingerprint и подтвердите как минимум один адрес получения, чтобы убедиться, что новый кошелек настроен правильно, прежде чем отправлять на него средства.
Шаг 6. Начните с тестовой транзакции
Перед переносом всего баланса отправьте небольшую сумму со старого кошелька на новый и убедитесь, что она дошла.
Шаг 7. Переведите оставшиеся средства
Перенесите весь остаток со старого (потенциально уязвимого) кошелька на новый. После миграции не используйте старый seed.
Временная мера для Mk3:
Если Mk3 — единственное доступное устройство и нет возможности быстро перейти на Mk4/Mk5/Q, временно снизить риск можно добавлением сильной уникальной BIP39 passphrase к текущему кошельку. Это не замена полноценной миграции — запланируйте перенос на не затронутое устройство как можно скорее.
Почему энтропия важна (простыми словами)
Безопасность аппаратного кошелька определяется качеством случайности при создании seed. Seed — это мастер-ключ, из которого выводятся все ваши Bitcoin-адреса. Если случайность была недостаточной, устройство могло выбирать seed из гораздо меньшего набора, чем предполагалось.
Вместо вероятности 1 из 2^128 ваш seed мог оказаться 1 из примерно 2^40 или 2^72. Такой «сжатый» пул в принципе можно перебрать при достаточных вычислительных ресурсах. Физическая изоляция (airgap) и защита от вскрытия у Coldcard сохраняют ценность, но они не компенсируют ослабленный криптографический фундамент, если seed изначально получился с низкой энтропией.
Официальные источники
— Предупреждение Coinkite по Mk3: blog.coinkite.com/coldcardmk3seedgenerationwarning/
— Технический разбор: blog.coinkite.com/entropytechnicalbackgrounder/
Проверяйте информацию только по официальным каналам Coinkite. Не следуйте инструкциям из неофициальных источников, аккаунтов в соцсетях, выдающих себя за поддержку Coinkite, и не доверяйте третьим лицам, предлагающим помощь с «восстановлением» или миграцией.
Итог
Дефект энтропии Coldcard — серьезная и технически сложная уязвимость, которая, судя по доступным ончейн-данным, уже могла привести к краже около $38.2 млн в BTC из затронутых кошельков. Причина — ошибка прошивки, из-за которой при генерации seed незаметно использовался программный PRNG вместо аппаратного RNG. Это давало порядка 40 бит (Mk3) или 72 бита (Mk4/Mk5/Q) эффективной стойкости вместо 128 бит.
Если у вас Coldcard и seed был создан на затронутой прошивке без бросков кубиков или без сильной passphrase, риск может быть актуален прямо сейчас. План действий один: обновить прошивку, создать новый seed, перевести средства.
FAQ
Что такое уязвимость энтропии Coldcard?
Ошибка прошивки, из-за которой при генерации seed устройства использовали программный PseudoRandom Number Generator (PRNG) вместо аппаратного True RNG, формируя seed с примерно 40 битами стойкости (Mk3) или 72 битами (Mk4/Mk5/Q) вместо стандарта 128 бит.
Затронут ли мой Coldcard?
Mk3 с прошивками 4.0.1–5.0.3 — высокий риск. Mk4, Mk5 и Q на прошивках до последнего hotfix — также затронуты. TAPSIGNER, OPENDIME и SATSCARD не затронуты.
Исправит ли обновление прошивки уже существующий seed?
Нет. Обновление прошивки не исправляет уже сгенерированные seed. Нужно создать новый seed на исправленной прошивке и перевести средства на новый кошелек.
На какую прошивку обновляться?
— Mk4/Mk5: 5.6.0 или новее.
— Q: 1.5.0Q или новее.
— Mk3: исправления нет; используйте сильную BIP39 passphrase как временную меру и планируйте миграцию на не затронутое устройство.