Криптовалюты

Уязвимость Coldcard связали с ошибкой генерации ключей и слабой энтропией

Galaxy Research отследила кражу более 1 596 BTC с Coldcard-кошельков, а Coinkite объяснила проблему переходом генерации seed-фраз на программный PRNG Yasmarang

Один основной источник · Как мы проверяем новости

Уязвимость Coldcard связали с ошибкой генерации ключей и слабой энтропией
Иллюстрация к материалу RedBTC News

Что произошло

Средства находились на Coldcard — аппаратных кошельках канадского производителя Coinkite, которые не подключаются к интернету. В описанном инциденте не фигурируют фишинговые ссылки, вредоносное ПО или украденные ноутбуки: атакующие, согласно исходным данным, вычислили приватные ключи.

Galaxy Research отследила более 1 596 BTC, украденных в трех подтвержденных волнах. Также упоминается предполагаемая четвертая волна, которая могла бы поднять общий объем примерно до 2 055 BTC, или около $130 млн по текущим ценам. Один вывод средств переместил $70 млн за 41 минуту.

В чем была ошибка

Coinkite опубликовала техническое объяснение 1 августа. Компания описала проблему как ситуацию, при которой кошелек на протяжении восьми лет использовал предсказуемую случайность без обнаружения ошибки.

В 2021 году Coinkite перенесла криптографию Coldcard на libsecp256k1 — ту же библиотеку, которую использует Bitcoin Core. Сбой возник на этапе интеграции: генерация seed была незаметно перенаправлена с собственного аппаратного генератора случайных чисел Coldcard на программный fallback MicroPython — алгоритм Yasmarang, предназначенный для устройств без чипа случайности.

Почему это стало возможным

Причиной стала проверка сборки через #ifndef: она определяла, существует ли настройка, а не включена ли она. Coinkite задала эту настройку как ноль, то есть «выключено», но поскольку ноль все равно считается определенным значением, проверка прошла и сборка завершилась.

Дополнительно проблему не выдала структура кода: обе версии функции имели одинаковые сигнатуры. Coinkite также написала, что основная часть случайности на COLDCARD поступала от PRNG, о наличии которого в исходном коде компания не знала. PRNG — это псевдослучайный генератор, который выдает числа по фиксированному рецепту от стартового значения; если подать тот же старт, результат повторится.

Какие устройства затронуты

На устройствах Mk2 и Mk3 с прошивками от 4.0.1 до 4.1.9 стартовое значение формировалось из серийного номера чипа и его часов. Coinkite оценила итоговое пространство поиска примерно в 40 бит.

В более новых моделях к процессу добавлялась часть энтропии из secure element, что, по оценке Coinkite, увеличивало пространство примерно до 72 бит.

Почему это важно

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

Согласно отдельной оценке из исходных данных, с высокой уверенностью похищены 1 596 BTC примерно с 7300 адресов в трех подтвержденных волнах, а также зафиксированы еще 14 меньших инцидентов.

Источники

Один основной источник. Как мы проверяем новости

  1. decrypt.co