Ve čtvrtek někdo vyprázdnil přes 1000 adres z peněženek Coldcard a ukradl kolem 1100 BTC. a čísla asi nejsou konečná. Co se stalo? Jsou jiné peněženky v bezpečí?
Nejprve trocha zdánlivě nesouvisející teorie:
Jak se dělá v počítači náhodné číslo
Počítač ze své podstaty dělá přesně to, co mu řekne kód a žádnou opravdovou náhodu sám od sebe neumí. Když potřebuje náhodné číslo, musí si ho odněkud vzít: buď z fyzického jevu, který je skutečně nepředvídatelný (šum na elektronickém obvodu, kolísání napětí, rozpad atomu a podobně), nebo si ho jen vypočte matematickým vzorcem z nějakého vstupu, který náhodný není (čas od zapnutí, sériové číslo, aktuální čas). Druhý přístup se nazývá pseudonáhodný generátor a má jednu zásadní vlastnost: je deterministický. Když znáte vstupy, dokážete přesně zopakovat výstup.
Co je seed
Seed je vlastně jen jedno velké náhodné číslo. Peněženka nejdřív potřebuje vygenerovat kus opravdu náhodných dat – 128 až 256 bitů (podle počtu slov seedu), tedy dlouhou řadu nul a jedniček, kterou nejde uhodnout ani zopakovat. Protože pro člověka je taková řada nezapamatovatelná, převede se přes matematickou funkci podle standardu BIP-39 na posloupnost běžných slov ze seznamu 2048 slov a ty si uživatel ukládá jako zálohu peněženky. Z tohoto základu se pak dalšími matematickými kroky odvozují všechny vaše soukromé klíče a adresy. Takže kdokoliv zná seed, dokáže odvodit úplně stejné klíče jako vy.
Co se u Coldcard pokazilo
Největší problém má model Mk3, ale v klidu nemohou být ani majitelé ostatních modelů, viz dále. Peněženka měla generovat seed z hardwarového generátoru náhodných čísel (TRNG). Kvůli chybě v kódu se ale od března 2021 používal místo tohoto generátoru jen náhradní softwarový generátor, který náhodnost stavěl jen na sériovém čísle čipu, časovači od zapnutí a hodinách, jejichž oscilátor byl navíc u modelu Coldcard Mk3 pravděpodobně vypnutý.
Výsledkem bylo, že místo 128-256 bitů entropie, kterou BIP-39 předpokládá, se použilo asi jen 40 bitů. Tím vznikl dost zásadní rozdíl, protože takto se generovaly seedy v daleko užším pásmu, než měly. Jak hodně velký rozdíl to je? Velký. Pro představu:
Prostor pro seed si můžete představit jako hromadu písku. Pokud má seed „jen“ 128 bitů entropie, je ta hromada zhruba taková, jako by každé jednotlivé zrnko ze všech pozemských pláží a pouští bylo samo o sobě další celou zemskou hromadou písku. Prostě nepředstavitelně velké číslo, které nenajde superpočítač ani za miliony let.
Coldcard Mk3 měl kvůli chybě jen 40 bitů. To je sice pořád 1,1 bilionu zrnek, ale z nekonečné hromady se stane korba náklaďáku. Což je pořád dost na ruční hledání, ale jedna běžná grafická karta najde zrnko za pár dní.
Modely Mk4, Q a Mk5 jsou také zasažené, ale entropii měly trochu lepší – asi 72 bitů. Analýza firmy Block navíc potvrzuje problém i u modelu Mk2.
Jak se problém zneužil
Útočník nepotřeboval fyzický přístup k ničí peněžence. Firmware byl celou dobu open-source, takže stačilo spustit kód, spočítat celý relativně malý prostor možných seedů, odvodit z nich adresy a porovnat je s adresami, které mají bitcoiny, což není problém, protože blockchain je veřejný. Pokud bitcoiny najde, jednoduše si je pošle na svoji peněženku.
Co bude dál
Prostor, kde jsou „vadné“ seedy, je konečný a na dnešním hardwaru se dá se správným vybavením projet v řádu hodin maximálně jednotek dní. Možná už jsou v tuhle chvíli všechny ohrožené bitcoiny ukradené a zkoušet to dál už nemá cenu. Kdo měl prostředky na modelech Mk3 a nesledoval zpravodajství, pravděpodobně už je nemá, nebo brzy mít nebude. Pokud je stále má, měl by je urychleně převést jinam.
Upgrade firmware problém neřeší!
Tohle je zásadní pro uživatele: aktualizace firmwaru neopraví seed vygenerovaný zasaženým firmwarem. Musí se vygenerovat nový seed a prostředky migrovat jinam!
Rovněž není v bezpečí ten, kdo seed z Coldcard přenesl do jiné peněženky. Stále je to zranitelný seed!
Kdo je v bezpečí
Samozřejmě všichni, kdo nepoužívají Coldcard – problém se týká jen této konkrétní peněženky s konkrétním firmwarem. I s Coldcard je v bezpečí ten, kdo měl nastavenou rozumně složitou passphrase.
A v bezpečí by měl být také ten, kdo použil vestavěnou funkci Coldcard pro pokročilé a paranoidní uživatele a při zakládání peněženky si hodil aspoň 50krát kostkou.
Jak to dělá Trezor
Modely Trezor Model One a Model T kombinují dva zdroje entropie: entropii hostitelského počítače nebo telefonu a hardwarový TRNG v mikrokontroléru STM32. Zařízení Trezor Safe 3 a Safe 5 přidávají třetí zdroj: bezpečnostní prvek Optiga. Spolupracují tak tři nezávislé zdroje. Trezor Safe 7 přidává čtvrtý zdroj: čip TROPIC01 a při generování peněženky se tak kombinují čtyři nezávislé zdroje. Zdroj: web Trezoru
Ironií je, že Coldcard do března 2021 používal kryptografickou knihovnu odvozenou z trezor-crypto – tedy open-source řešení, které si pro svoje zařízení napsal a otestoval právě Trezor. Fungovalo to spolehlivě. Pak se Coinkite rozhodl přejít na vlastní knihovnu a zbytek znáte …
Závěr
Já osobně bych Coldcard už nikdy nesvěřil ani satoshi. Možná je to kruté, oni jistě problém opraví, resp. už opravili, a poučí se, ale není absolutně žádný důvod používat něco, co takto selhalo v generování klíčů, tedy v té jediné věci, kterou peněženka musí udělat 100% správně. Používejte Trezor. A používejte pro jistotu passphrase.
Nechtěnou náhodou je, že Trezor má aktuálně slevovou akci 😉
Čtěte dále:
- Jak zálohovat bitcoiny
- Passphrase – jak funguje a proč ji používat
- Hesla, PINy, seedy v Trezoru. Co chrání co. Můžu něco ztratit?
Líbil se ti článek? Ukaž jak moc 😉
1. Zvol částku · 2. Klikni na „Poslat přes Lightning"
Naskenuj QR mobilní Lightning peněženkou
nebo pošli přímo na: Nevím, která bije
powered by DonateBySatoshi

