ГоловнаНовинний центр LBank
Пояснення експлойту Coldcard Bitcoin: ентропія, як генеруються ключі та чому важливі біти
coldcard-bitcoin-exploit-explained-entropy-keys-bits
Пояснення експлойту Coldcard Bitcoin: ентропія, як генеруються ключі та чому важливі біти
Недолік у гаманцях Coldcard коштував біткоїн-інвесторам понад $100 мільйонів — і знову розпалив давню суперечку про те, чи можна довіряти кубикам.
2026-08-04 Джерело:decrypt.co

Стисло

  • Помилка прошивки означала, що гаманці Coldcard генерували seed-фрази за допомогою програмного псевдовипадкового генератора замість апаратного чипа, призначеного для цієї роботи.
  • Помилка ефективно зменшила простір пошуку зі 128 біт до приблизно 40 на старих моделях.
  • Ось що все це означає, і як це призвело до крадіжки біткойнів на суму понад 130 мільйонів доларів.

Хтось спустошує біткойн-гаманці, які ніколи не мали бути доступними.

Монети зберігалися на пристроях Coldcard — апаратних гаманцях від канадського виробника Coinkite, таких, що ніколи не підключаються до інтернету. Жодного фішингового посилання. Жодного шкідливого програмного забезпечення. Жодного вкраденого ноутбука. Зловмисники просто з'ясували, якими були приватні ключі.

Galaxy Research наразі відстежила понад 1 596 BTC, викрадених за три підтверджені хвилі, з підозрюваною четвертою хвилею, яка підніме загальну суму приблизно до 2 055 BTC — близько 130 мільйонів доларів за поточними цінами. Один "злив" перемістив 70 мільйонів доларів за 41 хвилину. Coinkite заявляє, що до цього долучилися щонайменше 15 окремих зловмисників.

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

Нуль – це все ще щось

У 2021 році Coinkite перенесла криптографію Coldcard на libsecp256k1, ту саму бібліотеку, що використовує Bitcoin Core. Розумне рішення. Однак саме інтеграція призвела до провалу.

Міграція тихо перенаправила генерацію seed-фраз з власного апаратного генератора випадкових чисел Coldcard на програмний резервний варіант MicroPython — невеликий алгоритм під назвою Yasmarang, який існує для пристроїв, що взагалі не мають чипа випадковості.

🚨ВТРАТИ ВІД ЗЛАМУ COLDCARD ПЕРЕВИЩУЮТЬ 100 МЛН ДОЛАРІВ

З високою впевненістю 1 596 BTC було викрадено з ~7300 адрес за 3 підтверджені хвилі + ще 14 менших інцидентів.

Якщо додати підозрювані (але непідтверджені), загальна сума сягає 130 мільйонів доларів (2 тис. BTC).

Детальніше в обговоренні нижче 👇 pic.twitter.com/RAl3ib67qa

— Galaxy Research (@glxyresearch) August 3, 2026

Coldcard має чип випадковості. Його просто перестали використовувати.

Причина майже надто незначна, щоб у неї повірити. Захисний механізм збірки використовував #ifndef, який перевіряє, чи існує налаштування, а не чи воно увімкнене. Coinkite визначив це налаштування як нуль, що означає "вимкнено". Оскільки нуль все ще вважається визначеним, перевірка безпеки пройшла, і збірка завершилася. Обидві версії функції мали ідентичні сигнатури, тому нічого не виглядало неправильним.

"Основна частина випадковості на COLDCARD надходила від ПГВЧ, який, як я не знав, насправді був у базі вихідного коду", — написала Coinkite, посилаючись на псевдовипадковий генератор чисел — програмне забезпечення, що генерує числа, які виглядають випадковими, але слідують фіксованій формулі з початкового значення.

Якщо дати формулі те саме початкове значення, ви отримаєте той самий результат. Завжди.

На пристроях Mk2 та Mk3 з прошивками 4.0.1 до 4.1.9 це початкове значення походило від серійного номера чипа та його годинника. Coinkite оцінює отриманий простір пошуку приблизно у 40 біт. Новіші моделі додавали трохи ентропії захищеного елемента, піднімаючи їх приблизно до 72 біт.

Жоден не дорівнює 128, цільовому значенню.

Розрив важливіший, ніж здається. Біти — це показники степеня. 128-бітовий простір пошуку містить більше комбінацій, ніж атомів у видимому всесвіті, і ніхто його не шукає. Сорок біт — це приблизно трильйон — число, яке потужний ноутбук може обробити. Кожен втрачений біт скорочує роботу вдвічі.

Інженерна команда Block, яка опублікувала власний аналіз, оцінила ефективний простір пошуку захищеного елемента новіших пристроїв у 2^32 кандидатів, в середньому близько 2^31 спроб. Їхня оцінка для старих плат більш прямолінійна: для відомого ідентифікатора пристрою, стану таймера та історії викликів генерація гаманця є детермінованою.

А детермінованість є протилежністю випадковості, що є суттєвим для криптографії.

Не "слабкий". Передбачуваний.

Coinkite підозрює, що це було виявлено машиною. "Ми повинні припустити, що хтось використав ШІ для перегляду попередніх версій нашої прошивки і наткнувся на цю проблему", — написала компанія, додавши, що нещодавно вона пропустила одну з найкращих доступних моделей ШІ через той самий код і нічого не виявила. "І атакуючі, і захисники мають однакові інструменти ШІ, але сьогодні це не допомогло нам, а лише допомогло "поганим хлопцям"."

Випущена виправлена прошивка для кожної постраждалої моделі. Вона не виправляє існуючі seed-фрази; ці гаманці мають бути перегенеровані, а кошти переміщені. Decrypt висвітлював, як змінюється автономне зберігання після подібного експлойту, та відстежував втрати, що перевищили 114 мільйонів доларів.

