Blog
Amenințări și incidente3 august 20269 min de citit

COLDCARD hack: eroarea de entropie care a făcut seed-uri Bitcoin predictibile

O eroare COLDCARD a redus entropia seed-urilor și a expus fonduri Bitcoin. Modele afectate, cauza tehnică și pașii corecți de migrare.

La finalul lunii iulie 2026, utilizatori COLDCARD au raportat tranzacții Bitcoin pe care nu le autorizaseră. Investigația a identificat o eroare de integrare în firmware: în anumite fluxuri de generare, dispozitivul folosea un generator pseudoaleator software predictibil în locul sursei hardware de entropie. Consecința nu a fost doar teoretică — seed-uri care trebuiau să ofere aproximativ 128 de biți de securitate au ajuns într-un spațiu de căutare mult mai mic.

Dispozitivul nu trebuia furat, desfăcut sau conectat de atacator. Dacă seed-ul fusese generat cu firmware afectat, atacatorul putea încerca să reconstruiască cheia offline și să valideze candidații folosind o adresă Bitcoin publică.

Ce s-a întâmplat, pe scurt

  • Pe 29 iulie au fost observate tranzacții neautorizate din mai multe portofele asociate cu seed-uri generate de dispozitive COLDCARD.
  • Pe 30 iulie, Coinkite a publicat un advisory și a început să detalieze modelele și versiunile afectate.
  • Bitcoin Optech estima la 31 iulie pierderi de peste 1.000 BTC, avertizând că cifra era în evoluție și nu trebuia tratată drept bilanț final.
  • Până la actualizarea advisory-ului din 1 august, firmware corectat devenise disponibil pentru fiecare model și fiecare canal de release afectat.
  • Problema rămâne însă în seed-urile deja generate: instalarea firmware-ului nou corectează generarea viitoare, nu schimbă cheile existente.

Cauza tehnică: implementarea bună exista, dar fluxul ajungea în altă parte

În 2021, firmware-ul COLDCARD a mutat anumite operații criptografice către libsecp256k1 și biblioteca libNgU. Seed generation a trecut de la o funcție care citea direct generatorul hardware la ngu.random.bytes(). Din cauza modului în care simbolurile erau rezolvate în build, acest apel ajungea la fallback-ul software Yasmarang din MicroPython, inițializat cu identificatorul microcontrolerului și valori de timp.

Aceste valori pot face ieșirea să arate aleator, dar nu sunt o sursă criptografică de entropie: identificatorul este fix, iar contoarele de timp pot fi observate, estimate sau enumerate. Pentru un atacator care poate restrânge starea inițială și istoricul apelurilor, fluxul devine reproductibil.

Un hash aplicat peste o intrare slabă nu creează entropie nouă. Poate uniformiza aspectul rezultatului, dar numărul seed-urilor posibile rămâne limitat de numărul intrărilor posibile.

De ce impactul diferă între generațiile COLDCARD

Pe Mk2 și Mk3 cu firmware din seria vulnerabilă, fluxul nu adăuga o contribuție criptografică secretă înainte de generarea seed-ului. Coinkite estimează preliminar un spațiu efectiv de aproximativ 40 de biți, mult sub ținta de 128 de biți. Analiza Block arată că, în anumite ipoteze despre identificator și timing, spațiul practic poate fi și mai restrâns.

Mk4, Q și Mk5 adăugau entropie din secure elements, dar numai o parte limitată ajungea în starea generatorului software. Coinkite estimează aproximativ 72 de biți în scenariul său preliminar; Block explică faptul că operația de reseed păstra doar 32 de biți din digestul rezultat. Aceste modele sunt mai greu de atacat decât Mk2/Mk3, însă tot nu ating nivelul proiectat și sunt incluse în recomandarea de migrare.

Modele și versiuni afectate

  • Mk2 și Mk3: seed-uri generate cu firmware 4.0.1 până la 4.1.9 inclusiv.
  • Mk4 și Mk5 Standard: seed-uri generate înainte de firmware 5.6.0.
  • COLDCARD Q Standard: seed-uri generate înainte de firmware 1.5.0Q.
  • Mk4/Mk5 Edge: seed-uri generate înainte de 6.6.0X.
  • Q Edge: seed-uri generate înainte de 6.6.0QX.
  • TAPSIGNER, OPENDIME și SATSCARD nu sunt afectate de această eroare, deoarece folosesc alte baze de cod.

