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

Что произошло
Средства находились на 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 меньших инцидентов.
Источники
Один основной источник. Как мы проверяем новости


