492 / 736CK-RNG

COLDCARD RNG Incident (2026)

Інцидент генерації випадковості в гаманцях COLDCARD

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

COLDCARD RNG Incident (2026) — інцидент, розкритий у липні 2026 року, коли програмна помилка послабила створення seed. Seed — таємна основа, з якої гаманець виводить ключі; RNG означає генератор випадкових чисел. Для оцінки ризику треба знати, як виник seed і яка прошивка тоді працювала. Це не було порушенням правил Bitcoin чи дистанційним захопленням пристрою.

Coinkite та Block опублікували перші розбори 30 липня 2026 року після повідомлень про втрати. За словами виробника, нападникам не треба було керувати чужим пристроєм: вони могли відтворити слабко згенеровані таємниці й отримати відповідні приватні ключі, які дозволяють підписувати перекази. Тому самого відключення від інтернету було недостатньо. Але цей опис не встановлює причину кожної окремої втрати; лише марка пристрою її не пояснює. [2] [3]

Гаманець мав використовувати апаратне джерело випадковості, TRNG. Після інтеграції бібліотеки libNgU виклик ngu.random.bytes натомість потрапляв до функції rng_get у MicroPython та її програмного генератора Yasmarang. Під час складання програми з’єднали неправильні компоненти. MICROPY_HW_ENABLE_RNG мало значення 0, тоді як #ifndef перевіряло лише наявність налаштування, а не його значення. Правильний апаратний код міг бути у файлі, але не використовуватися для створення seed. Це не була поломка чипа чи навмисний аварійний режим. [1]

Нападнику простіше, коли таємниця походить із меншої кількості можливостей. Тут стан програми залежав від даних пристрою, таймерів і попередніх викликів. Для Mk4, Mk5 та Q Block описує додаткове оновлення стану, обмежене 32 бітами: щонайбільше 2^32 різних вихідних послідовностей за незмінної решти. Попередня оцінка Coinkite для загальної ентропії, тобто міри невизначеності, становила близько 40 біт для Mk2/Mk3 і 72 біти для новіших моделей. Цифри мають різні припущення. Вони не визначають вартості кожної атаки й не доводять, що кожен гаманець можна зламати миттєво. [3] [1]

Офіційне попередження називає Mk2/Mk3 з 4.0.1–4.1.9. Початковий розбір Block включає вже 4.0.0 і зміну в березні 2021 року. Отже, джерела розходяться щодо початкової межі; замінювати цю невизначеність здогадкою не варто. Якщо походження seed неясне, посібник міграції радить вважати гаманець ураженим. Mk4/Mk5 та Q також були уражені до виправлення відповідної гілки прошивки. Тодішня заява про всі виробничі версії не описує пізніші виправлені релізи. [2] [3] [5]

Перші виправлені версії: Mk2/Mk3 4.2.0, Mk4/Mk5 Standard 5.6.0, Q Standard 1.5.0Q, Mk4/Mk5 Edge 6.6.0X і Q Edge 6.6.0QX. Standard та Edge — окремі гілки; більший номер іншої гілки сам собою нічого не доводить. Під час цієї ревізії виробник рекомендує Standard 5.6.3 для Mk4/Mk5 і 1.5.3Q для Q. Перед установленням перевірте актуальну офіційну сторінку, хеш файла та підпис релізу. Хеш є відбитком вмісту, а підпис допомагає перевірити походження. Навіть правильно встановлене оновлення не змінює наявний seed. [4]

Уявіть, що відновили слабко створений seed на новому пристрої. Пристрій інший, але таємниця та сама. Клонування й перенесення гаманця мають те саме обмеження. Хешування, тобто обчислення відбитка даних, не додає можливих входів; BIP39 Checksum допомагає виявляти помилки у словах, а не поповнює відсутню випадковість. І навпаки: seed, безпечно створений деінде, не стає слабшим через цю конкретну помилку лише від імпорту в COLDCARD. Важливе його походження. [3] [5]

