Чотири рядки коду.
Понад 1 596 BTC зникли.
У березні 2021 року збірка прошивки COLDCARD перестала запитувати випадкові числа у свого апаратного чіпа і натомість доручила це звичайному програмному забезпеченню. Ніхто не помічав цього протягом п'яти років. У липні 2026 року зловмисники виконали розрахунки та почали спустошувати гаманці.
Перевірка безпеки, яка була і нічого не зробила
Увесь захист тримається на одному числі, яке неможливо вгадати
Апаратний гаманєць виконує кілька завдань. Він показує те, що ви насправді підписуєте, замість того щоб змушувати вас довіряти екрану зараженого комп'ютера, а також зберігає ваш ключ всередині чіпа, стійкого до розтину. Кожен із цих захистів припускає, що число, з якого утворився ваш ключ, неможливо було вгадати. Якщо це можливо, зловмиснику ніколи не доведеться долати жоден із них. Пул, з якого витягується 24-слівна фраза, містить приблизно одне число на кожну тисячу атомів у спостережуваному Всесвіті. Пул такого розміру неможливо перебрати. У цьому полягає вся модель безпеки.
12 слів містять 128 бітів ентропії, 24 — 256 бітів, плюс контрольна сума на основі SHA-256 від цієї ентропії. BIP-39 перетворює результат на головний ключ BIP-32.
12 слів містять 128 бітів ентропії, 24 — 256 бітів, плюс контрольна сума на основі SHA-256 від цієї ентропії. BIP-39 перетворює результат на головний ключ BIP-32.
COLDCARD припинив формування з цього простору
Зміна прошивки у 2021 році непомітно припинила запити гаманця до спеціалізованого чипа випадкових чисел, змусивши звичайне програмне забезпечення самостійно обчислювати значення. Ось весь інцидент у порівнянні:
Це не безпека, зменшена на дві третини. Кожен біт подвоює обсяг роботи, тому на 88 бітів менше зменшує завдання у фактор 2⁸⁸. Трильйон — це велике число для людини і маленьке для того, хто орендує високопродуктивні машини для виконання цього завдання.
Генерація сіду перейшла з ckcc.rng_bytes() на ngu.random.bytes(). Coinkite оцінює близько 40 бітів простору пошуку, що залишився на Mk3, і близько 72 на Mk4/Mk5/Q, проти цільових 128 бітів. Незалежний аналіз компанії Block досягає того ж порядку (менше 2⁴⁰·⁷ і менше 2⁷³·³) та знаходить більш вузькі умови, за яких залишається значно менше.2
Генерація сіду перейшла з ckcc.rng_bytes() на ngu.random.bytes(). Coinkite оцінює близько 40 бітів простору пошуку, що залишився на Mk3, і близько 72 на Mk4/Mk5/Q, проти цільових 128 бітів. Незалежний аналіз компанії Block досягає того ж порядку (менше 2⁴⁰·⁷ і менше 2⁷³·³) та знаходить більш вузькі умови, за яких залишається значно менше.2
Оскільки програмне забезпечення не може бути випадковим
Подумайте про те, що робить кидок монети непередбачуваним. Сила кидка, гравідність, потік повітря від кондиціонера, легкі тремтіння землі. Десятки впливів, які ви можете назвати, і десятки, які не можете. Ніхто не може обчислити траєкторію, тому ніхто не може назвати результат. Програмне забезпечення працює інакше. Воно запускає фіксовану формулу на кількох початкових значеннях і видає фіксовану відповідь. Тут цими значеннями були серійний номер чіпа та час роботи пристрою у ввімкненому стані. Зловмисник, який вивчає рецепт та інгредієнти, повторно обчислює результат замість того, щоб його вгадувати.
При відключеному апаратному RNG функція rng_get() зв'язалася з Yasmarang PRNG MicroPython, отримавши початкове значення з незасекреченого стану (UID, SysTick, RTC), і після цього не збирала нову ентропію, тому кандидати перебираються офлайн. Coinkite не вважає сіди, змішані з 50 або більше чесними приватними кидками, такими, що піддаються ризику лише через цю проблему: 50 × log₂6 ≈ 129 бітів.3
При відключеному апаратному RNG функція rng_get() зв'язалася з Yasmarang PRNG MicroPython, отримавши початкове значення з незасекреченого стану (UID, SysTick, RTC), і після цього не збирала нову ентропію, тому кандидати перебираються офлайн. Coinkite не вважає сіди, змішані з 50 або більше чесними приватними кидками, такими, що піддаються ризику лише через цю проблему: 50 × log₂6 ≈ 129 бітів.3
А перевірка, яка мала це зупинити, ставила не те запитання
У збірці був запобіжник, написаний спеціально для того, щоб зупинити випуск прошивки без апаратного генератора. Він запитував, чи існує налаштування, а не чи увімкнене воно. Налаштування існувало і було вимкнене. Запобіжник мовчав, збірка не повідомляла про помилки, і прошивка була випущена.
#ifndef перевіряє лише наявність визначення. Конфігурація плати визначила MICROPY_HW_ENABLE_RNG як 0, визначене та вимкнене, тому #error ніколи не спрацьовував, а компонувальник зв'язав rng_get() із програмним резервним варіантом.3
#ifndef перевіряє лише наявність визначення. Конфігурація плати визначила MICROPY_HW_ENABLE_RNG як 0, визначене та вимкнене, тому #error ніколи не спрацьовував, а компонувальник зв'язав rng_get() із програмним резервним варіантом.3
Дефект, цитований з вихідного коду.3
Протягом п'яти років нічого не вказувало на проблеми
Слабка фраза відновлення виглядає точно так само, як і сильна. Двадцять чотири звичайних слова, правильна контрольна сума, пристрій, який поводиться нормально. Ніщо не попереджає вас на екрані та немає жодних помилок у збірці. Вихідний код був загальнодоступним весь цей час. Його читання все одно вимагало, щоб хтось відкрив цей конкретний файл.
Довжина вихідних даних, відсутність нулів та відсутність повторів успішно проходять перевірку на слабкому PRNG, тому звичайні базові тести теж не могли цього виявити.
Довжина вихідних даних, відсутність нулів та відсутність повторів успішно проходять перевірку на слабкому PRNG, тому звичайні базові тести теж не могли цього виявити.
А потім хтось виконав розрахунки
Вони ніколи не торкалися жодного пристрою. Вони згенерували ймовірні фрази на власних комп'ютерах, вирахували відповідні біткоїн-адреси для кожної з них і перевірили ці адреси за публічним блокчейном. Кожна адреса з балансом була спорожнена. Гаманець, який лежав у шухляді без підключення з 2022 року, був настільки ж уразливим, як і той, що використовувався щодня.
Кандидати виводяться в офлайні через BIP-39/BIP-32; мережі торкається лише фінальна перевірка балансу, тому з боку жертви заздалегідь немає жодних ознак активності.3
Кандидати виводяться в офлайні через BIP-39/BIP-32; мережі торкається лише фінальна перевірка балансу, тому з боку жертви заздалегідь немає жодних ознак активності.3
Ця сторінка — не привід для злорадства.
Coinkite розкрила вразливість, опублікувала технічний звіт і випустила виправлення. Сторонні дослідники змогли реконструювати те, що сталося, оскільки COLDCARD є проєктом з відкритим вихідним кодом.
Застереження щодо оцінок: вони описують обсяг підбору, з яким стикається зловмисник за поточних припущень, а не час виконання за секундоміром. Ніхто не може сказати, скільки часу знадобиться для зламу конкретного гаманця.2
Прочитайте це в першу чергу
Те, що вам потрібно зробити, залежить від того, який пристрій ви використовували під час першого створення фрази відновлення, а не від того, яким ви володієте сьогодні.
Вважайте, що це все ще відбувається. Фрази стали вгадуваними у 2021 році, і метод тепер є загальнодоступним, тому будь-хто може запустити той самий пошук. Немає патча, який закриває це ззовні, і немає жодних причин для зловмисника зупинятися. Якщо ви постраждали, безпечним припущенням є те, що час — це єдине, що стоїть між вами та ними.
Mk2 та Mk3: переведіть свої кошти зараз
Зона ураження охоплює прошивку від 4.0.1 до 4.1.9. Версія 4.2.0 виправляє створення нових фраз, але жодне оновлення не може повернути випадковість уже створеній фразі. Створіть новий гаманець на пристрої, якому довіряєте, і переведіть туди свої активи.1
Mk4 та Mk5: перевірте версію прошивки
Якщо фразу було створено на прошивці старішій за 5.6.0 (або 6.6.0X у збірках Edge), оновіть її, створіть абсолютно новий гаманєць на оновленій прошивці, а потім переведіть свої кошти. Оновлення саме по собі не відновлює стару фразу.1
Q: так само, межа — 1.5.0Q
Оновіть до 1.5.0Q чи пізнішої версії або до 6.6.0QX для збірок Edge, створіть новий гаманець, запишіть і перевірте резервну копію, надішліть одну невелику тестову транзакцію, після чого переведіть решту.1
Чи вирішує оновлення прошивки COLDCARD проблеми з наявною фразою відновлення?
Як дізнатися, на якій прошивці було створено мою фразу відновлення COLDCARD?
Як перевірити, чи потрапила моя адреса під цю вразливість?
Чи захищають кидки кісток або кодова фраза відновлення COLDCARD?
Чи охоплює попередження Coinkite усі вразливі COLDCARD?
Жоден пристрій OneKey не постраждав
Жодна модель з тих, які ми коли-небудь випускали. Наша прошивка не містить жодних залежностей libngu, Coinkite, COLDCARD чи CKCC, тому шлях коду, який дав збій, там відсутній, і ви можете перевірити це самостійно в наших репозиторіях. На нашому поточному обладнанні ключ надходить із справжнього генератора випадкових чисел усередині сертифікованого захищеного елемента, а не з програмного забезпечення на головному процесорі. Ця заміна і була тим збоєм.
Ми також не прийняли це на віру. Коли з'явилися новини, Anzen Lab відстежила нашу випадковість від початку до кінця (звідки вона береться, що її викликає і налаштування збірки, які визначають, яка саме версія потрапляє на ваш пристрій) та опублікувала точні файли, які вони перевірили.12
Читати повторну перевірку Anzen LabЧи могло це статися з OneKey?
Цей збій вимагав одночасного виконання трьох окремих умов. На OneKey жодна з них не виконується, і ви можете перевірити всі три самостійно.
То звідки ж береться випадковість у OneKey?
Створено всередині чіпа з сертифікацією EAL 6+
Ваші ключі створюються та зберігаються в спеціалізованому захищеному від зламу чіпі, а не в універсальному процесорі, який керує всім іншим. EAL 6+ — це рівень гарантії, який використовується для платіжних та ідентифікаційних карток.
Генератор випадкових чисел, який контролює себе
Цей чіп генерує випадковість із реального фізичного шуму та постійно тестує власний вихідний сигнал. Якщо випадковість починає працювати некоректно, чіп помічає це, замість того щоб мовчки продовжувати роботу.
Ми здійснили повторну перевірку власних систем
Після новин про COLDCARD лабораторія Anzen Lab відстежила нашу власну випадковість увесь шлях (звідки вона береться, що насправді її викликає і налаштування збірки, які визначають, яка версія опиняється на вашому пристрої) та опублікувала точні файли, які вони перевірили.11


