НовостиКриптовалютыНизкоэнтропийная ошибка Coldcard заставила держателей Bitcoin пересмотреть доверие к аппаратным кошелькам

Низкоэнтропийная ошибка Coldcard заставила держателей Bitcoin пересмотреть доверие к аппаратным кошелькам

Автор: Cointelegraph·

Ключевые выводы

  • Злоумышленники похитили Bitcoin на сумму более $100 млн, воспользовавшись уязвимостью низкой энтропии в аппаратных кошельках Coldcard, которая позволяла подбирать приватные ключи.
  • Уязвимость возникла в версии прошивки 4.0.1, выпущенной в марте 2021 года, когда аппаратный генератор случайных чисел STM32 был заменён на псевдослучайный генератор MicroPython Yasmarang.
  • По оценке Coinkite, устройства Mk2 и Mk3 создавали seed-фразы примерно с 40 битами энтропии, а Mk4, Mk5 и Q — примерно с 70 битами, что значительно ниже 128 бит, необходимых для защищённой 12-словной seed-фразы.
  • Пользователи, добавлявшие дополнительную энтропию через броски костей или использовавшие BIP-39 passphrase с нестандартным путём деривации, были защищены от эксплойта.
  • Coinkite опубликовала официальное предупреждение по генерации seed для затронутых устройств, а в качестве более безопасных альтернатив продвигаются различные методы физической энтропии, включая броски костей и бумажные таблицы.
Низкоэнтропийная ошибка Coldcard заставила держателей Bitcoin пересмотреть доверие к аппаратным кошелькам

После раскрытия серьёзной уязвимости низкой энтропии в аппаратных кошельках Coldcard — связанной с публично наблюдавшимися кражами, начавшимися 30 июля, — держатели Bitcoin пересматривают предположения о доверии, лежащие в основе их схем самостоятельного хранения. Злоумышленники использовали этот недостаток для подбора приватных ключей, что привело к хищению BTC на сумму более $100 млн.

Coldcard, выпускаемый Coinkite, долгое время считался одним из самых ориентированных на безопасность аппаратных кошельков в экосистеме Bitcoin и продвигался прежде всего за счёт air-gapped-дизайна и поддержки таких продвинутых функций, как multisig и рабочие процессы PSBT. Подрыв этого позиционирования усилил внимание к тому, как производители аппаратных кошельков реализуют и поддерживают свои наиболее критичные для безопасности участки кода.

Как работала уязвимость энтропии Coldcard

Устройства Coldcard были оснащены STM32 «истинными генераторами случайных чисел» (TRNG), рассчитанными на использование физических процессов для создания непредсказуемых seed-фраз. Однако, по всей видимости, критическая уязвимость была внесена после того, как создатель Coldcard NVK инициировал переписывание прошивки, чтобы перевести проект с модели свободного ПО под лицензией GPL на модель только для чтения.

Начиная с версии прошивки 4.0.1, выпущенной в марте 2021 года, устройства использовали псевдослучайный генератор MicroPython Yasmarang (PRNG) вместо корректного использования аппаратного генератора STM32. Это отклонение фактически обходило аппаратный источник энтропии. Генерация случайных чисел остаётся фундаментально сложной проблемой в информатике, поэтому создание защищённых, непредсказуемых приватных ключей всегда должно хотя бы частично опираться на внешние физические процессы. Отход от лицензирования GPL также снизил возможность независимых разработчиков отслеживать изменения прошивки в реальном времени — напряжение, которое сообщество открытого аппаратного кошелька давно отмечает как системный риск.

Аналитики широко характеризовали использование Yasmarang как заранее запрограммированный резервный вариант. Coinkite, производитель Coldcard, оспорила такую трактовку в недавнем посте X.

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

По собственным оценкам Coinkite, устройства Mk2 и Mk3 генерировали seed-фразы лишь примерно с 40 битами энтропии, тогда как Mk4, Mk5 и Q достигали около 70 бит. Оба показателя значительно ниже 128 бит, необходимых для защищённой 12-словной seed-фразы.

Связано: Хакеры Coldcard перевели 64 BTC и 200 ETH в криптовалютные миксеры

Вероятность компрометации конкретного кошелька зависела от того, добавлял ли пользователь дополнительную энтропию через броски костей или использовал BIP-39 passphrase в сочетании с нестандартным путём деривации.

Затем James O'Beirne запустил cktripwire, сайт с honeypot-адресами, предназначенный для определения того, какие конфигурации кошельков злоумышленники фактически вычищают.

Coinkite также опубликовала официальное предупреждение по генерации seed для затронутых устройств.

Как физическая энтропия защитила некоторые кошельки

Эксплойт Coldcard ещё раз наглядно подтвердил один из основополагающих принципов сообщества Bitcoin: не доверяй, проверяй.

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

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

Расширенный публичный ключ (xpub) и адреса получения, полученные из seed, можно перепроверить, импортировав seed в несколько независимых устройств. Выведение nonce через airgap также можно обнаружить, подтвердив, что два устройства создают идентичные подписи, соответствующие RFC 6979, при обработке одной и той же неподписанной транзакции.

Таким образом, надёжная генерация энтропии — абсолютное предварительное условие для безопасного кошелька. После того как эксплойт Coldcard стал публичным, на X широко распространялись различные методы и предложения по надёжной генерации энтропии.

Наиболее популярный подход предполагает проверку способности устройства корректно преобразовывать грани костей в BIP-39 seed-фразу с помощью хэша SHA-256. Использование более 100 бросков костей обеспечивает достаточную энтропию для 24-словного seed.

Более простые бумажные методы, такие как таблица, опубликованная Bitbox, разбивают множество слов BIP-39 так, чтобы комбинация из шести бросков костей и подбрасывания монеты могла напрямую сопоставляться с seed-словом без использования электроники.

Более продвинутые инструменты, такие как рабочий лист codex32 для де-байасинга бросков костей, используют экстрактор фон Неймана — процедуру, полностью вычислимую вручную, — для создания защищённой seed-фразы даже при смещённых костях.

Альтернатива броскам костей заключается в том, чтобы распечатать полный список слов BIP-39, разрезать слова на одинаковые бумажные фрагменты, тщательно перемешать их и затем случайным образом выбрать 24 слова. Такие продукты, как Seedsticks или Entropia, делают этот метод более удобным и надёжным.

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

Magazine: Означают ли атаки на Coldcard, что все аппаратные кошельки теперь небезопасны?