
Quando la casualità fallisce: il bug di entropia di Coldcard e che cosa cambiano due dispositivi
Alla fine di luglio 2026 alcuni attaccanti hanno iniziato a prosciugare bitcoin da migliaia di hardware wallet che non avevano fatto nulla di sbagliato. I proprietari avevano seguito i consigli. Avevano comprato un dispositivo dedicato alla firma, tenuto il seed offline, non l'avevano mai digitato su un sito. Nulla di tutto ciò è servito, perché il seed che quei dispositivi generavano non era mai stato casuale quanto sembrava.
Circa 1.816 BTC hanno lasciato oltre 5.200 indirizzi in quattro ondate. È diventato il più grande exploit di hardware wallet dell'anno.
Questo articolo non è un giro d'onore. Il bug in questione è di quelli che potevano capitare a quasi qualunque wallet, incluso il nostro, e la domanda interessante non è chi l'abbia rilasciato, ma che cosa fa l'architettura di un wallet quando accade.
Che cosa è andato storto davvero
Un solo commit, nel marzo 2021.
Il progetto di Coldcard prevedeva che i seed fossero generati da un generatore hardware di numeri casuali: un chip dedicato che ricava entropia da processi fisici. È il modo giusto di farlo. Ma una modifica nel firmware 4.0.1 fece passare la generazione dei seed attraverso un generatore pseudocasuale software inizializzato con costanti pubbliche scritte nel codice.
Un PRNG è deterministico per definizione. A parità di valore iniziale, produce sempre la stessa sequenza. Quindi un seed generato così non è un numero che nessuno può indovinare: è un numero preso da un insieme abbastanza piccolo da poter essere percorso, con costanti che erano da sempre nel firmware pubblicato.
I dispositivi hanno continuato a comportarsi normalmente. Mostravano ventiquattro parole, le si annotava, derivavano indirizzi corretti, firmavano transazioni valide. Non esiste in alcun wallet una schermata che ti dica quanta entropia sia entrata nel tuo seed. Ogni utente colpito aveva un dispositivo identico, all'aspetto e nel comportamento, a uno funzionante, e per un massimo di cinque anni.
La finestra va dal firmware 4.0.1 del marzo 2021 al 4.1.9 del luglio 2026. Aggiornare il firmware sistemava la generazione da lì in avanti e non faceva assolutamente nulla per i seed già creati: quelle chiavi erano già deboli, e nessun aggiornamento può aggiungere retroattivamente casualità a un numero già scritto su una scheda nella cassaforte di qualcuno. Gli utenti colpiti hanno dovuto generare un seed nuovo e spostare le monete.
Perché la casualità debole è una perdita totale e silenziosa
Vale la pena essere precisi sul perché questa classe di bug sia così grave, perché non è intuitivo.
Un seed BIP-39 da 24 parole rappresenta 256 bit di entropia. Indovinarne uno non è soltanto difficile: è inimmaginabile. Non esiste calcolatore, presente o futuro, che percorra quello spazio a forza bruta. È la fondazione su cui poggia l'intero modello dell'autocustodia: la tua chiave è al sicuro perché è una fra un numero incomprensibilmente grande di possibilità.
Quella garanzia non è una proprietà delle parole. È una proprietà del processo che le ha scelte. Ventiquattro parole tratte da un generatore debole sono identiche a ventiquattro tratte da uno forte. Superano ogni checksum, producono indirizzi validi e si ripristinano alla perfezione su qualsiasi wallet. L'unica differenza è che anche qualcun altro può arrivarci.
Il fallimento è dunque invisibile dall'interno, ed è completo. Non «un attaccante potrebbe derubarti se commetti un errore»: non c'è errore da evitare, né link di phishing da rifiutare, né finestra di conferma da leggere con attenzione. Il denaro è prelevabile quando fa comodo all'attaccante, e il primo segnale che qualcosa non andava è che non c'è più.
Che cosa cambiano due dispositivi

