Rapporto completo sull'incidente · 16 fonti · Anzen Lab

Quattro righe di codice.
Oltre 1.596 BTC persi.

Nel marzo 2021 una build del firmware COLDCARD ha smesso di chiedere numeri casuali al proprio chip hardware e ha fatto elaborare i numeri da un normale software. Nessuno se ne è accorto per cinque anni. Nel luglio 2026 gli attaccanti hanno fatto i calcoli e hanno iniziato a svuotare i wallet.

Il costo dell'impostazione
5 anni
la vulnerabilità è rimasta in codice interamente pubblico, inosservata1
1.596+ BTC
confermati come rubati da circa 7.300 indirizzi, e il totale continua a salire7
41 min
il singolo prelievo più grande: 1.083 BTC, circa 70 milioni di dollari all'epoca9
1 su mille miliardi
le probabilità che un attaccante doveva battere su un Mk3. Il design prevedeva una probabilità su un numero di 78 cifre1
Cosa è andato storto

Un controllo di sicurezza che era presente e non ha fatto nulla

01

Ogni difesa poggia su un numero che nessuno può indovinare

Un hardware wallet svolge diverse funzioni. Ti mostra ciò che stai effettivamente firmando invece di chiederti di fidarti dello schermo di un computer infetto, e custodisce la tua chiave all'interno di un chip progettato per resistere all'apertura fisica. Ognuna di queste difese presuppone che il numero da cui deriva la tua chiave non potesse essere indovinato. Se fosse stato possibile, un attaccante non avrebbe bisogno di superare alcuna di esse. Il pool da cui viene estratta una frase di 24 parole contiene circa un numero per ogni mille atomi nell'universo osservabile. Un pool di queste dimensioni non può essere esploso per forza bruta. Questo è l'intero modello di sicurezza.

Dettagli tecnici

12 parole contengono 128 bit di entropia, 24 ne contengono 256, più un checksum derivato dall'hash SHA-256 di tale entropia. BIP-39 converte il risultato nella chiave master BIP-32.

Dettagli tecnici

12 parole contengono 128 bit di entropia, 24 ne contengono 256, più un checksum derivato dall'hash SHA-256 di tale entropia. BIP-39 converte il risultato nella chiave master BIP-32.

02

COLDCARD ha smesso di attingere da quell'insieme

Una modifica al firmware del 2021 ha interrotto silenziosamente le richieste del wallet al chip di entropia dedicato per quel numero, affidando invece il calcolo a un normale software. Vista nel suo insieme, la vulnerabilità si riassume così:

Non si tratta di una sicurezza ridotta di due terzi. Ogni bit raddoppia il lavoro, quindi 88 bit in meno riducono il lavoro di un fattore pari a 2⁸⁸. Un trilione è un numero grande per una persona e piccolo per chi noleggia macchine ad alte prestazioni per elaborarlo.

Dettagli tecnici

La generazione del seed è passata da ckcc.rng_bytes() a ngu.random.bytes(). Coinkite stima circa 40 bit di spazio di ricerca rimanente su Mk3 e circa 72 su Mk4/Mk5/Q, a fronte di un obiettivo di 128 bit. Un'analisi indipendente condotta da Block arriva allo stesso ordine di grandezza (inferiore a 2⁴⁰·⁷ e a 2⁷૩·³) e individua condizioni più ristrette in cui lo spazio rimanente è notevolmente inferiore.2

Dettagli tecnici

La generazione del seed è passata da ckcc.rng_bytes() a ngu.random.bytes(). Coinkite stima circa 40 bit di spazio di ricerca rimanente su Mk3 e circa 72 su Mk4/Mk5/Q, a fronte di un obiettivo di 128 bit. Un'analisi indipendente condotta da Block arriva allo stesso ordine di grandezza (inferiore a 2⁴⁰·⁷ e a 2⁷૩·³) e individua condizioni più ristrette in cui lo spazio rimanente è notevolmente inferiore.2

Da quale insieme avrebbero dovuto essere estratte le 24 parole
115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,936
Da quale insieme COLDCARD le ha effettivamente estratte
1,099,511,627,776
03

Perché il software non può essere casuale

