№ xlii L'Almanacco di GST · EN IT

Enrico·rubbo.li

Tech · Longevity · Mercati · Opinioni Enrico Rubboli, propr. Dubai, UAE
essay August 2, 2026 11 min

Il numero casuale da 70 milioni di dollari

Il 30 luglio 2026, qualcuno ha svuotato 1.196 indirizzi Bitcoin in 41 minuti. La prima incursione ha sottratto 1.082 BTC, circa settanta milioni di dollari al cambio di quel giorno. Entro il fine settimana, con l’arrivo di ondate successive, il conteggio era salito a circa 1.367 BTC distribuiti su oltre quattromila indirizzi.

Non c’è stato alcun coinvolgimento di malware, né alcuna truffa di phishing. Nessun dispositivo delle vittime è stato toccato, aperto o collegato a qualcosa. Le monete erano custodite su hardware wallet Coldcard, dispositivi la cui unica ragion d’essere è fare in modo che i dati segreti non abbandonino mai l’hardware. E in effetti, i dati segreti non sono mai usciti da lì. L’aggressore si è semplicemente seduto da qualche parte con un computer e li ha indovinati.

Un’affermazione del genere dovrebbe suonare impossibile. La sicurezza di Bitcoin si fonda sul presupposto che indovinare una chiave privata non sia solo difficile, ma lo sia in misura comicamente, cosmicamente ardua. L’intero sistema è progettato affinché procedere per tentativi sia l’unico attacco destinato a fallire sempre.

Ha funzionato a causa di un bug del firmware rilasciato nel marzo del 2021 e rimasto latente per cinque anni. Questo difetto non ha compromesso la crittografia, ma ha infranto qualcosa di più silenzioso e fondamentale: la casualità su cui la crittografia stessa si regge.

Per comprendere cosa sia realmente accaduto, e per quale motivo alcuni possessori di Coldcard abbiano perso tutto mentre altri, pur trovandosi nella medesima situazione, non abbiano subìto alcun danno, occorre avere chiari quattro concetti: cos’è un seed, come ne derivano le chiavi, cosa significa entropia e cosa fa effettivamente un generatore di numeri casuali. Nessuno di questi richiede competenze matematiche che vadano oltre il saper contare. Vale la pena fissarseli in mente in modo permanente, poiché questo stesso esatto fallimento si ripeterà su qualche altro dispositivo, con un logo diverso stampato sulla scatola.

Il wallet è un solo numero

Se si eliminano le app, i dispositivi e il gergo tecnico, un wallet Bitcoin si riduce a un singolo numero. Un unico numero, scelto una sola volta, compreso tra zero e 2^256.

Quel numero prende il nome di seed. Tutto il resto deriva da lì. Le dodici o ventiquattro parole mostrate dal wallet durante la configurazione non sono una password a protezione del numero; sono il numero stesso, scritto in un alfabeto più accessibile. Lo standard BIP-39 associa porzioni del numero a parole tratte da un elenco fisso di 2.048 termini, in modo che un essere umano possa copiarle su carta senza dover trascrivere 64 caratteri esadecimali. «Ripple mango vault» è semplicemente l’aspetto che assume una determinata sequenza di bit quando viene presentata a un occhio umano.

Questa è la prima nozione da interiorizzare: non c’è alcun account, nessun file, nessuna voce su un server che costituisca il wallet. Esiste solo un numero. Chiunque lo conosca possiede le monete, da qualsiasi parte del mondo, senza che vengano poste ulteriori domande. La blockchain non è in grado di distinguere tra il legittimo proprietario e qualcuno che ha indovinato il numero, poiché sulla blockchain conoscere il numero è l’esatta e unica definizione dell’identità dell’utente.

Il che solleva una domanda ovvia: se basta un numero, perché nessuno si limita a indovinarlo?

Perché 2^256 non è un numero in un senso che l’intuizione umana possa concepire. La notazione è compatta e nasconde la reale portata della cifra, perciò saliamo insieme questa scala.

