
Cineva a golit portofele Bitcoin care nu ar fi trebuit să fie niciodată accesibile.
Monedele se aflau pe dispozitive Coldcard – portofele hardware de la producătorul canadian Coinkite, de genul celor care nu intră niciodată în contact cu internetul. Fără link de phishing. Fără malware. Fără laptop furat. Atacatorii pur și simplu au aflat care erau cheile private.
Galaxy Research a urmărit acum peste 1.596 BTC furați în trei valuri confirmate, cu un al patrulea val suspectat care ar ridica totalul la aproximativ 2.055 BTC – aproximativ 130 de milioane de dolari la prețurile actuale. O singură operațiune a mutat 70 de milioane de dolari în 41 de minute. Coinkite spune că cel puțin 15 atacatori separați s-au implicat.
Compania a publicat o explicație tehnică pe 1 august, explicând ce a mers greșit. Este un document neobișnuit de sincer, iar pe scurt, portofelul a generat numere false timp de opt ani fără ca nimeni să observe.
În 2021, Coinkite a mutat criptografia Coldcard pe libsecp256k1, aceeași bibliotecă folosită de Bitcoin Core. O decizie bună. Integrarea este locul unde a cedat.
Migrarea a redirecționat în tăcere generarea seed-urilor de la propriul generator hardware de numere aleatoare al Coldcard către o soluție software de rezervă a MicroPython – un mic algoritm numit Yasmarang care există pentru dispozitivele fără niciun cip de aleatorietate.
🚨LOSSES FROM COLDCARD HACK EXCEED $100M
High confidence 1,596 BTC has been stolen from ~7300 addresses across 3 confirmed waves + more 14 smaller incidents.
If we add suspected (but unconfirmed), the total balloons to $130m (2k BTC).
More in the thread below 👇 pic.twitter.com/RAl3ib67qa
— Galaxy Research (@glxyresearch) August 3, 2026
Coldcard are un cip de aleatorietate. Doar că nu a mai fost folosit.
Motivul este aproape prea mărunt pentru a fi crezut. Un 'build guard' a folosit #ifndef, care verifică dacă o setare există, mai degrabă decât dacă este activată. Coinkite definise acea setare ca zero, însemnând „dezactivat”. Deoarece zero este considerat totuși definit, verificarea de siguranță a trecut și compilarea a fost finalizată. Ambele versiuni ale funcției aveau semnături identice, așa că nimic nu părea în neregulă.
"Cea mai mare parte a aleatorietății pe COLDCARD provenea dintr-un PRNG pe care nu știam că se afla de fapt în baza codului sursă," a scris Coinkite, referindu-se la un generator de numere pseudo-aleatoare – un software care produce numere care par aleatoare, dar care urmează o rețetă fixă dintr-o valoare inițială.
Oferă rețetei aceeași valoare inițială și vei obține același rezultat. De fiecare dată.
Pe dispozitivele Mk2 și Mk3 care rulau firmware-ul 4.0.1 până la 4.1.9, acea valoare inițială provenea de la numărul serial al cipului și de la ceasul său. Coinkite estimează spațiul de căutare rezultat la aproximativ 40 de biți. Modelele mai noi au inclus puțină entropie de element securizat, ridicându-le la aproximativ 72 de biți.
Niciunul nu este 128, ținta.
Diferența contează mai mult decât pare. Biții sunt exponenți. Un spațiu de căutare de 128 de biți conține mai multe combinații decât există atomi în universul observabil, și nimeni nu îl caută. Patruzeci de biți reprezintă aproximativ un trilion – un număr pe care un laptop decent îl poate procesa. Fiecare bit pe care îl pierzi înjumătățește munca.
Echipa de ingineri a Block, care a publicat propria analiză, a estimat spațiul efectiv de căutare al elementului securizat pentru dispozitivele mai noi la 2^32 candidați, cu o medie de aproximativ 2^31 încercări. Evaluarea lor pentru plăcile mai vechi este mai directă: pentru un ID de dispozitiv, starea cronometrului și istoricul apelurilor cunoscute, generarea portofelului este deterministă.
Și determinist este opusul aleatoriu, ceea ce este esențial pentru criptografie.
Coinkite bănuiește că a fost descoperită de o mașină. „Trebuie să presupunem că cineva a folosit AI pentru a revizui versiunile anterioare ale firmware-ului nostru și a dat peste această problemă”, a scris compania, adăugând că a rulat recent unul dintre cele mai bune modele AI disponibile pe același cod și nu a descoperit nimic. „Atât atacatorii, cât și apărătorii au aceleași instrumente AI, dar astăzi nu ne-a ajutat pe noi, ci doar pe băieții răi.”
Firmware-ul reparat este disponibil pentru fiecare model afectat. Acesta nu repară seed-urile existente; acele portofele trebuie regenerate și fondurile mutate. Decrypt a prezentat modul în care stocarea air-gapped se modifică după un astfel de exploit și a urmărit pierderile care au depășit 114 milioane de dolari.
Entropia este măsura a ceea ce un atacator nu știe.
Cu alte cuvinte, este, practic, incertitudine, contorizată în biți. Un bit este o aruncare de monedă: două rezultate, iar un ghicitor o nimerește corect jumătate din timp. Zece biți înseamnă 1.024 de rezultate. Fiecare bit dublează sarcina ghicitorului.
Un portofel Bitcoin este un număr foarte mare păstrat secret. Adresa la care oamenii trimit monede este derivată matematic din acesta, iar derivarea funcționează într-un singur sens – poți merge de la cheie la adresă, dar niciodată invers.
Așadar, securitatea fiecărui portofel depinde de o singură întrebare: Câte numere ar trebui să încerce un atacator?
Dacă numărul a fost ales cu 128 de biți de entropie, răspunsul este „mai mult decât permite fizica”. Dacă a fost ales cu 40, răspunsul este „dă-mi ceva timp”.
Aceasta este aceeași proprietate care face ca amenințarea calculului cuantic să merite discutată – o mașină cuantică ar ataca matematica ce leagă cheia de adresă. Eroarea Coldcard nu a avut nevoie de asta. A făcut cheile ghicibile înainte ca acea matematică să intervină.
Aici vocabularul devine alunecos. Un generator pseudo-aleator produce rezultate care trec testele statistice pentru aleatorietate, deci practic nimic ce un tabel Excel nu ar semnala. Acele rezultate sunt totuși complet determinate de valoarea sa seed. Pare aleatoriu, dar nu este.
Aleatorietatea statistică și impredictibilitatea criptografică sunt proprietăți diferite, iar rezultatul Coldcard ar fi trecut cu brio primul test, eșuând complet la al doilea.
Aleatorietatea adevărată trebuie să provină din zgomot fizic: instabilitate electrică într-un circuit, fluctuații termice, dezintegrare radioactivă. Pentru asta era cipul hardware de pe Coldcard. Acesta este cipul pe care flag-ul de compilare l-a deconectat.
Pe măsură ce utilizatorii s-au grăbit să regenereze seed-uri, mulți au apelat la soluția evidentă, de tehnologie joasă. Coldcard-urile îți permit să arunci zaruri fizice și să introduci rezultatele ca entropie. Ghidul propriu al Coinkite consideră că seed-urile create cu cel puțin 50 de aruncări de zaruri independente și private nu sunt în pericol din cauza erorii.
Poate părea stupid, dar compania vinde de fapt o pungă cu „100 de zaruri drăguțe și minuscule” pentru a-ți face întregul proces mai ușor.
Pe 31 iulie, dezvoltatorul Bitcoin Core, Luke Dashjr, a postat un avertisment: „Destul de multe persoane sugerează/folosesc zaruri pentru a atenua vulnerabilitatea Coldcard. Rețineți că zarurile obișnuite nu sunt concepute pentru a fi sigure din punct de vedere criptografic. Dacă veți face acest lucru, probabil ar trebui să cumpărați zaruri de cazinou de precizie. Și chiar și atunci, să aveți o altă sursă de entropie.”
Twitter-ul Bitcoin nu a primit vestea cu calm.
"lol acum nici măcar nu poți arunca zaruri," a scris un utilizator. "Custodia proprie s-a terminat…" Un altul a întrebat dacă ar trebui să angajeze pe cineva cu Parkinson să le arunce. (Nu e frumos.)
should I hire someone with parkinsons to throw the dice?
— Murern (@Bitcoin_Murern) July 31, 2026
Probabil cel mai util răspuns a venit cu aritmetica. Dezvoltatorul Justin Sharp a calculat exact cât te costă un zar prost:
"Exagerare. Un d6 perfect oferă 2,585 biți per aruncare. Un zar vizibil părtinitor, de exemplu, cu o față aterizând 20% din timp în loc de 16,7%, oferă totuși aproximativ 2,55 biți. Pe parcursul a 99 de aruncări, aceasta este diferența între ~256 biți și ~252 biți de entropie."
Patru biți din 256. Aceasta este întreaga penalizare pentru un zar vizibil incorect.
Dashjr nu greșește când spune că zarurile ieftine au o părtinire măsurabilă – punctele turnate prin injecție îndepărtează cantități ușor diferite de plastic de pe fiecare față, motiv pentru care cazinourile folosesc zaruri de precizie cu umplutură la nivel. Are dreptate în privința fizicii și greșește în privința mizelor. Pierderea a patru biți din 256 te lasă la 252. Eroarea Coldcard a lăsat utilizatorii la 40.
Există însă un argument mai puternic ascuns în sfatul său, și nu este vorba despre toleranța de fabricație. Este vorba despre a nu te încrede în nicio singură sursă. Eșecul Coldcard nu a fost că entropia sa era ușor părtinitoare – ci că o componentă a încetat să contribuie în tăcere și nimic nu a detectat-o.
Dacă ați generat un seed pe un Coldcard afectat fără aruncări de zaruri (pe bune) sau o parolă BIP-39 puternică, acel seed este compromis.
Actualizați firmware-ul, generați un nou seed, verificați amprenta, trimiteți o tranzacție de test, apoi mutați totul. Ghidul Coinkite explică pas cu pas pentru fiecare model. Seed-urile exportate poartă cu ele defectul – mutarea unui seed defect într-o altă aplicație de portofel nu rezolvă nimic.
Pentru toți ceilalți, concluzia nu este că portofelele hardware sunt defecte sau că zarurile sunt o capcană.
Este că „aleatoriu” este o afirmație, iar afirmațiile trebuie verificate. Codul sursă al Coldcard a fost public tot timpul. RNG-ul hardware intenționat se afla chiar acolo, în binar. Recenzorii au confirmat existența sa și nu au confirmat niciodată că generatorul de seed-uri îl apela efectiv.
Opt ani de audituri au analizat codul corect. Nimeni nu a verificat dacă rula.