Pensa a cosa rende imprevedibile il lancio di una moneta. La forza del lancio, la gravità, una corrente d'aria da un condizionatore, lievi tremori nel terreno. Decine di fattori che puoi nominare e decine che non puoi. Nessuno può calcolarne la traiettoria, quindi nessuno può prevedere il risultato. Il software funziona in modo diverso. Esegue una formula fissa su una manciata di valori iniziali e produce una risposta fissa. Nel nostro caso quei valori erano il numero di serie del chip e il tempo in cui il dispositivo era rimasto acceso. Un attaccante che impara la ricetta e gli ingredienti ricalcola l'output invece di indovinarlo.

Dettagli tecnici

Con l'RNG hardware disabilitato, rng_get() si è collegato al PRNG Yasmarang di MicroPython, inizializzato a partire da uno stato non segreto (UID, SysTick, RTC), senza raccogliere alcuna nuova entropia successivamente, consentendo quindi ai candidati di essere enumerati offline. Coinkite non considera a rischio a causa di questo problema i seed mescolati con 50 o più lanci equi e privati: 50 × log₂6 ≈ 129 bit.3

Dettagli tecnici

Con l'RNG hardware disabilitato, rng_get() si è collegato al PRNG Yasmarang di MicroPython, inizializzato a partire da uno stato non segreto (UID, SysTick, RTC), senza raccogliere alcuna nuova entropia successivamente, consentendo quindi ai candidati di essere enumerati offline. Coinkite non considera a rischio a causa di questo problema i seed mescolati con 50 o più lanci equi e privati: 50 × log₂6 ≈ 129 bit.3

04

E il controllo ideato per prevenirlo ha posto la domanda sbagliata

Nella build era presente un controllo, scritto specificamente per impedire il rilascio di firmware privi del generatore hardware. Verificava l'esistenza di un'impostazione, non se tale impostazione fosse attiva. L'impostazione esisteva ed era disattivata. Il controllo è rimasto in silenzio, la build non ha segnalato errori e il firmware è stato rilasciato.

Dettagli tecnici

#ifndef verifica esclusivamente se una macro è definita. La configurazione della scheda definiva MICROPY_HW_ENABLE_RNG come 0, risultando quindi definita e disabilitata, per cui l'istruzione #error non è mai scattata e il linker ha associato rng_get() al fallback software.3

Dettagli tecnici

#ifndef verifica esclusivamente se una macro è definita. La configurazione della scheda definiva MICROPY_HW_ENABLE_RNG come 0, risultando quindi definita e disabilitata, per cui l'istruzione #error non è mai scattata e il linker ha associato rng_get() al fallback software.3

Il difetto, citato direttamente dal codice sorgente.3

05

Nulla lasciava presagire il problema per cinque anni

Una frase di recupero debole è identica a una forte. Ventiquattro parole comuni, il checksum corretto, un dispositivo che si comporta normalmente. Nulla ti avvisa sullo schermo e la build non genera alcun errore. Il codice sorgente è stato pubblico per tutto il tempo. Leggerlo richiedeva comunque che qualcuno aprisse quel file specifico.

Dettagli tecnici

La lunghezza dell'output, l'assenza di zeri e la non ripetitività risultano valide su un PRNG debole, quindi i normali test preliminari non avrebbero potuto rilevarlo.

Dettagli tecnici

La lunghezza dell'output, l'assenza di zeri e la non ripetitività risultano valide su un PRNG debole, quindi i normali test preliminari non avrebbero potuto rilevarlo.

06

Poi qualcuno ha fatto i calcoli

Non hanno mai toccato un singolo dispositivo. Hanno generato le frasi probabili sulle proprie macchine, calcolato gli indirizzi Bitcoin associati a ciascuna di esse e verificato tali indirizzi sulla blockchain pubblica. Ogni indirizzo con un saldo attivo è stato svuotato. Un wallet rimasto spento in un cassetto dal 2022 era vulnerabile esattamente quanto uno utilizzato quotidianamente.

Dettagli tecnici

I candidati vengono derivati offline tramite BIP-39/BIP-32; solo la verifica finale del saldo interagisce con la rete, non lasciando alcun segnale preventivo sul lato della vittima.3