Si parta da una spiaggia lunga cinque chilometri, larga cinquanta metri, profonda qualche metro. Si conti ogni granello di sabbia presente: sono circa 10^15 granelli, un milione di miliardi. Si supponga ora che il numero segreto sia un granello specifico su quella spiaggia, e che un malintenzionato disponga di un computer potentissimo, in grado di controllare mille miliardi di granelli al secondo. Quanto tempo occorrerebbe per esaminarli tutti? Circa diciassette minuti. È bene tenere a mente questo dato: i numeri che appaiono enormi per gli esseri umani sono uno scherzo per i computer.

Ora si smetta di contare i granelli e si passi agli atomi. Un singolo granello di sabbia contiene circa 10^19 atomi, il che significa che un granello ospita più atomi di quanti granelli ci siano sull’intera spiaggia. Tutti gli atomi della spiaggia sommati insieme ammontano a circa 10^34. Il numero segreto è ora un atomo, da qualche parte su quella distesa di sabbia. Stessa macchina, stessa domanda: quanto tempo ci vorrebbe? Circa trecentomila miliardi di anni, ventimila volte l’età dell’universo. Saliti di due gradini sulla scala, ci siamo già lasciati alle spalle il tempo stesso.

Allarghiamo il cerchio. Ogni atomo in una grande città, negli edifici, nelle strade, nel terreno sottostante e in ogni persona che la attraversa: all’incirca 10^39. Quanto tempo adesso? Circa due miliardi di volte l’età dell’universo. Ogni atomo del pianeta Terra, nucleo fuso compreso: circa 10^50. La domanda inizia a perdere di significato, ma la si ponga ugualmente: se si desse una copia del computer a ogni essere umano in vita e si facessero lavorare tutti gli otto miliardi in parallelo, si dovrebbero comunque attendere decine di miliardi di volte l’età dell’universo. Ogni atomo del sistema solare, di cui il Sole da solo costituisce oltre il 99 percento: circa 10^57. Un tempo ancora dieci milioni di volte più lungo.

Andiamo avanti. Ogni atomo in ogni stella di ogni galassia dell’universo conosciuto: circa 10^80. Quanto tempo per una ricerca del genere? Non c’è modo di esprimerlo onestamente in unità di misura umane. L’universo finisce, ricomincia e finisce di nuovo più volte di quanti siano i granelli sulla nostra spiaggia, prima ancora che la macchina arrivi a metà del lavoro.

Ebbene, 2^256 equivale circa a 10^77. Su questa scala, ci troviamo un gradino sotto l’intero universo, con un fattore di scarto di appena mille, che a simili grandezze rappresenta un errore di arrotondamento. Il numero di seed possibili è, a ogni fine pratico, pari al numero di atomi di un universo. Indovinare il wallet di qualcuno non equivale a cercare un ago in un pagliaio. È come sentirsi dire «sto pensando a un atomo in particolare» e avere l’intero cosmo come pagliaio. E potenziare la macchina non offre alcuna via d’uscita: anche sostituendo il nostro computer da mille miliardi di operazioni al secondo con l’intera rete di mining di Bitcoin, che è circa un miliardo di volte più veloce, la situazione non cambierebbe in modo rilevante.

Ecco perché nessuno protegge i wallet Bitcoin con firewall, dipartimenti antifrode o allarmi. Lo spazio stesso delle probabilità funge da guardia. È fondamentale trattenere questo concetto, perché l’aggressore del 30 luglio non ha sconfitto questa guardia. Ha semplicemente scoperto che, per alcuni wallet, la scala era silenziosamente crollata.

Un numero, un milione di indirizzi

Si sarà notato che il wallet genera un nuovo indirizzo ogni volta che si ricevono fondi, eppure si esegue il backup di un solo set di parole. Non si tratta di un trucco. È uno standard chiamato BIP-32, ovvero la derivazione deterministica gerarchica, e significa che il seed non è una chiave, bensì una fabbrica di chiavi.

Partendo dal seed, il wallet calcola in modo deterministico una chiave figlia dopo l’altra, creando un albero virtualmente infinito. «Deterministico» è la parola chiave: lo stesso seed produce sempre lo stesso albero, nel medesimo ordine, su qualsiasi dispositivo, per sempre. Questo è il motivo per cui è possibile far cadere il proprio hardware wallet in mare, acquistarne uno nuovo, digitare le parole e veder riapparire ogni indirizzo e ogni saldo. Non era stato memorizzato nulla da nessuna parte. Tutto è stato ricalcolato a partire da quel numero.

