Coinkite каже, що зловмисник використав ШІ, щоб знайти ваду, яку пропустив їхній власний ШІ-огляд, що призвело до витоку 500 гаманців через помилку генерації сидів, яка зменшила 128 біт ентропії до 40.
Підсумок
- Зловмисник вивів 594 BTC, приблизно 38 мільйонів доларів, з приблизно 500 апаратних гаманців Coldcard за 25 хвилин 31 липня, використавши ваду генерації сидів, яка існувала з березня 2021 року.
- Помилка зменшила ефективну ентропію сидів Mk3 з 128 біт до приблизно 40 біт, що зробило приватні ключі вгадуваними за допомогою обчислень грубої сили, а не криптографічної атаки.
- Coinkite, виробник Coldcard, вважає, що зловмисник використав ШІ для виявлення вади у їхньому відкритому прошивці, і каже, що їхній власний ШІ-аудит того ж коду кількома тижнями раніше нічого не знайшов.
- Кожна поточна модель Coldcard певною мірою постраждала: Mk4, Q та Mk5 мають приблизно 72 біти ентропії замість 128, і оновлення прошивки не відновлює вже створені сиди.
- Block, Trezor та Ledger підтвердили, що їхні продукти не постраждали, тоді як інцидент порушує фундаментальні питання про те, чи можна довіряти апаратним гаманцям як єдиному рівню зберігання значних біткойн-активів.
Атака тривала 25 хвилин. О 2:14 UTC 31 липня одна сутність почала змітати біткойни з апаратних гаманців Coldcard. До 2:39 594 BTC перемістилися з приблизно 500 гаманців на адресу консолідації. Кошти, вартістю приблизно 38 мільйонів доларів на момент змітання, не були вкрадені через фішинг, шкідливе програмне забезпечення або фізичний доступ до пристроїв. Вони були вкрадені, тому що пристрої генерували передбачувані приватні ключі.
Coinkite, компанія з Торонто, яка виробляє Coldcard, опублікувала попередження та технічний звіт 30 липня після виявлення вади. Компанія заявила, що помилка збірки у прошивці призвела до того, що генерація сидів брала випадковість із програмного резерву, а не з апаратного генератора випадкових чисел, який пристрій мав використовувати. Помилка існувала з версії прошивки 4.0.1, випущеної в березні 2021 року. Кожен сид, згенерований на ураженому Coldcard протягом останніх п'яти років, був слабшим, ніж вважав його власник.
Наслідки виходять за межі безпосередньої фінансової втрати. Coldcard був апаратним гаманцем вибору для біткойн-максималістів, дослідників безпеки та інституційних зберігачів, які пріоритезують повітряний проміжок, відкритий код та безпеку лише для біткойна. Якщо найбільш довірений апаратний гаманець у біткойні міг поставити п'ятирічну помилку ентропії без виявлення, питання не в тому, чи Coldcard зазнав невдачі. Питання в тому, чи можна довіряти будь-якому апаратному гаманцю як єдиній точці зберігання.
Механізм: як 128 біт стали 40
Технічне пояснення є одночасно простим і тривожним. Прошивка Coldcard викликає функцію для отримання випадковості під час генерації сидів. У коді існували дві реалізації цієї функції з однаковими сигнатурами: апаратний генератор випадкових чисел, написаний Coinkite, та програмний резерв, успадкований від MicroPython, вбудованого Python-рантайму, на якому побудована прошивка.
Препроцесорний захист мав вибирати апаратну реалізацію. Але захист перевіряв лише, чи визначено параметр конфігурації, а не чи правильне його значення. Коли прошивка компілювалася, система збірки вирішила неоднозначність, вибравши програмний резерв. Збірка завершилася без попереджень. Отримана прошивка генерувала сиди, які виглядали нормально, створювали дійсні біткойн-адреси та приймали депозити без жодних ознак того, що базова ентропія була катастрофічно слабкою.
На Mk3 Coinkite оцінює ефективний простір пошуку для сида, згенерованого за цих умов, приблизно в 40 біт. 128-бітний сид має більше можливих комбінацій, ніж атомів у спостережуваному Всесвіті. 40-бітний сид має приблизно трильйон комбінацій. Це досяжно для зловмисника із середніми ресурсами, використовуючи звичайне обладнання. Різниця не є похибкою округлення. Це різниця між замком, який неможливо відкрити, і замком, який можна вибити ногою.
Моделі Mk4, Q та Mk5 включають додаткові безпечні елементи, які додають власну ентропію до процесу генерації сидів. Coinkite оцінює, що ці моделі створюють сиди з приблизно 72 бітами ефективної ентропії за наявності помилки. Це значно краще, ніж 40 біт, але все ще далеко від цільових 128 біт. Простір ключів у 72 біти практично неможливо зламати грубою силою за допомогою сучасного споживчого обладнання, але він теоретично досяжний для добре фінансованого супротивника з доступом до спеціалізованих обчислювальних ресурсів.
Найкритичніша деталь у попередженні Coinkite — це одне речення: «Оновлення прошивки не змінює та не відновлює існуючий сид». Кожен власник Coldcard, який згенерував сид на ураженій прошивці, повинен створити новий сид на виправленому обладнанні та переказати свої кошти. Не існує програмного виправлення для слабкого приватного ключа. Сам ключ потрібно замінити.
Вимір штучного інтелекту
У заяві Coinkite було висунуто твердження, яке одразу викликало критику з боку спільноти експертів з безпеки. Компанія заявила, що вважає, що «хтось використав штучний інтелект для перегляду попередніх версій нашого прошивки», щоб виявити цю помилку. Вона також додала, що запускала «одну з найкращих доступних моделей» на тому ж коді за тижні до атаки, і модель «не знайшла цю помилку або щось серйозне».
Це твердження є правдоподібним, але неперевіреним. Прошивка Coldcard є відкритим кодом і публічно доступна на GitHub. Будь-яка особа або автоматизована система може її переглянути. Конкретний клас помилки, захисна перевірка препроцесора, яка перевіряє визначення, а не значення, є типом тонкої помилки в шляху коду, яку великі мовні моделі показали різну здатність виявляти залежно від контексту, інженерії запитів та використаної моделі.
Асиметрія, описана Coinkite, є реальною, навіть якщо її конкретна атрибуція є спекулятивною. Атакуючі та захисники дійсно мають доступ до тих самих інструментів ШІ. Але атакуючі мають структурну перевагу: їм потрібно знайти одну експлуатовану вразливість, тоді як захисникам потрібно знайти всі. ШІ, який переглядає код і не повідомляє про нічого серйозного, дає хибну впевненість. ШІ, який переглядає код і знаходить один експлуатований шлях, надає атакуючому все необхідне.
Інцидент також порушує питання щодо процесу аудиту безпеки апаратних гаманців у ширшому сенсі. Coldcard хвалили за підхід з відкритим кодом, який дозволяє будь-кому перевіряти прошивку. Але видимість відкритого коду настільки ж цінна, наскільки якісними є проведені перевірки. Якщо власний ШІ-аудит виробника, який, імовірно, проводився з повним контекстом архітектури та призначення кодової бази, пропустив помилку, перевага відкритого коду стає теоретичною, а не практичною.
Спільнота дослідників безпеки обговорювала твердження про атрибуцію ШІ зі скептицизмом. Кілька дослідників зазначили в соціальних мережах, що конкретний клас помилки, захисна перевірка препроцесора, яка перевіряє визначення проти значення, добре задокументований у літературі про вбудовані системи і міг бути знайдений за допомогою звичайного перегляду коду. Вони стверджували, що формулювання з ШІ ризикує приховати більш фундаментальну невдачу: Coinkite не мала достатніх процесів людського перегляду для критичного шляху коду, який не змінювався протягом п'яти років. Незалежно від того, чи знайшов помилку ШІ, чи дослідник-людина, основна проблема однакова. Код був публічним, помилка була тонкою, але не новою, і ніхто з боку захисників її не виявив.
Block опублікував незалежний технічний аналіз 31 липня, підтвердивши, що жоден з його продуктів, включаючи Bitkey, не постраждав. Технічний керівник Block Макс Гіз закликав усіх, у кого є постраждалий Coldcard, «переказати кошти, як тільки це буде безпечно». Trezor підтвердив, що його пристрої використовують інший підхід до генерації ентропії і не вразливі. Ledger не опублікував офіційної відповіді, але його архітектура Secure Element використовує виділений апаратний генератор випадкових чисел, який працює незалежно від прошивки.
П'ятирічне вікно
Хронологія вразливості є настільки ж руйнівною, як і сама вразливість. Версія прошивки 4.0.1, яка ввела помилку, була випущена в березні 2021 року. Кожен сид, згенерований на постраждалому Coldcard між березнем 2021 року та випуском виправлених прошивок 31 липня 2026 року, потенційно скомпрометований. Це п'ять років і чотири місяці постраждалої генерації сидів.
Протягом цього вікна Coldcard випустив Mk3 (постраждав на 40 бітах), Mk4 (постраждав на 72 бітах) та Q (постраждав на 72 бітах). Mk5, випущений у 2026 році, також постраждав на 72 бітах. Coinkite випустила кілька оновлень прошивки протягом цього періоду, жодне з яких не вирішило або не виявило проблему з ентропією. Власні перевірки безпеки компанії, включаючи нещодавній ШІ-аудит, не виявили її.
П'ятирічне вікно також збіглося з періодом значного зростання ціни біткоїна. Сиди, згенеровані на постраждалих пристроях Mk3 у 2021 році, коли біткоїн торгувався між $29,000 і $69,000, тепер захищають активи за цінами вище $60,000. Економічний стимул для атакуючого інвестувати обчислювальні ресурси в підбір 40-бітних ключів зростав з кожним підвищенням ціни. Гаманець, що містить 1 BTC, який коштував $30,000, коли сид був згенерований, тепер коштує вдвічі більше. Окупність інвестицій атакуючого покращилася просто через очікування.
Кількість постраждалих гаманців важко точно оцінити. Coinkite не публікує дані про продажі. 500 гаманців, спустошених під час початкової атаки, представляють найбільш вразливу підмножину, ймовірно, користувачів Mk3 з найслабшою 40-бітною ентропією, які мали достатньо великі баланси, щоб виправдати обчислювальні інвестиції атакуючого. Загальна кількість гаманців із скомпрометованими сидами серед усіх постраждалих моделей може бути значно більшою.
Патерн консолідації атакуючого свідчить про систематичну підготовку. 594 BTC були зібрані приблизно з 500 гаманців в одну адресу консолідації, а потім переміщені на одну адресу, що містить 562 BTC. 25-хвилинне вікно виконання та кількість гаманців, атакованих одночасно, вказують на те, що атакуючий заздалегідь обчислив вразливі ключі до початку збору коштів. Це не була опортуністична атака. Це була операція, яка потребувала тижнів або місяців підготовки.
Аналіз блокчейну під час збору коштів показує методичну послідовність виконання. Атакуючий не транслював усі 500 транзакцій одночасно, що могло б спричинити перевантаження мемпулу та потенційне випередження з боку ботів у стилі MEV, які відстежують незвичні патерни транзакцій. Натомість транзакції були згруповані в партії, кожна з яких підтверджувалася протягом одного-двох блоків. Адреса консолідації отримувала кошти через кілька блоків, перш ніж фінальна транзакція перемістила 562 BTC на адресу, яка, схоже, є довгостроковою адресою зберігання. На момент написання цього тексту кошти не були переміщені далі.
Проблема міграції
Рекомендації Coinkite щодо виправлення просять постраждалих користувачів виконати міграцію гаманця: згенерувати новий сід на виправленому прошивці, перевірити резервну копію, надіслати тестову транзакцію, а потім перемістити решту коштів. Процес є простим для користувачів з одним гаманцем і помірними балансами. Він значно складніший для користувачів з мультипідписами, транзакціями з таймлоком або гаманцями, які слугують одним ключем у більшій структурі зберігання.
Міграція також створює власні ризики безпеки. Переміщення коштів із скомпрометованого гаманця до нового вимагає, щоб скомпрометований гаманець підписав транзакцію. Якщо атакуючий вже обчислив приватний ключ, він може випередити міграцію, відстежуючи блокчейн на предмет будь-якої транзакції зі скомпрометованої адреси та негайно збираючи решту коштів. Користувачі зі значними балансами стикаються з гонкою між власною міграцією та збором коштів атакуючим.
Для користувачів, які тримають біткоїн у мультипідписах, де Coldcard слугував одним із кількох пристроїв для підпису, міграція є складнішою, але ризик частково пом'якшується. Гаманець з мультипідписом 2 з 3, де лише один ключ був згенерований на постраждалому Coldcard, залишається безпечним, доки атакуючий не зможе скомпрометувати другий ключ. Однак скомпрометований ключ все одно послаблює загальну модель безпеки і його слід замінити. Процес вимагає координації з усіма власниками ключів для створення нового мультипідписного гаманця із замінним ключем, підписання транзакції міграції з існуючим кворумом та перевірки нової структури перед переміщенням решти коштів.
Coinkite розглянув один крайовий випадок, який надає часткове полегшення. Користувачі, які додали щонайменше 50 незалежних кидків гральних кісток під час генерації сіду, внесли достатньо зовнішньої ентропії, щоб підняти загальну суму понад 128 біт незалежно від помилки прошивки. Введені дані з кісток були хешовані разом із випадковістю, згенерованою пристроєм, тому сильна ентропія кісток компенсувала слабку ентропію пристрою. Користувачі, які додали 99 або більше кидків, внесли приблизно 256 біт лише від кісток.
Виняток з кістками підкреслює іронію. Користувачі, які найімовірніше додавали велику кількість кидків кісток під час генерації сіду, є найбільш свідомими щодо безпеки, саме та демографічна група, яка обрала Coldcard саме через його репутацію вищих стандартів безпеки. Для цих користувачів їхня власна параноя щодо якості ентропії могла ненавмисно захистити їх від неспроможності виробника забезпечити її.
Що це означає для безпеки апаратних гаманців
Інцидент з Coldcard не є першим компрометуванням апаратного гаманця. Ledger зіткнувся з витоком бази даних у 2020 році, який розкрив інформацію про клієнтів. Trezor розкрив вразливість фізичного вилучення у 2023 році. Але ці інциденти стосувалися або витоку метаданих, або вимог фізичного доступу. Помилка Coldcard відрізняється тим, що вона підриває фундаментальну обіцянку безпеки пристрою: що він генерує справді випадкові приватні ключі.
Час посилює шкоду. Інцидент відбувається, коли біткоїн торгується поблизу історичних максимумів, а інституційне впровадження рішень для самозберігання прискорилося. Компанії та сімейні офіси, які обрали Coldcard саме через його репутацію безпеки, тепер стикаються з терміновим операційним рішенням: мігрувати кошти з потенційно скомпрометованих ключів, змагаючись з атакуючим, який, можливо, вже обчислив ці ключі.
Інцидент кидає виклик кільком припущенням, які біткоїн-спільнота вважала основоположними. Припущення, що прошивка з відкритим кодом є за своєю суттю безпечнішою, ніж пропрієтарна, оскільки її можна перевірити. Припущення, що апаратні генератори випадкових чисел у спеціалізованих біткоїн-пристроях є надійнішими, ніж програмні альтернативи. Припущення, що пристрій, зосереджений виключно на біткоїні, а не на підтримці кількох криптовалют, матиме простіший і, отже, більш перевірюваний код.
Жодне з цих припущень не є хибним у принципі. Вони є хибними лише як абсолютні істини. Програмне забезпечення з відкритим кодом можна перевіряти, але воно не було ефективно перевірене. Апаратні генератори випадкових чисел є більш надійними, але лише тоді, коли система збірки дійсно підключається до них. Кодова база, орієнтована лише на біткоїн, є простішою, але простота не завадила п'ятирічній помилці залишитися непоміченою.
Практичний урок полягає в тому, що апаратні гаманці не слід розглядати як єдиний рівень зберігання значних обсягів біткоїнів. Схеми з мультипідписом, які розподіляють ключі між кількома пристроями від різних виробників, у поєднанні з незалежно згенерованими джерелами ентропії, забезпечують глибину захисту, яку не може досягти жоден окремий пристрій. Інцидент із Coldcard демонструє, що навіть найнадійніший пристрій може вийти з ладу способами, невидимими для користувача, доки кошти не зникнуть.
Ширше питання полягає в тому, чи є процеси перевірки безпеки в індустрії апаратних гаманців адекватними для активів, які вони захищають. Втрата 38 мільйонів доларів через одну помилку у прошивці свідчить про те, що ні. Модель самозберігання, яку пропагують прихильники біткоїна, вимагає інструментів зберігання, що відповідають стандарту надійності, порівнянному з банківською інфраструктурою, яку вони прагнуть замінити. Після Coldcard цей стандарт не було досягнуто.
На що звернути увагу
- **Переміщення атакуючим 562 BTC консолідації.** Чи будуть кошти змішані, надіслані на біржі, чи залишені на місці, надасть інформацію про рівень складності атакуючого та юрисдикцію. Фірми з аналізу ланцюга вже відстежують цю адресу.
- **Додаткові уражені гаманці, окрім початкових 500.** Атакуючий міг обчислити ключі для додаткових гаманців, але вирішив не виводити їх одночасно. Загальний обсяг впливу на всі уражені моделі Coldcard може бути значно більшим, ніж початкові 38 мільйонів доларів.
- **Темпи міграції користувачів.** Coinkite не може змусити користувачів генерувати нові сиди. Кількість гаманців, які залишаються на скомпрометованих сидах через 30, 60 і 90 днів, покаже, наскільки ефективно попередження досягло ураженої бази користувачів.
- **Регуляторна відповідь.** Втрата 38 мільйонів доларів, спричинена помилкою у прошивці виробника у споживчому фінансовому продукті, викликала б регуляторні дії у традиційних фінансах. Чи відреагують агентства із захисту прав споживачів або фінансові регулятори на цей інцидент, покаже, як уряди класифікують апаратні гаманці.
- **Розкриття інформації про безпеку конкурентами.** Block, Trezor і Ledger підтвердили, що вони не постраждали. Чи опублікують вони детальний технічний аналіз власних процесів генерації ентропії, покаже, чи розглядає індустрія це як специфічну помилку Coldcard, чи як системну можливість для перегляду.
Часті запитання
Скільки біткоїнів було вкрадено в результаті експлойту Coldcard?
Приблизно 594 BTC, вартістю близько 38 мільйонів доларів, було виведено з приблизно 500 апаратних гаманців Coldcard за 25 хвилин 31 липня 2026 року. Кошти були консолідовані на одній адресі, що містить 562 BTC.
Що спричинило вразливість Coldcard?
Помилка збірки у прошивці Coldcard призвела до того, що генерація сида використовувала програмний резервний генератор випадкових чисел від MicroPython замість апаратного генератора випадкових чисел. Захисна перевірка препроцесора перевіряла лише те, чи визначено параметр конфігурації, а не його значення, тому збірка підключилася до неправильної реалізації без попередження.
Наскільки слабкими були уражені сиди?
Сиди Mk3 мали приблизно 40 біт ефективної ентропії замість запланованих 128 біт. Сиди Mk4, Q і Mk5 мали приблизно 72 біти через додаткову ентропію від їхніх безпечних елементів. Простір ключів у 40 біт можна зламати за допомогою звичайного обладнання.
Чи виправляє проблему оновлення прошивки?
Ні. Оновлення прошивки виправляє майбутню генерацію сидів, але не відновлює сид, вже створений на ураженій прошивці. Користувачі повинні згенерувати новий сид на виправленому обладнанні та перенести всі кошти на новий гаманець.
Які моделі Coldcard уражені?
Кожна поточна модель уражена певною мірою. Mk3 найбільш серйозно уражена – 40 біт ентропії. Mk4, Mk5 і Q уражені приблизно на 72 біти. Tapsigner, Opendime і Satscard використовують інший код і не уражені.
Чи постраждали інші апаратні гаманці?
Block, Trezor і Ledger підтвердили, що їхні продукти не постраждали. Block опублікував незалежний технічний аналіз. Trezor заявив, що їхні пристрої використовують інший підхід до генерації ентропії. Вразливість специфічна для процесу збірки прошивки Coldcard.
Чи знала Coinkite про баг до атаки?
Coinkite стверджує, що виявила недолік і опублікувала рекомендації 30 липня, після того як про баг повідомили. Компанія заявляє, що провела AI-перевірку своєї прошивки за тижні до атаки, і перевірка не виявила проблему. Баг існував з березня 2021 року.
Що тепер робити власникам Coldcard?
Оновіть прошивку до останньої версії для вашої моделі. Згенеруйте новий сід на виправленому пристрої. Перевірте резервну копію та адресу отримання. Відправте тестову транзакцію. Переведіть решту коштів. Користувачі, які додали принаймні 50 незалежних кидків кубика під час початкової генерації сіда, можуть не потребувати міграції, але Coinkite рекомендує мігрувати незалежно від цього.