Виняток виробника передбачає щонайменше 50 незалежних кидків неупередженого кубика, введених початковою функцією Add Dice Rolls. Послідовність не мала бути записана чи розкрита, а гаманець мав використовувати остаточні слова після додавання кидків. За меншої кількості або сумнівів рекомендовано міграцію. BIP39 Passphrase — інший захід: додатковий таємний текст, який разом із seed визначає інший гаманець. Сильна унікальна passphrase додає перешкоду нападнику, але seed не виправляє; виробник радить міграцію і її користувачам. PIN лише захищає доступ до пристрою. Сучасні правила нових seed відрізняються від цього історичного винятку. [2]

Спершу перевірте, чи маєте придатну резервну копію початкового гаманця. За посібником міграції створіть справді новий seed на виправленій прошивці та перевірте його копію. Звірте fingerprint, короткий ідентифікатор гаманця, й адресу отримання на екрані пристрою. Надішліть малу тестову суму; решту переказуйте лише після перевірки призначення та отримання. Врахуйте всі рахунки з коштами, гаманці з passphrase, похідні гаманці й multisig. Стару копію збережіть до підтвердження всього переказу. За розбіжностей нічого не надсилайте й не стирайте. Ніколи не вводьте таємні дані відновлення у вебформу. [5]

Multisig вимагає для переказу визначеної кількості підписів від кількох ключів. Якщо нападник отримав достатньо ключів для виконання цього правила, захисту вже недостатньо. Потрібно оцінити решту ключів, підготувати й перевірити на пристрої нове правило підписання та перевести кошти. Block описує інші застосування того самого генератора: окремі ключі Paper Wallet і деякі тимчасові ключі шифрування. Наслідки залежать від конкретного використання й даних, доступних нападнику; вони не однакові для кожної функції. [3] [5]

Сторінка стану називає тест апаратного генератора на справжньому Mk4, перевірку джерельного коду та незалежне повторення складання конкретного виправлення. Це допомагає перевірити описаний механізм, але не доводить безпеку кожного випущеного файла. Поточний Standard також вимагає власного внеску випадковості користувача для нового seed. Старі рекомендації, що такий внесок завжди необов’язковий, уже не є актуальним порядком для цієї гілки. Сторінка фіксує перебіг виправлень; окремий докладний технічний звіт про причини досі позначено як такий, що готується. [4]

Приклад · CK-RNG

Пристрій оновлений, проблема залишилася

Власник створив seed на Mk3 4.1.9 без власних кидків кубика. Він установлює 4.2.0 та відновлює ті самі слова на іншому пристрої, але продовжує використовувати початкову таємницю. За посібником міграції треба створити новий seed на виправленій прошивці, перевірити копію й адресу та зробити малий тестовий переказ. Лише потім переміщують решту. Стару копію зберігають до підтвердження всього перенесення.

Для повної картини прочитайте також Cryptographic Entropy, Deterministic RNG, Seed Generation, BIP39 checksum, BIP39 passphrase, Dice Roll Entropy.

01Чи достатньо купити новий пристрій?

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

02Чи означають 32 біти однаково просту атаку на всі моделі?

Ні. В аналізі Block це додаткова зміна стану генератора за фіксованої решти стану й історії викликів. Якщо нападник не знає даних пристрою чи часових параметрів, його завдання змінюється. Цифра не є універсальним виміром швидкості атаки або гарантією безпеки певного seed.

DOC · 001Coinkite — Technical Deep Dive into the Entropy IssueПервинне джерело DOC · 002Coinkite — COLDCARD Security AdvisoryПервинне джерело DOC · 003Block — Predictable RNG Fallback and 32-Bit ReseedПервинне джерело DOC · 004COLDCARD — Current Security StatusПервинне джерело DOC · 005COLDCARD — Seed migration guideДокументація
Переглянуто: Спочатку джерела · Не інвестиційна порада