Si tratta di un’opera di ingegneria autenticamente elegante, ma presenta un’arma a doppio taglio. Se la derivazione deterministica implica che un solo backup recupera tutto, significa anche che una singola fuga di dati fa perdere tutto. Chiunque ottenga il seed non entra in possesso di un indirizzo, ma si impadronisce della fabbrica. Il 30 luglio, la razzia si è svolta esattamente in questo modo: l’aggressore non stava scassinando singole serrature, stava rigenerando interi alberi e raccogliendo i frutti da ogni ramo che avesse mai contenuto delle monete.

Il senso unico

Dunque il seed genera chiavi private. Ciò che mantiene al sicuro il resto del sistema è che ogni passaggio di derivazione è una funzione unidirezionale: dalla chiave privata alla chiave pubblica, dalla chiave pubblica all’indirizzo. Il calcolo in avanti è istantaneo. Il calcolo a ritroso non è semplicemente lento; con le conoscenze matematiche e l’hardware attuali, non esiste alcun modo noto per portarlo a termine prima che il sole si spenga.

Questa asimmetria è la ragione per cui Bitcoin può funzionare in pubblico. È possibile pubblicare il proprio indirizzo su un sito web senza che nessuno possa risalire a ritroso fino alla chiave che lo controlla. L’intero impianto, ogni exchange, ogni wallet, ogni nodo, si riduce a un unico presupposto: nessuno può indovinare il numero di partenza.

Si noti quale sia il vero fulcro di questo presupposto. Non riguarda la forza della crittografia o la qualità del dispositivo, bensì il modo in cui il numero è stato scelto. La crittografia garantisce che nessuno possa risalire a ritroso al numero. Non può garantire che nessuno possa arrivarci procedendo in avanti, scegliendo i numeri nello stesso modo in cui sono stati scelti in origine e verificandoli uno per uno. Prevenire questa eventualità non è compito della crittografia. È compito della casualità.

L’entropia è quanti numeri sarebbero potuti essere

Entropia è una di quelle parole che vengono sbandierate finché non perdono di significato, perciò eccone la definizione che conta: l’entropia misura quanti altri valori avrebbe potuto ugualmente assumere il segreto. Si calcola in bit. Un bit significa due possibilità. Dieci bit, 1.024. Ogni bit aggiunto raddoppia lo spazio che un malintenzionato deve esplorare.

La sottigliezza cruciale è che l’entropia è una proprietà del processo che ha scelto il numero, non del numero in sé. Un numero non ha «l’aspetto» o «l’aria» di essere casuale. Le cifre di 42, se scelte attraverso 256 lanci di moneta, sono esattamente altrettanto sicure di qualsiasi altro risultato di 256 lanci di moneta; di contro, la data di nascita del proprio cane convertita in esadecimale rimane un dato debole, a prescindere da quanto possa sembrare indecifrabile. Ciò che conta è la dimensione del bacino da cui il processo ha attinto, perché l’aggressore non attacca il numero. Attacca il processo, per poi enumerare tutto ciò che quest’ultimo avrebbe potuto produrre.

Un seed Bitcoin di 24 parole rappresenta 256 bit di entropia; un seed di 12 parole, 128. Abbiamo già salito questa scala: 256 bit corrispondono al numero di atomi in un universo citato in precedenza. Tutti i computer che l’umanità abbia mai costruito, se lasciati in funzione fino alla morte termica dell’universo, non scalfirebbero nemmeno uno spazio di tali dimensioni. Questo è il motivo per cui l’ipotesi che «qualcuno indovini il seed» viene trattata come impossibile. Non improbabile: impossibile, in ogni senso fisico del termine.

A patto che, e qui si racchiude l’intera vicenda in una sola proposizione, il seed possieda effettivamente quei 256 bit.

Il tradimento

Il compito di un hardware wallet, nel giorno della sua configurazione, è lanciare 256 monete non truccate. I microchip veri e propri lo fanno tramite un generatore hardware di numeri casuali, un circuito che raccoglie rumore fisico, fluttuazioni termiche e caos elettrico che nessuno, tantomeno il produttore, è in grado di prevedere o riprodurre. Il chip STM32 all’interno di un Coldcard è dotato esattamente di un circuito simile.