Що таке ентропія насправді

Ентропія — це міра того, скільки зловмисник не знає.

Іншими словами, це, по суті, невизначеність, виміряна в бітах. Один біт – це один кидок монети: два результати, і той, хто вгадує, має рацію в половині випадків. Десять біт – це 1024 результати. Кожен біт подвоює обсяг роботи того, хто вгадує.

Біткойн-гаманець — це дуже велике число, яке зберігається в секреті. Адреса, на яку люди надсилають монети, виводиться з нього математично, і виведення працює лише в один бік — ви можете перейти від ключа до адреси, але ніколи назад.

Тож безпека кожного гаманця базується на одному питанні: Скільки чисел доведеться перебрати зловмиснику?

Якщо число було обрано зі 128 бітами ентропії, відповідь: "більше, ніж дозволяє фізика". Якщо зі 40, відповідь: "дайте мені трохи часу".

Це та сама властивість, яка робить загрозу квантових обчислень гідною обговорення — квантова машина атакуватиме математику, що пов'язує ключ з адресою. Помилка Coldcard не потребувала цього. Вона зробила ключі вгадуваними ще до того, як задіялася ця математика.

Саме тут термінологія стає слизькою. Псевдовипадковий генератор виробляє вихідні дані, які проходять статистичні тести на випадковість, тобто, по суті, нічого, що виявила б електронна таблиця. Ці вихідні дані все ще повністю визначаються їхнім початковим значенням. Це виглядає випадковим, але не є таким.

Статистична випадковість і криптографічна непередбачуваність — це різні властивості, і вихідні дані Coldcard пройшли б перший тест, повністю проваливши другий.

Справжня випадковість має походити від фізичного шуму: електричного тремтіння в схемі, теплових коливань, радіоактивного розпаду. Для цього і був призначений апаратний чип на Coldcard. Саме цей чип відключив прапорець збірки.

Потім Люк Дашджр згадав про кубики

Коли користувачі поспішно перегенеровували seed-фрази, багато хто вдалися до очевидного низькотехнологічного рішення. Coldcard дозволяють кидати фізичні кубики та використовувати результати як ентропію. Власне керівництво Coinkite вважає, що seed-фрази, створені за допомогою принаймні 50 незалежних, приватних кидків кубиків, не піддаються ризику від цієї помилки.

Це може здатися безглуздим, але компанія насправді продає мішечок зі "100 милими й крихітними кубиками", щоб полегшити вам весь процес.

31 липня розробник Bitcoin Core Люк Дашджр опублікував попередження: "Досить багато людей пропонують/використовують кубики для пом'якшення вразливості Coldcard. Зверніть увагу, що звичайні кубики не призначені для криптографічної безпеки. Якщо ви збираєтеся це робити, вам, мабуть, варто придбати прецизійні казиношні кубики. І навіть тоді, мати інше джерело ентропії."

Біткойн-Твіттер не сприйняв це спокійно.

"хаха, тепер навіть кубики кидати не можна", — написав один користувач. "Самостійне зберігання скінчилося…" Інший запитав, чи варто найняти когось із хворобою Паркінсона, щоб він їх кидав. (Негарно.)

should I hire someone with parkinsons to throw the dice?

— Murern (@Bitcoin_Murern) July 31, 2026

Ймовірно, найкорисніша відповідь прийшла з арифметикою. Розробник Джастін Шарп підрахував, скільки саме коштує вам поганий кубик:

"Перебір. Ідеальний шестигранний кубик дає 2.585 біта за кидок. Помітно упереджений кубик, наприклад, з однією гранню, що випадає 20% часу замість 16.7%, все ще дає близько 2.55 біта. За 99 кидків це різниця між ~256 бітами та ~252 бітами ентропії."

Чотири біти з 256. Це вся "плата" за помітно несправедливий кубик.

Дашджр не помиляється, що дешеві кубики мають вимірюване упередження — точки, сформовані литтям під тиском, видаляють трохи різну кількість пластику з кожної грані, саме тому казино використовують прецизійні кубики з заповненими заглибленнями. Він має рацію щодо фізики, але помиляється щодо ставок. Втрата чотирьох біт з 256 залишає вам 252. Помилка Coldcard залишила користувачів на 40.

Однак у його пораді є гостріший аргумент, і він не стосується толерантності виробництва. Йдеться про недовіру до будь-якого єдиного джерела. Невдача Coldcard полягала не в тому, що її ентропія була трохи упередженою — це було те, що один компонент мовчки перестав працювати, і ніхто цього не помітив.

Що з цим робити

Якщо ви згенерували seed-фразу на постраждалому Coldcard без кидків кубиків (справді) або сильної BIP-39 парольної фрази, ця seed-фраза скомпрометована.

Оновіть прошивку, згенеруйте нову seed-фразу, перевірте відбиток, надішліть тестову транзакцію, а потім перемістіть все. Рекомендації Coinkite детально описують це для кожної моделі. Експортовані seed-фрази несуть у собі цей недолік — переміщення поганої seed-фрази в інший гаманець не вирішує проблему.

Для всіх інших висновок полягає не в тому, що апаратні гаманці зламані або що кубики — це пастка.

Справа в тому, що "випадковість" — це твердження, і твердження потребують перевірки. Вихідний код Coldcard був публічним весь час. Призначений апаратний ГВЧ був прямо там у бінарному файлі. Рецензенти підтвердили його існування, але ніколи не підтверджували, що генератор seed-фраз справді його викликав.

Вісім років аудитів перевіряли правильний код. Ніхто не перевіряв, чи він працював.

Популярна криптовалюта
Зареєструйтеся зараз, щоб не пропустити жодного оновлення!