💀 Not your keys - not your crypto! А если ключи твои, но...
Главную заповедь самокастоди — «твои ключи, твоя крипта» — на днях сломал не хакер и не биржа.
30 июля с примерно 500 холодных кошельков Coldcard за 15–25 минут увели 594 BTC — около $38 млн.
Ключи всё это время лежали только у владельцев. Подвело само железо.
🔖 Сначала матчасть (пропускайте, кому скучно)
Ключи в таком кошельке получаются из сид-фразы — набора из 12–24 слов, который устройство само генерирует из случайных чисел при первой настройке.
И вот тут вся соль: если «случайные» числа на самом деле предсказуемы — сид можно перебрать на своём компьютере, вообще не притрагиваясь к чужому кошельку.
Именно это и произошло.
🖥 Как это возможно
У кошельков Coldcard Mk3 на прошивках с марта 2021-го по 5.0.3 генератор случайных чисел работал не так, как заявлено.
Внутри устройства есть отдельный аппаратный чип — «настоящий» источник случайности. Но из-за ошибки в сборке кошелёк этот чип тихо игнорировал и брал числа у простого предсказуемого алгоритма. А тот считал их из данных, которые вовсе не секретны и легко предсказуемы, — серийного номера чипа и показаний встроенных часов.
Стойкость ключа измеряют в битах — по сути, это про то, сколько вариантов нужно перебрать, чтобы его подобрать. Чем битов больше, тем дольше и дороже подбор; надёжным считается порог от 128 бит — столько не осилить и за миллиарды лет.
Официально запас стойкости у Coldcard оценивали в ~72 бита — это уже мало. А по факту, как разобрали инженеры Block (компания Джека Дорси), реальная случайность просела ещё ниже — до уровня, который обычный компьютер перебирает офлайн за разумное время: дни-недели, а не века. Иначе 500 сидов никто бы не восстановил.
Самая дорогая опечатка, что я видел в крипте.
❗️ Кого задело и что спасло
Под удар попали только кошельки с одним ключом — обычная одиночная подпись, без доп. защиты. Многие адреса не двигались с 2021 года; средний баланс жертвы — около 0,41 BTC (~$26 тыс.), у самого крупного увели почти 30 BTC.
Уцелели те, кто включил «параноидальные» фичи, до которых у большинства не доходят руки:
➡️ passphrase — дополнительное 25-е слово-пароль поверх сида;
➡️ мультиподпись, где для перевода нужно несколько ключей;
➡️ сид, собранный вручную бросками кубика.
Два неприятных нюанса:
⭐️ обновление прошивки уже созданный сид не лечит — нужно переезжать на новый, сгенерированный на исправном устройстве;
⭐️ новые модели (Mk4, Q, Mk5) — не «чистые»: Coinkite признала, что та же ошибка задела и их, просто в меньшем масштабе.
👁 Мы это уже видели
Слабый генератор случайности — не экзотика, а повторяющийся фейл.
В 2023-м так же вычистили кошельки в истории Milk Sad: инструмент создавал ключи, взяв за источник случайности всего-навсего показания системных часов. Возможных вариантов оставались считанные миллиарды — их полностью перебрали, и спящие адреса опустошили офлайн.
Годом ранее — Randstorm, где под угрозой оказались миллионы кошельков, созданных в 2011–2015 годах.
Каждые пару лет — один и тот же паттерн: «холодный» и «аппаратный» ещё не означает «со стойкой случайностью».
• • • • • • • • • •
Самокастоди — это не «я забрал ключи у биржи и спокоен». Это ещё и «я не доверяю слепо железу, которое эти ключи создаёт».
Coldcard годами был иконой паранойи — и спаслись ровно те, кто был параноиком до конца: с passphrase, мультиподписью и кубиком. Остальные узнали, что доверенное устройство — тоже часть поверхности атаки.
❝[Консенсус Тьюринга]❞ | 💬 Чат | 🔄 Проверенная обменка
Главную заповедь самокастоди — «твои ключи, твоя крипта» — на днях сломал не хакер и не биржа.
30 июля с примерно 500 холодных кошельков Coldcard за 15–25 минут увели 594 BTC — около $38 млн.
Ключи всё это время лежали только у владельцев. Подвело само железо.
🔖 Сначала матчасть (пропускайте, кому скучно)
Холодный кошелёк — отдельное устройство, которое хранит ключи офлайн и не выходит в интернет. Считается эталоном безопасности: украсть с него монеты «в лоб» нельзя.
Ключи в таком кошельке получаются из сид-фразы — набора из 12–24 слов, который устройство само генерирует из случайных чисел при первой настройке.
И вот тут вся соль: если «случайные» числа на самом деле предсказуемы — сид можно перебрать на своём компьютере, вообще не притрагиваясь к чужому кошельку.
Именно это и произошло.
🖥 Как это возможно
У кошельков Coldcard Mk3 на прошивках с марта 2021-го по 5.0.3 генератор случайных чисел работал не так, как заявлено.
Внутри устройства есть отдельный аппаратный чип — «настоящий» источник случайности. Но из-за ошибки в сборке кошелёк этот чип тихо игнорировал и брал числа у простого предсказуемого алгоритма. А тот считал их из данных, которые вовсе не секретны и легко предсказуемы, — серийного номера чипа и показаний встроенных часов.
Стойкость ключа измеряют в битах — по сути, это про то, сколько вариантов нужно перебрать, чтобы его подобрать. Чем битов больше, тем дольше и дороже подбор; надёжным считается порог от 128 бит — столько не осилить и за миллиарды лет.
Официально запас стойкости у Coldcard оценивали в ~72 бита — это уже мало. А по факту, как разобрали инженеры Block (компания Джека Дорси), реальная случайность просела ещё ниже — до уровня, который обычный компьютер перебирает офлайн за разумное время: дни-недели, а не века. Иначе 500 сидов никто бы не восстановил.
А корень всего — одна строчка кода. Программа проверяла, что настройка аппаратного чипа в принципе есть, но не проверяла, что он реально включён. Настройка на месте, чип выключен — и кошелёк спокойно работал на слабом генераторе.
Самая дорогая опечатка, что я видел в крипте.
❗️ Кого задело и что спасло
Под удар попали только кошельки с одним ключом — обычная одиночная подпись, без доп. защиты. Многие адреса не двигались с 2021 года; средний баланс жертвы — около 0,41 BTC (~$26 тыс.), у самого крупного увели почти 30 BTC.
Уцелели те, кто включил «параноидальные» фичи, до которых у большинства не доходят руки:
➡️ passphrase — дополнительное 25-е слово-пароль поверх сида;
➡️ мультиподпись, где для перевода нужно несколько ключей;
➡️ сид, собранный вручную бросками кубика.
Два неприятных нюанса:
⭐️ обновление прошивки уже созданный сид не лечит — нужно переезжать на новый, сгенерированный на исправном устройстве;
⭐️ новые модели (Mk4, Q, Mk5) — не «чистые»: Coinkite признала, что та же ошибка задела и их, просто в меньшем масштабе.
👁 Мы это уже видели
Слабый генератор случайности — не экзотика, а повторяющийся фейл.
В 2023-м так же вычистили кошельки в истории Milk Sad: инструмент создавал ключи, взяв за источник случайности всего-навсего показания системных часов. Возможных вариантов оставались считанные миллиарды — их полностью перебрали, и спящие адреса опустошили офлайн.
Годом ранее — Randstorm, где под угрозой оказались миллионы кошельков, созданных в 2011–2015 годах.
Каждые пару лет — один и тот же паттерн: «холодный» и «аппаратный» ещё не означает «со стойкой случайностью».
• • • • • • • • • •
Самокастоди — это не «я забрал ключи у биржи и спокоен». Это ещё и «я не доверяю слепо железу, которое эти ключи создаёт».
Coldcard годами был иконой паранойи — и спаслись ровно те, кто был параноиком до конца: с passphrase, мультиподписью и кубиком. Остальные узнали, что доверенное устройство — тоже часть поверхности атаки.
❝[Консенсус Тьюринга]❞ | 💬 Чат | 🔄 Проверенная обменка