Dettagli tecnici

I candidati vengono derivati offline tramite BIP-39/BIP-32; solo la verifica finale del saldo interagisce con la rete, non lasciando alcun segnale preventivo sul lato della vittima.3

Questa pagina non è una celebrazione.

Coinkite ha rivelato la vulnerabilità, pubblicato un rapporto tecnico e rilasciato una correzione. I ricercatori esterni hanno potuto ricostruire l'accaduto perché COLDCARD è open source.

Un avvertimento sulle stime: descrivono quanta attività di tentativi un attaccante deve affrontare secondo le ipotesi attuali, non un cronometro. Nessuno può dirvi quanto tempo ci vorrebbe per violare un determinato wallet.2

Se possiedi un COLDCARD

Leggi questo prima di qualsiasi altra cosa

Ciò che devi fare dipende dal dispositivo che stavi utilizzando quando la frase di recupero è stata creata per la prima volta, non da quello che possiedi oggi.

Dai per scontato che questo stia ancora accadendo. Le frasi sono state rese vulnerabili nel corso del 2021 e il metodo è ora pubblico, quindi chiunque può eseguire la stessa ricerca. Non esiste alcuna patch che risolva il problema dall'esterno e non c'è alcun motivo per cui un attaccante debba fermarsi. Se sei interessato, l'unica ipotesi sicura è che il tempo sia l'unica cosa che ti separa da loro.

Mk2 e Mk3: sposta subito le tue monete

Il range interessato va dalla versione firmware 4.0.1 alla 4.1.9. La versione 4.2.0 corregge la generazione delle nuove frasi, ma nessun aggiornamento può aggiungere casualità a una frase già esistente. Crea un nuovo wallet su un dispositivo di cui ti fidi e trasferisci i fondi.1

Mk4 e Mk5: verifica la versione del firmware

Se la frase è stata creata su un firmware precedente alla versione 5.6.0 (o 6.6.0X sulle build Edge), aggiorna il dispositivo, crea un wallet completamente nuovo con il firmware aggiornato e poi sposta i tuoi fondi. L'aggiornamento da solo non ripara la vecchia frase.1

Q: stesso problema, la soglia è 1.5.0Q

Aggiorna alla versione 1.5.0Q o successiva, oppure 6.6.0QX per le build Edge, crea un nuovo wallet, annota e testa il backup, invia una piccola transazione di prova e poi sposta il resto.1

L'aggiornamento del firmware del COLDCARD corregge una frase di recupero già esistente?

Come posso scoprire con quale firmware è stata creata la mia frase di recupero COLDCARD?

Come posso verificare se il mio indirizzo è stato coinvolto?

I dadi o una passphrase proteggono la frase di recupero di un COLDCARD?

L'avviso di Coinkite copre tutti i COLDCARD interessati?

Avviso tecnico ufficiale di CoinkitePassa a un nuovo wallet su un dispositivo di cui ti fidi già e invia una piccola transazione di prova prima di migrare tutti i fondi. Conserva le prove pubbliche (ID delle transazioni, indirizzi, timestamp) e non rivelare mai alcun segreto. Chiunque si offra di recuperare i tuoi fondi rappresenta un secondo furto in corso, e un servizio del genere non esiste. La scelta del prossimo hardware può attendere finché le tue monete non saranno al sicuro.
E se possiedi un OneKey

Nessun dispositivo OneKey è interessato

Nemmeno un modello tra quelli che abbiamo mai prodotto. Il nostro firmware non contiene alcuna dipendenza da libngu, Coinkite, COLDCARD o CKCC, quindi il percorso di codice che ha generato il problema non è presente e puoi verificarlo tu stesso nei nostri repository. Sull'hardware attuale la chiave deriva dal generatore di numeri casuali reali integrato in un elemento sicuro certificato, mai dal software sul processore principale. Questa sostituzione è esattamente ciò che ha causato il guasto.

Non interessati
OneKey Pro
OneKey Classic 1S
OneKey Classic 1S Pure
OneKey Touch
OneKey Classic
OneKey Mini

