В свете катастрофического бага низкой энтропии в аппаратных кошельках Coldcard, связанного с публично зафиксированными кражами, начавшимися 30 июля, держатели биткоина начали пересматривать допущения о доверии в своих настройках аппаратных кошельков.
Как работал изъян в энтропии Coldcard
Устройства Coldcard были оснащены, казалось бы, исправными «истинными генераторами случайных чисел» STM32 (TRNG), которые полагаются на физические процессы для создания непредсказуемой seed-фразы.
Однако после того, как создатель Coldcard NVK решил инициировать переписывание прошивки, чтобы перейти с модели свободного ПО под лицензией GPL на модель только для чтения, похоже, была внесена серьёзная уязвимость.
Начиная с версии прошивки 4.0.1, выпущенной в марте 2021 года, устройство использовало PRNG Yasmarang из MicroPython вместо корректного использования аппаратного генератора случайных чисел STM32.
Генерация случайных чисел — нерешаемая проблема в информатике, поэтому создание безопасных, непредсказуемых приватных ключей всегда в определённой степени должно опираться на внешние физические процессы.
Использование PRNG Yasmarang широко характеризовалось аналитиками в отрасли как заранее запрограммированный запасной вариант. Однако Coinkite теперь оспорила такую характеристику в недавнем посте в X:
Предположение о том, что Coldcard были запрограммированы по умолчанию использовать очевидно небезопасный метод генерации seed, также вызвало на X спекуляции о том, не была ли это намеренно размещённая закладка.
Исследующий журналист Bitcoin Hodlnaut предположил, что баг возник из-за небрежных практик разработки и попыток скрыть ошибки с помощью случайных изменений.
Coinkite оценила, что устройства Mk2 и Mk3 генерировали seed с 40 битами энтропии, тогда как Mk4, Mk5 и Q достигали примерно 70 бит. И то и другое значительно меньше 128 бит, необходимых для безопасной 12-словной seed-фразы.
С тех пор атакующие успешно подбирают приватные ключи методом перебора, крадя BTC на сумму более $100 миллионов. Насколько вероятно, что кошелёк будет найден, зависит от того, была ли добавлена дополнительная энтропия от костей или использовались BIP-39 passphrase и нестандартный путь.
Связано: Хакеры Coldcard переводят 64 BTC и 200 ETH в криптовалютные миксеры
С тех пор Джеймс ОБирн создал сайт с адресами-ловушками под названием cktripwire, чтобы оценить, какие типы кошельков атакующие действительно вычищают.
Ловушки, отслеживаемые cktripwire. Источник: cktripwire.com
Как физическая энтропия спасла некоторые кошельки
Эксплойт Coldcard снова болезненно напомнил об одном из ключевых принципов сообщества: не доверяй, проверяй.
Те пользователи, которые не полагались на непрозрачный инженерный компонент для генерации энтропии в самой критичной с точки зрения безопасности части процесса, а использовали достаточное число бросков костей, спасли свои монеты от эксплойта.
Бросать кости — это простой, наглядно прозрачный процесс, который обычный пользователь может сам проверить и интуитивно понять. Проверка TRNG, напротив, потребовала бы детального физического осмотра электроники и изучения прошивки.
Хотя некоторые использовали недавние события как предлог, чтобы объявить конец самостоятельного хранения, следование этой лучшей практике оставляет очень мало возможностей для удалённого атакующего.
Если seedphrase генерируется за счёт физической энтропии без опоры на безопасность аппаратного кошелька, устраняется единственная настоящая единая точка отказа при создании кошелька.
xpub и адреса получения, полученные из seed, можно сверить, импортировав его на другие устройства.
Эксфильтрацию nonce через airgap тоже можно обнаружить, проверив, генерируют ли два устройства одну и ту же RFC 6979-совместимую подпись при получении идентичной неподписанной транзакции.
Безопасная генерация энтропии, таким образом, является абсолютным предварительным условием для безопасного кошелька. Различные методы и предложения по её созданию циркулируют на X с тех пор, как эксплойт Coldcard стал публичным.
Наиболее популярный метод — проверить способность устройства правильно преобразовывать грани костей в seedphrase BIP-39, применяя хеш SHA-265. Использование более 100 бросков костей затем достаточно для создания энтропии для 24-словного seed.
Простые бумажные методы, такие как таблица опубликованная Bitbox, делят пространство слов seed BIP-39 так, что комбинации из шести бросков костей и броска монеты можно напрямую назначить seed-слово без использования электроники.
Более сложные шаблоны, такие как лист de-biasing для костей codex32 , используют экстрактор Ван Неймана, который можно вычислить вручную, чтобы создать безопасную seed-фразу даже при смещённых костях.
Альтернативой бросанию костей является распечатать слова seed BIP-39, разрезать их на одинаковые небольшие кусочки бумаги, тщательно перемешать их, а затем вытянуть случайные 24 слова. Такие продукты, как Seedsticks или Entropia, делают это удобнее и надёжнее.
Специализированное оборудование, такое как Frostsnap, пытается проверяемо распределять генерацию энтропии между устройствами.
Некоторые пользователи стали проектировать собственные физические устройства для энтропии, которые могут генерировать seedphrase почти так же быстро, как электронное оборудование.