Чотири рівні перевірки кожного OneKey, і жоден із них не довіряє трьом іншим
Будь-який із них може пропустити помилку. Суть у тому, що всі чотири мають пропустити одну й ту саму. У COLDCARD не було такого запобіжника: було достатньо одного неперевіреного параметра збірки.
Відкритий код, який дійсно можна перевірити
Наша прошивка та додатки є відкритими на GitHub, а наші збірки можна відтворити, що означає, що ви можете самостійно перезібрати код і переконатися, що він створює саме ту програму, яка працює на вашому пристрої. Це крок, який виловлює проблему "правильний код, неправильна версія".
OneKey на GitHub
Сторонні аудитори перевіряють нас офіційно
Аудиторська фірма SlowMist перевіряє нас та публікує звіти. Окремі оцінки охоплюють OneKey Pro, Classic 1S та наш SDK. Наші практики безпеки сертифіковані за стандартом ISO/IEC 27001, а лінійки Pro та Classic 1S сертифіковані на відповідність стандарту EN 18031 призначеним ЄС органом. Усе це опубліковано, нічого не оцінювалося самостійно.13
Читати зведення аудиту SlowMistКоманда, якій платять за злам власних продуктів
Anzen Lab — це наша внутрішня команда безпеки, що складається з інженерів з апаратної, програмної безпеки та безпеки додатків, які працюють із групою сторонніх дослідників, що постійно змінюються. Їхня робота полягає в тому, щоб зламувати апаратні гаманці, включно з нашими власними, до того, як щось буде випущено. Коли ця історія з'явилася, вони повторно дослідили власність випадковості OneKey від початку до кінця та опублікували точні файли, які перевірили.11
Читати аналіз Anzen LabМи платимо стороннім фахівцям за пошук наших помилок
Будь-хто може повідомити нам про вразливість конфіденційно через нашу публічну програму на BugRap або напряму на [email protected] та отримати за це винагороду. Сума виплати залежить від рівня критичності за шкалою CVSS. Головна мета — зробити повідомлення нам вигіднішим за продаж вразливості.15
OneKey на BugRapПеревірте гаманцевий пристрій у вашій руці
entro.tools — це безкоштовний інструмент з відкритим вихідним кодом, який зчитує реальні випадкові числа з апаратного гаманця та запускає на них стандартні тести перевірки статистичного стану у вашому браузері через USB без завантаження куди-небудь і без необхідності оновлення прошивки.
Виконує тести стану FIPS 140-2, NIST SP 800-22 та SP 800-90B локально через WebUSB (настільні версії Chrome або Edge). Пристрій запитує експорт ентропії, пакет випадкових чисел, які він щойно згенерував, ніколи не запитуючи вашу фразу відновлення.16
Універсальний тест Маурера потребує щонайменше 387 840 біт; за меншого обсягу звіт прямо позначає його як пропущений, а не прибирає мовчки.16
Які гаманці можна перевірити
Чи може сторонній спостерігати взагалі сирі випадкові числа пристрою. Це один вузький вимір. Дивіться примітку нижче.
Питання, які це викликає для всіх інших
Чи зачепив збій ентропії COLDCARD гаманці OneKey?
Які апаратні гаманці зазнали впливу збою ентропії COLDCARD?
Чи можу я перевірити випадковість генерації власного гаманця?
Як оцінити, чи можна довіряти апаратному гаманцю?
Пояснювати складне — наша робота
Безпека, яку можна перевірити, а не та, у яку просять повірити.
Відкритий код із можливістю відтворення, перевірений сторонніми фахівцями, атакований нашою власною лабораторією та оплачуваний у разі знаходження прогалини. Це пристрої, про які йдеться в цій дискусії.
Джерела
Джерела нижче, отримані 6 серпня 2026 року. Власний бюлетень та технічний звіт Coinkite йдуть першими, за ними слідують незалежний аналіз на рівні вихідного коду та блокчейн-аудит. Показники втрат усе ще переглядаються в бік збільшення: Galaxy Research підтвердила 1596 BTC 4 серпня і оцінила підозрювані втрати ближче до 2055 BTC.
- 1. Coinkite · COLDCARD Mk3 Seed Generation Security Advisory
- 2. Coinkite · Technical Deep Dive into the Entropy Issue
- 3. Block Engineering · Predictable RNG Fallback and 32-Bit Reseed in COLDCARD Firmware
- 4. CoinDesk · Bitcoin cold-wallet attack spreads to 4,500 addresses as losses near $89 million
- 5. CoinDesk · Major bitcoin wallet flaw drains 594 BTC in 25-minute sweep
- 6. Crypto Briefing (Galaxy Research) · Galaxy Research identifies 1,367 BTC drained in attacks on Coldcard addresses
- 7. The Crypto Times (Galaxy Research) · Coldcard hack losses hit $100M with 1,596 BTC stolen in ongoing attack
- 8. The Crypto Times (Galaxy Research) · 15 attackers exploit ongoing Coldcard hack as losses approach $130M
- 9. The Hacker News · Coldcard Hardware Wallet Flaw Linked to $70 Million Bitcoin Theft in 41 Minutes
- 10. Bitcoin Magazine · Coinkite Releases Fixed Firmware After Coldcard Bug
- 11. OneKey Anzen Lab · The COLDCARD Entropy Failure: How a Silent RNG Fallback Cost Users $38 Million
- 12. OneKey · Statement: OneKey devices are not affected by this issue
- 13. OneKey · OneKey has passed a security audit by SlowMist — separate reports cover the Pro, the Classic 1S and the SDK
- 14. SlowMist · SlowMist Audit Report — OneKey Pro
- 15. BugRap · OneKey Bug Bounty Program
- 16. entro.tools · Entropy Check — verify your hardware wallet's randomness (device support matrix)








