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.

Tip

Sleva na první půjčku u Firefish

Vyzkoušejte půjčku krytou bitcoinem. Kód bitcoinvkapse = sleva 30 % z poplatku. Neznáte Firefish? Přečtěte si recenzi

Chci půjčku

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:

Líbil se ti článek? Ukaž jak moc 😉

1. Zvol částku · 2. Klikni na „Poslat přes Lightning"

nebo pošli přímo na: Nevím, která bije

powered by DonateBySatoshi