Il software, d’altro canto, utilizza spesso uno strumento diverso: un generatore di numeri pseudocasuali (PRNG). Un PRNG è una formula. Se gli si fornisce uno stato iniziale, produrrà un flusso di numeri che superano ogni test statistico di casualità. Tuttavia, fornendogli lo stesso stato di partenza, genererà il medesimo flusso, ogni volta e su qualsiasi macchina. Non si tratta di un difetto. I PRNG sono costruiti per simulazioni e videogiochi, ambiti in cui si desidera una casualità replicabile. Sono deterministici per concezione, ed è proprio per questo che non devono mai costituire la fonte di un segreto.

Nel marzo del 2021, un aggiornamento del firmware di Coldcard ha inavvertitamente confuso questi piani. Un parametro di compilazione che avrebbe dovuto abilitare il generatore hardware era stato impostato a zero, e la libreria di supporto si limitava a verificare se l’impostazione esistesse, non se fosse attiva. La generazione del seed è scivolata silenziosamente su un PRNG di ripiego, inizializzato tramite l’ID univoco del chip e i registri del suo timer, senza raccogliere alcun nuovo rumore fisico da quel momento in poi.

Si osservi l’effetto che questo ha avuto sull’entropia. L’ID del chip è un metadato di fabbrica, fisso e limitato. I registri del timer rappresentano uno stato temporale che un aggressore può restringere studiando un dispositivo in suo possesso. Secondo l’analisi del furto condotta da Galaxy Research, lo spazio dei seed possibili è crollato da 2^128 o più a circa 2^40 sul modello Mk3, e a circa 2^72 sui modelli successivi. I wallet hanno continuato a stampare splendide frasi da 24 parole che sembravano casuali come sempre. L’entropia è una proprietà del processo, e il processo era compromesso; le parole non potevano mostrarlo e nessuno se n’è reso conto.

Due alla quarantesima equivale a circa mille miliardi di possibilità. Ricordate la macchina sulla nostra spiaggia, quella che controllava mille miliardi di candidati al secondo? Ebbene, esamina 2^40 opzioni in circa un secondo. I wallet che avrebbero dovuto nascondere un atomo in un universo stavano in realtà nascondendo un granello su una spiaggia che la macchina poteva setacciare prima ancora di finire di leggere questa frase. Nemmeno 2^72 rappresenta una fortezza: per dare un’idea, la rete di mining di Bitcoin esegue un numero analogo di operazioni di hash in una manciata di secondi. L’impossibile era diventato un’operazione su scala industriale.

Inoltre, l’attacco poteva essere condotto interamente offline, ed è questo il dettaglio che dovrebbe davvero inquietare. L’aggressore non ha mai avuto bisogno di toccare un Coldcard. Ha replicato il processo compromesso: enumerare gli stati plausibili del chip, eseguire la stessa formula del PRNG, derivare gli indirizzi di ogni seed candidato e verificarli sulla blockchain pubblica. La blockchain, essendo per l’appunto pubblica, ha funzionato come un oracolo gratuito che ha risposto alla domanda «questa ipotesi contiene fondi?» un miliardo di volte, senza mai far scattare alcun allarme. Cinque anni di saldi accumulati, ispezionabili in tutta calma, finché il 30 luglio qualcuno non ha portato a termine la ricerca.

Chi non ha perso nulla

Questa è la parte che ritengo più istruttiva. Sparsi tra le vittime c’erano possessori di Coldcard con gli stessi modelli, lo stesso firmware fallato e lo stesso processo difettoso, i quali non hanno perso assolutamente nulla.

Alcuni di loro avevano impostato una passphrase BIP-39, ovvero una parola o una frase aggiuntiva di propria invenzione che viene combinata con le parole del seed per derivare un albero di chiavi differente. La passphrase non risiedeva mai sul dispositivo, perciò ricostruire il seed dell’hardware non era sufficiente; la perfetta replica del PRNG compromesso da parte dell’aggressore produceva un wallet completamente vuoto.