Non ci siamo affidati solo alla fiducia. Quando la notizia è emersa, Anzen Lab ha tracciato la nostra generazione di numeri casuali dall'inizio alla fine (da dove provengono, cosa li richiama e le impostazioni di build che determinano quale versione raggiunge il tuo dispositivo) e ha pubblicato i file esatti che sono stati controllati.12

Leggi la nuova verifica di Anzen Lab
La domanda che ti stai ponendo

Questo sarebbe potuto accadere a un OneKey?

Questo problema richiedeva che tre condizioni distinte si verificassero contemporaneamente. Su un OneKey nessuna di esse si verifica e puoi verificarle tutte e tre tu stesso.

Da dove proviene la nostra

Quindi, da dove arriva la casualità di OneKey?

Generata all'interno di un chip certificato EAL 6+

Le chiavi vengono create e conservate all'interno di un chip dedicato e resistente alle manomissioni, anziché nel processore per usi generali che gestisce tutto il resto. EAL 6+ è il livello di garanzia utilizzato per le carte di pagamento e d'identità.

Una casualità che sorveglia se stessa

Quel chip genera casualità da rumore fisico reale e testa continuamente il proprio output. Se la casualità inizia a comportarsi in modo anomalo, il chip se ne accorge invece di continuare silenziosamente a funzionare.

Abbiamo ricontrollato il nostro sistema

Dopo la notizia su COLDCARD, Anzen Lab ha tracciato la generazione dei nostri numeri casuali dall'inizio alla fine (da dove provengono, cosa li richiama effettivamente e le impostazioni di build che determinano quale versione finisce sul tuo dispositivo) e ha pubblicato i file esatti che sono stati esaminati.11

OneKey Pro's EAL 6+ certified secure element
EAL 6+ Badge
Ogni transazione, protetta da chip certificati EAL 6+
Dove viene generata l'entropia
Secure element
THD89
Livello di garanzia
Certificato EAL 6+
Fonte di entropia
TRNG hardware, con autotest
Output certificato secondo
BSI AIS 20 / 31
Nuova verifica dopo l'incidente
Anzen Lab, codice sorgente pubblicato
Come è fatto OneKey e chi lo controlla

Quattro controlli su ogni OneKey, e nessuno di essi si fida degli altri tre

Ognuno di questi elementi può lasciarsi sfuggire qualcosa. Il punto è che tutti e quattro dovrebbero fallire sullo stesso dettaglio. COLDCARD non aveva una simile rete di protezione: un'impostazione di compilazione non verificata è bastata.

01

Codice sorgente aperto che puoi verificare realmente

Il nostro firmware e le nostre app sono pubblici su GitHub e le nostre build sono riproducibili, il che significa che puoi ricompilare il codice in autonomia e confermare che produca esattamente il software in esecuzione sul tuo dispositivo. Questo è il passaggio che individua un problema di tipo "codice corretto, versione errata".

OneKey su GitHub
02
SlowMist

Verifiche esterne messe agli atti

La società di sicurezza SlowMist ci sottopone a audit e pubblica i report. Valutazioni separate coprono OneKey Pro, il Classic 1S e il nostro SDK. Le nostre pratiche di sicurezza sono certificate secondo la norma ISO/IEC 27001 e le linee Pro e Classic 1S sono certificate contro lo standard EN 18031 da un organismo designato dall'Unione Europea. Tutto viene pubblicato, nulla è frutto di autovalutazione.13

Leggi la sintesi di audit di SlowMist
03

Un team pagato per violare i nostri prodotti

Anzen Lab è il nostro team di sicurezza interno composto da ingegneri specializzati in sicurezza hardware, firmware e delle applicazioni, che collabora con un gruppo di ricercatori esterni a rotazione. Il loro compito è violare gli hardware wallet, inclusi i nostri, prima che qualsiasi prodotto venga spedito. Quando è scoppiata questa notizia, hanno riesaminato la generazione di casualità di OneKey dall'inizio alla fine e hanno pubblicato esattamente quali file sono stati verificati.11

Leggi l'analisi di Anzen Lab
04

Paghiamo estranei per trovare i nostri errori

