Il numero casuale da 70 milioni di dollari
Il 30 luglio 2026 qualcuno ha svuotato 1.196 indirizzi Bitcoin in 41 minuti. La prima ondata ha portato via 1.082 BTC, circa settanta milioni di dollari al prezzo di quel giorno. Nel fine settimana, con le ondate successive, il conto era salito a circa 1.367 BTC sparsi su più di quattromila indirizzi.
Niente malware. Nessuno è caduto in una trappola di phishing. Nemmeno uno dei dispositivi delle vittime è stato toccato, aperto o collegato a qualcosa. Le monete stavano su hardware wallet Coldcard, dispositivi che esistono per un solo motivo: perché il materiale segreto non esca mai dal metallo. E infatti dal metallo non è mai uscito. L’attaccante era da qualche parte davanti a un computer, e quel numero l’ha indovinato.
Una frase del genere dovrebbe suonare impossibile. La sicurezza di Bitcoin poggia sul fatto che indovinare una chiave privata non è solo difficile: è difficile in modo comico, cosmico. L’intero sistema è progettato perché tirare a indovinare sia l’unico attacco che non può funzionare mai.
Ha funzionato per colpa di un bug nel firmware, uscito a marzo 2021 e rimasto lì, dormiente, per cinque anni. Il bug non ha rotto la crittografia: ha rotto qualcosa di più silenzioso e di più fondamentale, la casualità su cui la crittografia è costruita.
Per capire cos’è successo davvero, e perché alcuni proprietari di Coldcard hanno perso tutto mentre altri, a un passo da loro, non hanno perso niente, servono quattro idee: cos’è un seed, come se ne derivano le chiavi, cosa significa entropia e cosa fa davvero un generatore di numeri casuali. Nessuna richiede matematica più complicata del saper contare. E vale la pena tenersele in testa per sempre, perché questo identico fallimento si ripeterà, su qualche altro dispositivo, con qualche altro logo sulla scatola.
Il tuo wallet è un numero
Togli le app, i dispositivi e il gergo, e un wallet Bitcoin è un numero. Uno solo, scelto una volta, compreso tra zero e 2^256.
Quel numero si chiama seed. Tutto il resto ne deriva. Le dodici o ventiquattro parole che il wallet ti ha mostrato alla prima configurazione non sono una password che protegge il numero: sono il numero, scritto in un alfabeto più amichevole. Lo standard BIP-39 fa corrispondere pezzi del numero a parole prese da una lista fissa di 2.048, così che un essere umano possa copiarselo su carta senza trascrivere 64 caratteri esadecimali. «Ripple mango vault» è soltanto l’aspetto che assume una certa sequenza di bit quando la si veste per occhi umani.
Ed è la prima cosa da metabolizzare: non esiste un account, un file, una riga su un server che sia il tuo wallet. Esiste un numero. Chi conosce il numero possiede le monete, da qualunque punto della Terra, senza che nessuno faccia altre domande. La blockchain non può distinguere te da chi ha indovinato il tuo numero, perché sulla blockchain conoscere il numero è, per definizione, essere te.
Sorge allora la domanda ovvia: se basta un numero, perché nessuno lo indovina e basta?
Perché 2^256 non è un numero che l’intuizione riesca a gestire, in nessun senso della parola. La notazione è compatta e nasconde tutto, quindi saliamo insieme questa scala.
Parti da una spiaggia lunga cinque chilometri, larga cinquanta metri, profonda qualche metro. Conta ogni granello di sabbia: circa 10^15 granelli, un milione di miliardi. Ora supponi che il tuo numero segreto sia un granello preciso di quella spiaggia, e che l’attaccante si procuri una macchina seria, capace di controllare mille miliardi di granelli al secondo. Quanto ci mette a passarli tutti? Circa diciassette minuti. Tienilo a mente: numeri enormi per noi umani, per un computer sono uno spuntino.
Ora smetti di contare granelli e comincia a contare atomi. Un singolo granello di sabbia contiene circa 10^19 atomi, il che significa che un granello da solo contiene più atomi di quanti granelli contenga l’intera spiaggia. Tutti gli atomi della spiaggia messi insieme: circa 10^34. Il tuo numero adesso è un atomo, da qualche parte sulla spiaggia. Stessa macchina, stessa domanda: quanto ci vuole? Circa trecentomila miliardi di anni, ventimila volte l’età dell’universo. Due pioli più su e ci siamo già lasciati alle spalle il tempo stesso.
Allarga il cerchio. Ogni atomo di una grande città, edifici, strade, il terreno sotto di essi, ogni persona che la attraversa: all’incirca 10^39. Quanto ci vuole adesso? Attorno a due miliardi di volte l’età dell’universo. Ogni atomo del pianeta Terra, nucleo fuso compreso: circa 10^50. La domanda comincia a perdere senso, ma facciamola lo stesso: dai una copia della macchina a ogni essere umano vivo, fai lavorare in parallelo tutti gli otto miliardi, e aspetti comunque decine di miliardi di volte l’età dell’universo. Ogni atomo del sistema solare, di cui il Sole da solo costituisce più del 99 per cento: circa 10^57. Ancora dieci milioni di volte più a lungo.
Continua a salire. Ogni atomo di ogni stella di ogni galassia dell’universo conosciuto: circa 10^80. Quanto ci vuole a setacciarlo? Non c’è un modo onesto di dirlo in unità umane. L’universo finisce, ricomincia e finisce di nuovo più volte di quanti granelli abbia la nostra spiaggia, prima che la macchina arrivi a metà.
E 2^256 fa circa 10^77. Su questa scala è un piolo sotto l’universo intero, un misero fattore mille, che a queste grandezze è un errore di arrotondamento. Il numero dei seed possibili è, a ogni effetto pratico, il numero di atomi di un universo. Indovinare il wallet di qualcuno non è cercare un ago in un pagliaio: è sentirsi dire «sto pensando a un atomo in particolare» e avere l’intero cosmo come pagliaio. E potenziare la macchina non ti salva: sostituisci il nostro computer da mille miliardi di tentativi al secondo con l’intera rete di mining di Bitcoin, all’incirca un miliardo di volte più veloce, e non hai spostato praticamente niente.
Ecco perché nessuno fa la guardia ai wallet Bitcoin: niente firewall, niente ufficio antifrode, niente allarmi. La guardia è lo spazio di ricerca stesso. Tieni stretto questo pensiero, perché l’attaccante del 30 luglio non ha sconfitto questa guardia: ha scoperto che, per alcuni wallet, la scala era crollata in silenzio.
Un numero, un milione di indirizzi
Forse hai notato che il tuo wallet produce un indirizzo nuovo ogni volta che ricevi fondi, eppure il backup che hai fatto è di un solo insieme di parole. Non è un trucco. È uno standard che si chiama BIP-32, derivazione gerarchica deterministica, e significa che il tuo seed non è una chiave ma una fabbrica di chiavi.
Dal seed, il wallet calcola in modo deterministico una chiave figlia dopo l’altra, un albero di chiavi praticamente infinito. Deterministico è la parola che conta: lo stesso seed produce sempre lo stesso albero, nello stesso ordine, su qualunque dispositivo, per sempre. È per questo che puoi far cadere il tuo hardware wallet in mare, comprarne uno nuovo, digitare le tue parole e veder ricomparire ogni indirizzo e ogni saldo. Non c’era niente salvato da nessuna parte: è stato tutto ricalcolato a partire dal numero.
È un pezzo di ingegneria davvero elegante, e ha un lato tagliente. Se la derivazione deterministica significa che un solo backup recupera tutto, significa anche che una sola fuga di informazioni perde tutto. Chi ottiene il seed non ottiene un indirizzo: ottiene la fabbrica. Ed è esattamente questa la forma che ha avuto la razzia del 30 luglio: l’attaccante non scassinava serrature una per una, rigenerava interi alberi e raccoglieva ogni ramo che avesse mai contenuto monete.
La strada a senso unico
Dunque il seed genera chiavi private. A tenere al sicuro il resto del sistema è il fatto che ogni passo di derivazione è una funzione unidirezionale: dalla chiave privata alla chiave pubblica, dalla chiave pubblica all’indirizzo. Il calcolo in avanti è istantaneo. Quello all’indietro non è semplicemente lento: con la matematica e l’hardware di oggi non esiste alcun modo noto di farlo prima che il Sole si spenga.
Questa asimmetria è il motivo per cui Bitcoin può funzionare alla luce del sole. Puoi pubblicare il tuo indirizzo sul sito, e nessuno può ripercorrerlo a ritroso fino alla chiave che lo controlla. L’intero edificio, ogni exchange, ogni wallet, ogni nodo, si regge su un’unica assunzione: nessuno può indovinare il tuo numero di partenza.
E qui nota su cosa verte davvero l’assunzione: non sulla robustezza della cifratura né sulla qualità del dispositivo, ma sul modo in cui il numero è stato scelto. La crittografia garantisce che nessuno possa risalire a ritroso fino al tuo numero. Non può garantire che nessuno ci arrivi in avanti, scegliendo numeri nello stesso identico modo in cui li hai scelti tu e provandoli uno per uno. Impedirlo non è compito della crittografia. È compito della casualità.
L’entropia misura quanti altri numeri potevano uscire
Entropia è una di quelle parole che si sventolano tanto finché non significano più niente, quindi ecco la versione che conta: l’entropia misura quanti altri valori il tuo segreto avrebbe potuto assumere con la stessa probabilità. Si conta in bit. Un bit vuol dire due possibilità. Dieci bit, 1.024. Ogni bit in più raddoppia lo spazio che chi vuole indovinare deve setacciare.
La sottigliezza cruciale è che l’entropia è una proprietà del processo che ha scelto il numero, non del numero in sé. Un numero non «sembra casuale» né «sa di casuale». Un 42 uscito da 256 lanci di moneta è esattamente sicuro quanto qualsiasi altro esito di 256 lanci, e il compleanno del tuo cane convertito in esadecimale è esattamente altrettanto debole, per quanto ingarbugliato possa apparire. Quello che conta è la dimensione del bacino da cui il tuo processo ha pescato, perché l’attaccante non attacca il numero. Attacca il processo, e poi enumera tutto quello che quel processo poteva produrre.
Un seed Bitcoin da 24 parole rappresenta 256 bit di entropia; uno da 12 parole, 128. Questa scala l’hai già salita: 256 bit è il numero di atomi di un universo di cui parlavamo poco fa. Tutti i computer che l’umanità abbia mai costruito, lasciati lavorare fino alla morte termica dell’universo, non scalfiscono uno spazio di quelle dimensioni. Ecco perché «qualcuno indovina il tuo seed» viene trattato come impossibile. Non improbabile: impossibile, in ogni senso fisico del termine.
A patto che, ed ecco l’intera storia racchiusa in un inciso, il seed quei 256 bit li abbia davvero.
Il tradimento
Il giorno della configurazione, il mestiere di un hardware wallet è lanciare 256 monete non truccate. I chip veri lo fanno con un generatore hardware di numeri casuali, un circuito che raccoglie rumore fisico, fluttuazioni termiche e caos elettrico che nessuno, produttore compreso, può prevedere o riprodurre. Il chip STM32 dentro una Coldcard ha esattamente un circuito del genere.
Il software, invece, usa spesso uno strumento diverso: un generatore di numeri pseudocasuali. Un PRNG è una formula. Gli dai uno stato di partenza e produce un flusso di numeri che passa ogni test statistico di casualità. Ma dagli lo stesso stato di partenza, e produrrà lo stesso flusso, ogni volta, su qualunque macchina. Non è un difetto: i PRNG nascono per le simulazioni e per i giochi, contesti in cui vuoi una casualità che si possa rigiocare da capo. Sono deterministici per progetto, ed è esattamente per questo che non devono mai essere la sorgente di un segreto.
A marzo 2021, una versione del firmware Coldcard ha incrociato quei fili senza che nessuno se ne accorgesse. Un’impostazione di build che avrebbe dovuto attivare il generatore hardware era a zero, e la libreria di supporto controllava soltanto che l’impostazione esistesse, non che fosse accesa. La generazione del seed è scivolata in silenzio su un PRNG di riserva, inizializzato con l’ID univoco del chip e con i registri del suo timer, e da lì in poi senza raccogliere più un grammo di rumore fisico fresco.
Guarda cosa ha fatto all’entropia. L’ID del chip è un metadato di fabbrica, fisso e vincolato. I registri del timer sono uno stato temporale che un attaccante, con un dispositivo in mano, può circoscrivere a piacere. Secondo l’analisi del furto condotta da Galaxy Research, lo spazio dei seed possibili è crollato da 2^128 o più a circa 2^40 sulla Mk3, e a circa 2^72 sui modelli successivi. E intanto i wallet continuavano a stampare bellissime frasi da 24 parole, casuali all’apparenza come sempre. L’entropia è una proprietà del processo, e il processo era rotto; le parole non potevano mostrarlo, e nessuno poteva vederlo.
Due alla quarantesima fa circa mille miliardi di possibilità. Ricordi la macchina della nostra spiaggia, quella che controlla mille miliardi di candidati al secondo? Attraversa tutto 2^40 in circa un secondo. I wallet che avrebbero dovuto nascondere un atomo in un universo nascondevano un granello su una spiaggia che la macchina poteva setacciare prima che tu finisca di leggere questa frase. E nemmeno 2^72 è una fortezza: per farsi un’idea, la rete di mining di Bitcoin esegue altrettante operazioni di hash in una manciata di secondi. L’impossibile era diventato semplicemente industriale.
E l’attacco si poteva condurre interamente offline, che è il dettaglio che dovrebbe davvero toglierti il sonno. L’attaccante non ha mai avuto bisogno di toccare una Coldcard: ha rigiocato il processo rotto, enumerando gli stati plausibili del chip, facendo girare la stessa formula del PRNG, derivando gli indirizzi di ogni seed candidato e confrontandoli con la blockchain pubblica. La blockchain, essendo pubblica, ha funzionato da oracolo gratuito, capace di rispondere alla domanda «questo tentativo contiene soldi?» un miliardo di volte senza mai far scattare un allarme. Cinque anni di saldi accumulati, consultabili con tutta calma, e il 30 luglio qualcuno ha portato a termine la ricerca.
Quelli che non hanno perso niente
Ed eccoci alla parte che trovo più istruttiva. Sparsi tra le vittime c’erano proprietari di Coldcard con gli stessi modelli, lo stesso firmware rotto, lo stesso processo difettoso, che non hanno perso assolutamente niente.
Alcuni avevano impostato una passphrase BIP-39, una parola o una frase in più di propria invenzione che viene combinata con le parole del seed per derivare un albero di chiavi diverso. La passphrase non è mai vissuta sul dispositivo, quindi ricostruire il seed del dispositivo non bastava: la replica perfetta del PRNG rotto consegnava all’attaccante un wallet vuoto.
Altri, durante la configurazione, avevano chiesto al dispositivo di mescolare nel calcolo dei lanci di dado, tirandone fisicamente uno cinquanta o più volte e inserendo i risultati. Cinquanta lanci di un dado onesto aggiungono circa 129 bit di entropia da una sorgente che nessun bug del firmware può raggiungere: la fisica di un cubo che rotola tra le tue mani. I loro seed pescavano da un bacino che l’attaccante non poteva enumerare, perché il salotto di casa loro non si può rigiocare.
Nessuno dei due gruppi sapeva del bug. Non erano più esperti di firmware degli altri. Si erano semplicemente rifiutati, per principio, di lasciare che un singolo componente fosse l’unica cosa a separare i loro risparmi dal resto del mondo. Il dispositivo diceva «fidati di me, genero buona casualità», e loro rispondevano «probabilmente è vero, ma la mia ce l’aggiungo comunque». Cinque anni dopo, quella sola abitudine ha fatto la differenza tra tutto e niente.
Questa cosa ha un nome: difesa in profondità. È l’idea meno affascinante di tutta la sicurezza, ed è quella che continua a funzionare quando quelle affascinanti falliscono.
Cosa fare, in pratica
Se possiedi una Coldcard, la parte pratica è breve. Coinkite ha rilasciato un firmware di emergenza il 31 luglio, ma la patch non può riparare un seed esistente: un numero pescato da un pozzo avvelenato resta avvelenato. Se il tuo seed è stato generato su un firmware difettoso, generane uno nuovo su un dispositivo aggiornato, idealmente con i lanci di dado, e spostaci le monete. Trasferire il vecchio seed su un dispositivo nuovo non cambia niente.
Per tutti gli altri, le lezioni valgono ben oltre una singola azienda canadese:
Un backup delle parole del seed è un backup del numero, e il numero è tutto. Tratta le parole di conseguenza.
Quando configuri un wallet, qualunque wallet, aggiungi entropia che il produttore non può controllare: lanci di dado se il dispositivo li supporta, e una passphrase che tieni a memoria o su un foglio separato. Non è paranoia: è rifiutarsi di fare dell’onestà di un singolo chip l’unico punto di cedimento tra i tuoi risparmi e il mondo.
E a qualunque dispositivo che generi segreti per conto tuo, poni la domanda a cui tutta questa vicenda si riduce: da dove viene la mia casualità? Raramente otterrai una risposta soddisfacente. Va bene così. Il senso della domanda è ricordarti di comportarti come se la risposta, un giorno, potesse essere «da una formula che un attaccante può rigiocare».
Nei giorni successivi al furto è partito il solito coro: ecco la prova che l’autocustodia è troppo pericolosa, meglio detenere Bitcoin tramite un ETF e lasciare che se ne preoccupino i professionisti. Io credo che questa vicenda dimostri qualcosa di molto vicino al contrario. Chi ha trattato l’autocustodia come una pratica attiva, stratificando la propria entropia sopra quella del dispositivo, ha attraversato indenne un bug critico vecchio di cinque anni. A fallire non è stato il modello «singole persone che custodiscono le proprie chiavi»: a fallire è stato il fidarsi ciecamente della parola di un unico fornitore, e questa stessa debolezza esiste in qualunque custode. Solo che lì fallisce più in grande, più tardi, e con le tue monete intestate a qualcun altro.
Settanta milioni di dollari non sono spariti perché la matematica ha ceduto. La matematica ha tenuto alla perfezione. Sono spariti perché da qualche parte, in una configurazione di build, un flag era a zero invece che a uno, e per cinque anni ogni dispositivo colpito ha risposto alla domanda più importante della crittografia, «scegli un numero che nessuno possa indovinare», con un numero che qualcuno poteva.
La gabbia ha tenuto. La serratura era robusta. Ma la chiave era stata tagliata su un calco che il fabbro aveva lasciato sul bancone.
Fonti: l’analisi di Galaxy Research via The Hacker News, il resoconto di CoinDesk sulla razzia e il dibattito sull’autocustodia che ne è seguito.