Altri, durante la configurazione, avevano indicato al dispositivo di integrare dei lanci di dado, tirando fisicamente un dado 50 o più volte e inserendone i risultati. Cinquanta lanci non truccati contribuiscono con circa 129 bit di entropia provenienti da una fonte che nessun bug del firmware può raggiungere: la fisica di un cubo che rotola tra le mani. I loro seed attingevano da un bacino che l’aggressore non poteva enumerare, poiché non poteva replicare ciò che era avvenuto nei loro salotti.

Nessuno dei due gruppi era a conoscenza del bug. Non ne sapevano di firmware più di chiunque altro. Si erano semplicemente rifiutati, per principio, di permettere che un singolo componente fosse l’unico ostacolo tra i loro risparmi e il resto del mondo. Il dispositivo diceva «fidati di me, genero un’ottima casualità», e loro avevano risposto «probabilmente è vero, ma aggiungerò comunque la mia». Cinque anni dopo, quell’unica abitudine ha rappresentato la differenza totale tra il tutto e il niente.

Esiste un nome per tutto questo: difesa in profondità. È il concetto meno appariscente nell’ambito della sicurezza, ma è quello che continua a funzionare quando le soluzioni più affascinanti falliscono.

Cosa fare all’atto pratico

Per chi possiede un Coldcard, la parte pratica è breve. Coinkite ha rilasciato un firmware di emergenza il 31 luglio, ma la patch non può riparare un seed preesistente; un numero estratto da un bacino avvelenato resta avvelenato. Se il seed è stato generato su un firmware difettoso, occorre generarne uno nuovo su un dispositivo aggiornato, idealmente tramite lanci di dado, e trasferirvi le proprie monete. Spostare il vecchio seed su un nuovo dispositivo non cambia le cose.

Per tutti gli altri, l’insegnamento va ben oltre le vicende di una singola azienda canadese:

Un backup delle parole del seed è un backup del numero, e il numero è tutto. È bene trattare quelle parole di conseguenza.

Quando si configura un qualsiasi wallet, è opportuno aggiungere entropia che il produttore non possa controllare: lanci di dado se il dispositivo li supporta, e una passphrase da conservare a mente o su un foglio di carta separato. Non si tratta di paranoia; significa rifiutarsi di rendere l’affidabilità di un singolo chip un singolo punto di vulnerabilità.

E a qualsiasi dispositivo che generi segreti, bisognerebbe porre la domanda a cui si riduce l’intero episodio: da dove proviene la mia casualità? Raramente si otterrà una risposta soddisfacente. Non importa. Lo scopo della domanda è ricordarsi di agire come se un giorno la risposta potesse essere: «da una formula che un aggressore è in grado di replicare».

Nei giorni successivi al furto, si è levato un coro familiare: questo dimostra che l’autocustodia è troppo pericolosa, meglio detenere Bitcoin tramite un ETF e lasciare che se ne preoccupino i professionisti. Ritengo che l’episodio dimostri qualcosa di molto più vicino all’esatto opposto. Le persone che hanno trattato l’autocustodia come una pratica attiva, sovrapponendo la propria entropia a quella del dispositivo, hanno superato indenni un bug critico vecchio di cinque anni. La causa del disastro non è stata «la gestione autonoma delle proprie chiavi da parte dei privati». Il problema è stato fidarsi ciecamente della parola di un singolo fornitore, e questa stessa vulnerabilità è presente anche in ogni depositario terzo; semplicemente, quando cede, lo fa su scala più ampia, più tardi e con le monete intestate a qualcun altro.

Settanta milioni di dollari non sono svaniti perché la matematica ha fallito. La matematica ha retto perfettamente. Sono svaniti perché, da qualche parte in una configurazione di compilazione, un flag era a zero anziché a uno, e per cinque anni ogni dispositivo coinvolto ha risposto alla domanda più importante della crittografia, «scegli un numero che nessuno possa indovinare», con un numero che qualcuno, invece, poteva scoprire.

La gabbia ha tenuto. La serratura era robusta. La chiave, però, era stata forgiata su un calco che il fabbro aveva lasciato sul bancone.


Fonti: L’analisi di Galaxy Research via The Hacker News, il reportage di CoinDesk sulla razzia e il dibattito sull’autocustodia che ne è scaturito.