Chiunque può segnalarci una vulnerabilità in privato, tramite il nostro programma pubblico su BugRap o direttamente all'indirizzo [email protected], ricevendo un compenso. La gravità determina il pagamento, valutato su base CVSS. L'obiettivo principale è rendere la segnalazione a noi più conveniente rispetto alla vendita.15

OneKey su BugRap
entro.tools · Realizzato dal nostro fondatore

Testa il wallet che hai in mano

entro.tools è uno strumento gratuito e open source che legge i numeri casuali reali emessi da un hardware wallet ed esegue su di essi i test statistici standard di integrità, direttamente nel tuo browser, tramite USB, senza caricare nulla da nessuna parte e senza richiedere alcun aggiornamento del firmware.

Funziona sia su Trezor e KeepKey che sui nostri dispositivi, consentendoti di confrontarli fianco a fianco anziché affidarti alle affermazioni di un unico produttore.
Modalità di esecuzione
Nel browser, tramite WebUSB
Test applicati
FIPS 140-2, NIST SP 800-22 / 90B
I tuoi dati
Non lasciano mai la pagina
Aggiornamento firmware
Non richiesto
Controllo dell'entropia

Esegue test di integrità FIPS 140-2, NIST SP 800-22 e SP 800-90B localmente tramite WebUSB (su desktop con Chrome o Edge). Il dispositivo richiede di esportare l'entropia, un set di numeri casuali appena generati, senza mai toccare la tua frase di recupero.16

Il test universale di Maurer richiede almeno 387.840 bit; al di sotto il report lo segnala come saltato invece di ometterlo in silenzio.16

Quali wallet possono essere verificati

La possibilità per un estraneo di leggere i numeri casuali grezzi di un dispositivo. Questa è una dimensione molto specifica. Vedi la nota sottostante.

OneKey
Verificabile autonomamente
Tutti i modelli, firmware stock16
Trezor
Verificabile autonomamente
Tutti i modelli, protocollo di comunicazione condiviso16
KeepKey
Verificabile autonomamente
Famiglia di protocolli Trezor16
Ledger
Fidati del produttore
Elemento sicuro chiuso; nessun comando host espone numeri casuali grezzi16
BitBox02
Fidati del produttore
La richiesta di numeri casuali del protocollo è stata rimossa dal produttore16
Blockstream Jade
Fidati del produttore
L'host può solo aggiungere entropia; non vi è alcun modo per leggere nuovamente la sorgente16
COLDCARD
Fidati del produttore
Dispone di USB, ma il suo protocollo non contiene alcun comando per l'entropia16
Keystone
Fidati del produttore
Isolato per progettazione (air-gapped); l'USB trasporta esclusivamente informazioni sul dispositivo e aggiornamenti firmware16
"Non verificabile" e "insicuro" sono affermazioni diverse. Gli elementi sicuri chiusi seguono il proprio percorso di certificazione. Un risultato positivo dimostra solo che oggi non emergono difetti statistici. Non può provare l'imprevedibilità crittografica e non dice nulla sulla casualità utilizzata il giorno in cui è stato creato il tuo wallet.
Altri dubbi

Le domande che questa vicenda solleva per tutti gli altri

OneKey è interessato dal problema di entropia di COLDCARD?

Quali hardware wallet sono interessati dal problema di entropia di COLDCARD?

Posso testare la casualità del mio wallet?

Come si stabilisce se ci si può fidare di un hardware wallet?

Una sicurezza verificabile, non una sicurezza da accettare per fede.

Open source e riproducibili, controllati da esperti esterni, testati dal nostro laboratorio e premiati in caso di vulnerabilità. Questi sono i dispositivi al centro del dibattito.

Cold Storage Weeks
Fino a $50 in Bitcoin con ogni dispositivo, fino al 17 agosto.

Riferimenti

Fonti riportate di seguito, consultate il 6 agosto 2026. L'avviso e il rapporto tecnico di Coinkite aprono l'elenco, seguiti da analisi indipendenti a livello di codice sorgente e analisi on-chain. Le stime delle perdite continuano a essere riviste al rialzo: Galaxy Research ha confermato 1,596 BTC il 4 agosto, stimando perdite sospette vicine a 2.055 BTC.