Ecco la parte che conta sul piano architettonico, e voglio enunciarla con precisione anziché con termini da marketing.
SSP è un multisig 2-di-2. I fondi vivono a un indirizzo controllato da due chiavi indipendenti, generate su due dispositivi indipendenti — una nell'estensione del browser, una nell'app mobile SSP Key — e una transazione richiede entrambe le firme. L'impianto due-di-due è l'intera base del wallet.
Ora applica lo scenario Coldcard a questa struttura. Supponi che la generazione dei seed dell'estensione avesse lo stesso difetto e che un attaccante possa derivare completamente la tua chiave del browser.
Non può comunque spendere nulla. Ha una delle due firme richieste. L'indirizzo non rilascia fondi per una sola chiave, di chiunque sia e comunque l'abbia ottenuta. Per muovere le tue monete dovrebbe inoltre violare, in modo indipendente e simultaneo, la chiave sul tuo telefono: un'altra applicazione, un altro sistema operativo, un'altra fonte di entropia, generata in un altro momento.
Questa è la differenza strutturale. In un wallet a chiave singola, un seed debole è una perdita totale. In un 2-di-2, un seed debole è un problema serio che non è, di per sé, una perdita.
L'avvertenza, detta apertamente
Sarebbe facile fermarsi qui e lasciarti concludere che SSP ne è immune. Non lo è, e fingere il contrario durante l'incidente di qualcun altro sarebbe esattamente il momento sbagliato per farlo.
Entrambe le applicazioni SSP usano la stessa implementazione di BIP-39 — @scure/bip39, fissata alla stessa versione in tutt'e due. Un difetto in quella libreria colpirebbe entrambe le chiavi. L'indipendenza che SSP ti dà è reale ma specifica: due seed distinti, generati in momenti diversi su dispositivi diversi, che attingono entropia da fonti diverse del sistema operativo — la Web Crypto del browser da un lato, il CSPRNG della piattaforma mobile dall'altro. Non è l'indipendenza di due basi di codice del tutto estranee.
Ciò che questo compra è protezione dal modo di fallimento che a Coldcard è davvero accaduto: un errore di implementazione specifico di un dispositivo nel modo in cui un prodotto generava i suoi seed. Non proteggerebbe da un difetto nella primitiva crittografica condivisa sottostante.
È un'affermazione sensibilmente più debole di «a noi non può succedere», ed è quella vera. Chi ti dice che il suo wallet è categoricamente immune a un guasto di entropia ti sta parlando del suo marketing, non della sua architettura.
Che cosa portarsi via
Se hai una Coldcard di quella finestra di firmware, l'unica ipotesi sicura è che il seed sia compromesso, che i fondi si siano mossi o no. Generane uno nuovo su firmware corretto e migra. Un dispositivo non ancora svuotato non è un dispositivo sicuro.
Se usi un qualsiasi wallet a chiave singola, questo è il rischio che ti porti addosso, e conviene esserne consapevoli più che angosciarsene. Gli hardware wallet restano di gran lunga migliori delle alternative per la maggior parte delle persone. La lezione non è che siano cattivi; è che una chiave sola è un punto di guasto singolo, e ogni parte della storia di quella chiave — compreso il momento in cui è nata, anni fa, in un firmware che non hai letto — fa parte del tuo modello di minaccia.
E in generale, preferisci architetture in cui una cosa che va storta non basta. È il principio per cui SSP richiede due dispositivi, per cui alcune operazioni pretendono di rifirmare anche quando sei già autenticato, e per cui che cosa ferma davvero una transazione è una domanda da porre a qualunque wallet a cui affidi qualcosa. La risposta non dovrebbe mai essere «un segreto, e la speranza che sia stato generato per bene».
Per un confronto più ampio delle opzioni e di ciò da cui ciascuna protegge davvero, confrontare le opzioni di autocustodia affronta i compromessi.


