Уязвимость энтропии в 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 как временную меру и планируйте миграцию на не затронутое устройство.