Contează versiunea instalată în momentul în care a fost creat secretul, nu firmware-ul de astăzi și nici data la care a fost cumpărat dispozitivul. Importarea aceluiași seed într-un alt hardware wallet nu îl face sigur: cheia rămâne derivată din aceeași entropie insuficientă.

Excepția cu zaruri și rolul passphrase-ului

Advisory-ul Coinkite delimitează o excepție: dacă utilizatorul a adăugat cel puțin 50 de aruncări corecte, independente și private ale unui zar în momentul generării seed-ului, acea contribuție furnizează singură cel puțin 128 de biți de entropie. Dacă numărul nu este cunoscut cu certitudine sau secvența nu a rămas privată, recomandarea este migrarea.

O passphrase BIP-39 puternică, unică și păstrată separat adaugă un obstacol independent. Nu este același lucru cu PIN-ul dispozitivului. O formulare scurtă, reutilizată sau ușor de ghicit nu oferă aceeași protecție, iar passphrase-ul nu repară seed-ul afectat; producătorul recomandă migrarea chiar și utilizatorilor protejați astfel.

Ce trebuie să facă un utilizator afectat

  • Nu genera un seed nou înainte de instalarea firmware-ului corect pentru modelul și canalul tău: Mk2/Mk3 4.2.0+, Mk4/Mk5 Standard 5.6.0+, Q Standard 1.5.0Q+, respectiv Edge 6.6.0X/6.6.0QX+.
  • Generează un seed complet nou pe firmware-ul corectat. Un simplu update peste dispozitivul care păstrează seed-ul vechi nu schimbă cheia.
  • Notează și verifică backup-ul, fingerprint-ul portofelului și o adresă de primire direct pe ecranul hardware wallet-ului.
  • Trimite întâi o tranzacție mică și confirmă accesul la noul portofel înainte de mutarea soldului rămas.
  • Păstrează backup-ul vechi până când întreaga migrare este confirmată, dar tratează-l ca secret compromis și nu îl introduce într-un site sau într-un calculator conectat la internet.
  • Urmează exclusiv instrucțiunile și paginile oficiale; un incident de acest tip generează rapid phishing, suport fals și firmware contrafăcut.
Graba este un risc separat. Nu muta fondurile către o adresă copiată fără verificare pe ecranul dispozitivului și nu răspunde persoanelor care îți cer seed-ul pentru a „verifica” dacă este vulnerabil.

Lecția pentru echipele care construiesc produse de securitate

Incidentul arată de ce revizuirea unei primitive criptografice nu este suficientă. Generatorul hardware corect exista în firmware, iar buildul trecea, însă traseul real al funcției de seed generation ajungea la o implementare cu aceeași semnătură și alte proprietăți. Testarea trebuie să demonstreze end-to-end ce simbol este apelat, ce sursă de entropie contribuie efectiv și dacă buildul eșuează atunci când acea sursă lipsește.

  • Introduceți teste de reachability și symbol resolution pentru căile criptografice critice, nu doar review pe fișierele care conțin implementarea dorită.
  • Folosiți fail-closed: dacă sursa hardware nu este disponibilă sau inițializarea eșuează, operația sensibilă trebuie oprită explicit.
  • Verificați cantitatea de entropie care supraviețuiește transformărilor și interfețelor; 32 de bytes la intrare nu înseamnă 256 de biți păstrați.
  • Testați upgrade-urile ca modificări de securitate, inclusiv submodulele, macro-urile de compilare și implementările fallback.
  • Pregătiți un playbook de migrare a secretelor. Unele patch-uri opresc vulnerabilitatea pentru viitor, dar nu pot revoca materialul criptografic deja creat.

COLDCARD este un exemplu rar în care un defect de integrare aparent mic a redus direct costul unui atac asupra unor active reale. Lecția generală depășește Bitcoin: dacă securitatea unui sistem depinde de imprevizibilitatea unei chei, trebuie verificat traseul complet prin care acea imprevizibilitate ajunge în cheia finală.

#COLDCARD#Bitcoin#hardware wallet#seed phrase#entropie#RNG#incident response#awareness