Ми використовуємо технології, такі як файли «кукі», для зберігання та/або доступу до інформації про пристрій. Ми робимо це з метою покращення досвіду користувача під
час перегляду та відображення (не-) персоналізованої реклами. Згода на використання цих технологій дозволить нам обробляти дані, такі як поведінка при перегляді або унікальні ідентифікатори на цьому сайті. Несхвалення або відкликання згоди може негативно вплинути на певні функції та можливості.
Технічне зберігання або доступ суворо необхідні для законної мети надання можливості використання конкретної послуги, явно запитаної абонентом або користувачем, або виключно для здійснення передачі повідомлення через мережу електронного зв’язку.
Техническое хранение или доступ необходимы для законной цели хранения предпочтений, которые не запрошены подписчиком или пользователем.
Технічне зберігання або доступ, який використовується виключно для статистичних цілей.
Техническое хранилище или доступ, который используется исключительно для анонимных статистических целей. Без повестки в суд, добровольного согласия со стороны вашего интернет-провайдера или дополнительных записей от третьей стороны информация, хранящаяся или полученная только для этой цели, обычно не может быть использована для вашей идентификации.
Технічне сховище або доступ потрібні для створення профілів користувачів для надсилання реклами або для відстеження користувача на веб-сайті чи кількох веб-сайтах для аналогічних маркетингових цілей.
Як зламали Coldcard і чому оновлення прошивки не рятує сід
30 липня о 01:10 UTC хтось за 41 хвилину повністю спорожнив 1 196 біткоїн-адрес. Ніякого фішингу, ніякого фізичного доступу до пристроїв, ніяких підписаних користувачем транзакцій.
Причина одна: один рядок конфігурації у прошивці Coldcard, через який гаманець пʼять років поспіль генерував сід програмним псевдовипадковим генератором замість апаратного.
Нижче розбираємо злам Coldcard: як працює вразливість RNG, кого вона стосується, що робити прямо зараз і які висновки з цього має зробити кожен, хто тримає крипту на апаратному гаманці, навіть якщо Coldcard у нього ніколи не було.
Злам Coldcard: хронологія від першого свіпу до четвертої хвилі
Хвиля перша: 41 хвилина, 1 082 BTC
Перші повідомлення виглядали як 594 BTC (близько $38 млн) із приблизно 500 односигнатурних гаманців за 25 хвилин. Це була неповна картина.
Galaxy Research зіставила транзакції за спільним почерком і відновила картину всієї хвилі: 1 196 адрес, спорожнених дощенту, 1 082,65 BTC (близько $70,2 млн за курсом того дня), вікно 01:10:20 — 01:51:26 UTC 30 липня, девʼять блоків від 960 183 до 960 191.
Chainalysis показала, що атакуючий не йшов навмання: спершу вигрібалися найбільші баланси, понад $30 млн зібрали за перші десять хвилин. Один потерпілий втратив близько $1,8 млн. Йозеф Тєтек із Trezor назвав найбільшу спорожнену адресу: 51 BTC.
Почерк транзакцій видавав автоматичний інструмент: кожен свіп (повне спорожнення адреси одним переказом) платив однакову завищену комісію 30 sat/vB, у 30–75 разів вище за медіану того тижня, і не залишав здачі.
Перше публічне попередження від Coinkite вийшло приблизно через 30 годин після цієї хвилі.
Хвилі другої, третьої і четвертої
Друга хвиля пройшла 31 липня між 04:54 і 08:36 UTC: 76,16 BTC з 1 478 адрес. Третя розтягнулася з 31 липня на 1 серпня і забрала 207,73 BTC з 1 912 адрес.
Середній улов на жертву падав із кожним заходом: у першій хвилі це майже цілий біткоїн, у третій близько 0,1 BTC. Алекс Торн із Galaxy пояснює це просто: великі адреси з доступного простору ключів уже вичистили, залишився дрібʼязок.
3 серпня почалася четверта хвиля, і Торн попередив про неї в прямому ефірі, ще поки транзакції висіли в мемпулі. Атакуючі цього разу підписували транзакції з увімкненим RBF, тобто до підтвердження жертва могла перебити свою ж транзакцію вищою комісією і встигнути вивести монети першою.
Швидкість була 13,8 свіпів на блок проти 0,3 у контрольний період до інциденту.
Станом на 4 серпня Galaxy оцінює з високою впевненістю 1 596 BTC, знятих із приблизно 7 300 адрес: три підтверджені хвилі плюс 14 дрібніших інцидентів. Це вже понад $100 млн. Якщо підтвердиться четверта хвиля, загальна сума виходить на 2 055 BTC, близько $130 млн.
Приблизно 90% украденого досі не рухається. Galaxy передала близько 600 підозрюваних адрес федеральним слідчим і комплаєнс-фірмам і працює з 73 потерпілими напряму.
Що зробив Coinkite
Родольфо Новак (NVK), співзасновник Coinkite, вибачився 31 липня і взяв повну відповідальність за баг, визнавши, що внутрішнє ревʼю його не спіймало.
Компанія випустила виправлені прошивки для всіх уражених моделей і гілок, знищила складський запас пристроїв із вразливою прошивкою, а покупцям, до яких пристрої вже поїхали, розіслала листи з інструкціями. TAPSIGNER, OPENDIME і SATSCARD працюють на іншій кодовій базі й не зачеплені.
У чому суть вразливості Coldcard: один макрос проти пʼяти років
Як генерація сіда має працювати
Коли Ви створюєте новий гаманець, пристрій бере 32 байти з апаратного генератора випадкових чисел, окремого фізичного блоку в мікроконтролері, який знімає фізичний шум і не залежить від коду. З цих байтів виходять 12 або 24 слова BIP-39, тобто 128 або 256 біт ентропії.
Уся модель безпеки тримається на одному припущенні: ці біти справді випадкові й ніхто, крім Вас, не може їх відтворити. Перебрати 2¹²⁸ варіантів не може ніхто.
Що пішло не так
У Coldcard є власна обгортка над апаратним генератором STM32, тому в конфігурації плат стоїть рядок
#define MICROPY_HW_ENABLE_RNG (0). Це свідоме рішення: «не компілюй вбудовану реалізацію MicroPython, у нас своя».Бібліотека libngu, через яку йшла генерація, перевіряла цей макрос директивою
#ifndef, тобто перевіряла лише те, що макрос узагалі існує, а не те, яке в нього значення. Макрос визначено, тож libngu вирішує, що апаратний шлях доступний, і привʼязується до функціїrng_get().А MicroPython дивиться саме на значення, бачить нуль і компілює замість апаратного блоку програмний фолбек Yasmarang. Збірка проходить без жодної помилки, і кожен виклик генератора випадкових чисел іде через звичайний псевдовипадковий алгоритм.
1 березня 2021 року Coldcard перенесла генерацію сіда на libngu (коміт b18723dd), і 17 березня це поїхало в реліз прошивки 4.0.0. Далі код лежав відкритим у публічному репозиторії понад пʼять років.
Чим ініціалізувався програмний фолбек
Yasmarang ініціалізується один раз, при першому виклику, трьома значеннями: молодшим 32-бітним словом UID чипа (у XOR із лічильником SysTick), регістром часу
RTC->TRі субсекундним лічильникомRTC->SSR. Після цього нової ентропії не збирається взагалі, кожне наступне значення це детермінований перехід стану.Жодне з цих джерел не є секретом. UID це заводський ідентифікатор чипа, фіксований на весь час життя мікроконтролера, читається з памʼяті й частково потрапляє в USB-серійник пристрою.
SysTick це лічильник, який перезавантажується щомілісекунди: 80 000 можливих значень на Mk2/Mk3, 120 000 на нинішніх моделях. На холодному старті Mk2/Mk3 обраний осцилятор RTC узагалі вимкнений, тобто значення регістрів часу з високою ймовірністю нульові або статичні.
Поверх цього libngu накладала XOR із другим генератором Yasmarang, ініціалізованим публічними константами, які лежать прямо у вихідниках. XOR не створює ентропії: якщо обидва входи відтворювані, їхній XOR теж відтворюваний.
Вбудована перевірка «здоровʼя» генератора відбраковувала лише однакові сусідні значення, а псевдовипадковий алгоритм проходить її без проблем.
Скільки ентропії лишилося
Coinkite оцінює наслідки так: близько 40 біт на Mk3 і близько 72 біт на Mk4, Mk5 і Q замість очікуваних 128. Технічний звіт Block дає жорсткішу картину.
Стеля в 2⁷³ для нинішніх моделей, яку іноді цитують, у самому звіті Block супроводжується прямим застереженням: це не 73-бітна криптографічна стійкість. Поля таймерів корелюють між собою, можуть займати куди вужчий діапазон, а атакуючий може профілювати їх на власному такому ж пристрої.
Хешування нічого не рятує. SHA256d робить вивід статистично рівномірним, але не збільшує кількість можливих входів: скільки було кандидатів до хешу, стільки й лишиться після. Контрольна сума BIP-39 ентропії теж не додає.
Щоб було відчутно: 40 біт це близько трильйона варіантів, які перебираються офлайн за розумний час на звичайному залізі.
Перевірка кандидата коштує дешево, бо публічна адреса або xpub працює як оракул, тобто дозволяє миттєво перевірити здогад: згенерувати кандидата, вивести з нього адресу, звірити з блокчейном. Пристрій для цього чіпати не треба взагалі.
Чому оновлення прошивки не лікує сід
Патч виправляє генерацію нових сідів. Той сід, який уже створено, він не змінює: слова вже записані й уже обчислювані. Перенесення цього сіда на інший пристрій теж нічого не дає, бо слабкість сидить у самих словах, а не в залізі, яке їх зберігає.
Кого стосується вразливість Coldcard, а кого ні
Головне правило: значення має не дата покупки пристрою і не його модель сама по собі, а прошивка, на якій створювався конкретний сід.
Виправлені прошивки
Standard і Edge це дві різні гілки релізів. Номер 6.x виглядає більшим за 5.6.0, але старий білд Edge від цього не стає виправленим. Якщо Ви на Edge, Вам потрібен саме виправлений Edge-реліз для своєї моделі.
Кидки кубиків
Баг зачепив ентропію, яку генерував пристрій. Незалежну ентропію, яку додав користувач, він не чіпав. На уражених прошивках Coldcard хешував згенерований пристроєм сід разом з усіма кидками, введеними через Add Dice Rolls:
Слово «приватних» тут не формальність. Кидки не повинні бути зняті на камеру, записані у файл чи введені на компʼютері, підключеному до мережі. Послідовність кидків це такий самий ключовий матеріал, як і сам сід.
Що ще генерувалося тим самим генератором
Історія не обмежується сідами гаманців. Той самий виклик використовували:
Мультисиг
Мультисиг рятує лише тоді, коли кворум неможливо зібрати з уражених ключів. Схема 2-з-3, у якій усі три пристрої це Coldcard на вразливих прошивках, не захищає ні від чого: атакуючий відновлює потрібну кількість ключів і підписує сам.
Block у своєму звіті формулює це прямо: потрібен кворум пристроїв, які не мають цієї вразливості.
Що робити прямо зараз
Поспіх під час міграції сам по собі створює ризик, більший за той, від якого Ви тікаєте. Тому порядок дій має значення.
Якщо Mk3 це Ваш єдиний пристрій
Прошивка 4.2.0 дозволяє згенерувати коректний новий сід на самому Mk3, купувати нове залізо заради цього не обовʼязково.
Незручність у тому, що доведеться перемикатися між старим і новим сідом на одному пристрої: перевірити бекап і XFP старого, оновитися, на порожньому пристрої згенерувати новий сід, записати бекап і адресу, відновити старий сід, надіслати тестову суму, відновити новий і переконатися, що вона прийшла, знову відновити старий і вивести решту.
Порядок нудний, але він працює без другого пристрою. Якщо другий пристрій із виправленою прошивкою є, робіть через нього.
Пасфраза: коли рятує, а коли ні
Пасфраза BIP-39, яку часто називають 25-м словом, це не PIN пристрою. Це рядок, який разом із сідом дає інший гаманець із іншими адресами. Атакуючий, який відновив Ваш сід, потрапляє тільки в базовий гаманець без пасфрази і не бачить того, що за нею.
Проблема в тому, що пасфразу перебирають разом із сідом. Якщо простір сіда звузився до кількох мільярдів варіантів, а пасфраза це «Bitcoin2024!», дата народження або рядок із улюбленої пісні, сумарний перебір залишається реальним. Слабке 25-те слово в такій ситуації не барʼєр, а формальність.
Сильна пасфраза для цього сценарію означає кілька конкретних речей: це випадковий рядок, а не фраза з людською логікою; вона ніде більше не використовується; вона ніколи не вводилася на сайті чи на недовіреному компʼютері; і вона згенерована не на ураженому пристрої, бо вбудований генератор паролів у Secure Notes ішов через той самий зламаний RNG.
Зворотний бік теж треба тримати в голові. Пасфраза не відновлюється із сіда, зберігається окремо від слів, і про її існування мають знати ті, хто успадкує доступ. Гаманців, втрачених через забуту пасфразу, ми бачили більше, ніж урятованих нею.
І головне: пасфраза знижує терміновість, але не лікує сід. Coinkite прямо радить власникам пасфразних гаманців мігрувати теж, просто без паніки в першу ніч.
Як захиститися від такого класу атак
Кубики
Це єдиний спосіб не залежати від генератора випадкових чисел виробника взагалі. 50 незалежних приватних кидків шестигранного кубика дають 128 біт, 99 кидків дають близько 256.
Метод перевіряється: Coldcard документує математику підрахунку, і Ви можете звірити результат самостійно. Платити доведеться часом і дисципліною: кидки не можна фотографувати, зберігати у файлі чи вводити на підключеному до мережі компʼютері.
Мультисиг із пристроїв різних виробників
Сенс мультисигу не в кількості ключів, а в незалежності відмов. Схема 2-з-3, зібрана з Coldcard, Trezor і BitBox, переживає баг в ентропії одного виробника: кворум не збереться. Схема з трьох однакових пристроїв від цього класу проблем не захищає взагалі.
Платити за це доведеться складністю: треба зберігати дескриптор гаманця разом із бекапами, відновлення довше, а спадкоємцям пояснювати більше. Для сум, втрата яких відчутна, обмін виправданий. Для гаманця на кілька сотень доларів уже ні.
Як ентропію роблять інші виробники
Це не реклама конкурентів, а корисний спосіб дивитися на архітектуру пристрою перед покупкою.
Урок звідси простий. Архітектура з одним джерелом випадковості ламається цілком від однієї помилки інтеграції, і користувач цього не побачить: слова виглядатимуть нормально, контрольна сума зійдеться, пристрій не покаже жодної помилки.
Архітектура з двома незалежними джерелами цей клас збою переживає. Питання при виборі пристрою звучить не «чи є тут апаратний генератор», а «що станеться, якщо він мовчки відвалиться».
Усі три виробники доступні в Україні, і нові пристрої Coldcard теж їдуть уже з виправленою прошивкою. Але звичка перевіряти версію прошивки на екрані, перш ніж генерувати сід, має лишитися назавжди, незалежно від бренду.
Відкритий код у 2026 році
Вихідники Coldcard були публічними всі пʼять років, і це роками подавалося як перевага. Баг ніхто не побачив.
NVK припускає, що атакуючий прогнав старі версії прошивки через ШІ, і окремо визнав незручний факт: власний аудит Coinkite однією з найкращих доступних моделей за кілька тижнів до інциденту не знайшов ні цього бага, ні чогось серйозного взагалі. Уже після публікації розробник на Reddit відтворив знахідку через Claude Code за вісім хвилин.
Практичний висновок для користувача один: «код відкритий і його стільки років ніхто не зламав» більше не є аргументом на користь безпеки. Будь-який публічний код старих версій зараз читається автоматикою швидше, ніж командами безпеки.
Значення має інше: як швидко виробник реагує, чи публікує технічний розбір і чи закладена в пристрої архітектура, яка витримує помилку в одному компоненті.
Чи означає злам Coldcard, що апаратні гаманці не працюють
Протокол Bitcoin відпрацював штатно. Підписи були валідні, мережа виконала рівно те, що їй прислали. Зламалася випадковість на етапі створення ключа, і це інша частина стека.
Аргументом на користь зберігання на біржі цей інцидент теж не є: біржі втрачали кошти користувачів на порядок більше і з куди нуднішими причинами.
Важлива різниця в іншому. Якщо вразливий сід уже створено, жоден некастодіальний гаманець — апаратний чи програмний — не може віддалено замінити його без дій власника. Виробник заліза так само не може ні дотягнутися до air-gapped пристрою (пристрою, який фізично не зʼєднується з мережею), ні полагодити вже створений сід.
Та сама автономність, яка захищає від блокувань і вилучень, робить такий збій невиправним без дій самого власника.
Тому висновок суто практичний: генерацію ключа варто вважати окремим етапом ризику. Додавайте власну ентропію кубиками, розподіляйте довіру між виробниками там, де сума цього варта, і перевіряйте версію прошивки до створення сіда, а не після новин.
Підсумок
Якщо Ваш сід був створений на Coldcard з ураженою версією прошивки, мігруйте не відкладаючи, незалежно від того, використовували Ви пасфразу чи ні. Виняток — сід, до якого під час створення було додано щонайменше 50 незалежних приватних кидків кубика.
Оновлення прошивки лікує генерацію нових сідів і не лікує старі.
Загальний висновок переживе цей конкретний інцидент. Довіра до єдиного джерела випадковості це та точка відмови, яку користувач може закрити сам: кубиками або мультисигом із пристроїв різних виробників.
Якщо Ви ще не розібралися з базою, почніть зі статті «Топ-5 способів безпечно зберігати seed-фразу» у цьому ж блозі.
Схожі повідомлення
Оновлення прошивки апаратного гаманця: коли оновлювати, а коли краще не поспішати
Оновлення прошивки апаратного гаманця часто здається дрібницею: пристрій купують, щоб він лежав у шухляді і не створював проблем. Здебільшого так і є, поки в застосунку не з’являється повідомлення про доступне оновлення прошивки. І тут люди діляться на два табори, які помиляються дзеркально: одні роками сидять на прошивці з задокументованими дірками, бо «працює ж», інші панічно …
Що таке мнемонічна фраза? Словник BIP39
Що таке мнемонічна фраза? – Запитують у нас наші клієнти. Давайте розбиратись. Мнемонічна фраза – це група слів, яка забезпечує доступ до ваших активів і є резервною копією для вашого крипто-гаманця (її часто також називають Seed-фразою або BIP39). Фраза може містити 12, 18, 24 слова. Найчастіше зустрічаються фрази на 12 та 24 слова Наскільки важливою …
Що таке Shamir Backup та SLIP39?
Вітаю! У цій статті ми розберемо принцип шифрування Shamir Backup. Дізнаємося, чому це один із найкращих способів захистити ваші криптоінвестиції. Порівняємо стандарт шифрування SLIP39 та BIP39 та відповімо собі на запитання “Як захистити свою крипту від крадіжки та спокійно спати вночі?”. Я спробую вмістити всю корисну та важливу інфу у короткий та простий текст. Ви …
Чому Polymarket — це скам? Наше розслідування та досвід роботи з проєктом
Polymarket — це скам чи просто небезпечний інструмент? У цьому матеріалі розбираю на свіжих кейсах, чому резолюція ставок на платформі влаштована так, що звичайний трейдер майже завжди програє. 9–11 травня 2026 року між Україною та росією, на численні прохання останньої, діяло триденне “перемир’я”, щоб кремль зміг провести свій парад 9 травня в москві. 12 травня, …