Fermata #140 – L’importanza della casualità
Lo scorso 23 novembre, come riportato da Atlas21, un utente ha subito un’importante perdita in bitcoin a seguito di un attacco informatico che ha comportato il pagamento di una commissione di transazione sproporzionatamente alta.
La transazione, registrata sulla blockchain di Bitcoin, ha spostato 139.4 bitcoin, pari a circa 5,2 milioni di dollari. Di questi, 83.65 bitcoin, equivalenti a 3.1 milioni di dollari, sono stati destinati alle commissioni. L’evento ha rappresentato il pagamento di commissione più alto mai registrato nella storia di Bitcoin.
Il protagonista dell’episodio è poi comparso su Twitter con l’handle 83_5BTC per condividere la propria esperienza e dichiarando di essere stato vittima di un attacco informatico. Dopo aver trasferito 139 bitcoin in un nuovo cold wallet, ha raccontato, i fondi sono stati rapidamente spostati da qualcun altro verso un altro indirizzo. Di tutti i bitcoin, 55.77 sono finiti nelle mani degli aggressori, mentre il resto è stato utilizzato per la commissione.
Qui puoi ascoltare un estratto gratuito di Bitcoin Train Podcast!
Per accedere alla completa versione narrata dell’articolo ed entrare nel gruppo Telegram dedicato alla newsletter, abbonati a Bitcoin Train. Puoi farlo sia pagando in bitcoin (clicca qui) che in euro (clicca qui).
Sono stati i miei bitcoin a pagare la commissione elevata. Ho creato un nuovo cold wallet, vi ho trasferito 139 bitcoin e questi sono stati immediatamente inviati su un altro wallet.
Posso solo immaginare che qualcuno stesse eseguendo uno script su quel wallet e che lo script avesse uno strano calcolo delle commissioni.
Il ricercatore Bitcoin Mononaut ha ipotizzato che l’attacco possa essere stato facilitato dalla bassa entropia del cold wallet, indicando un livello di casualità insufficiente nella generazione delle chiavi.
La spiegazione più probabile è che il wallet sia stato generato da una cattiva entropia: forse un wallet le cui parole sono state scelte a mente, o un numero insufficiente di lanci di dadi/di monete, o un Prng1 insicuro.
Dopo aver guadagnato l’accesso al wallet, gli hacker avrebbero potuto implementare uno script automatizzato per trasferire i fondi. Questo script sarebbe stato programmato per eseguire una transazione che includeva una commissione insolitamente elevata. L’obiettivo degli hacker sarebbe stato quello di trasferire rapidamente i fondi dal wallet compromesso al loro indirizzo, prima che l’utente potesse notare l’attacco e intervenire.
Mononaut ha anche menzionato l’utilizzo di Replace-By-Fee2 (RBF). Questo protocollo consente agli utenti di sostituire una transazione non confermata con un’altra che include una commissione più alta, in modo da incentivare i miner a confermare prima la nuova transazione. Gli hacker potrebbero aver sfruttato questa funzionalità per assicurarsi che la loro transazione venisse elaborata rapidamente, massimizzando così le possibilità di successo del furto prima che l’utente potesse reagire.
L’importanza dell’entropia
Lo spiacevole episodio è significativo per ricordare quanto sia importante il livello di entropia con cui viene generato un wallet. In parole più semplici: il suo grado di casualità.
La casualità del seed
Come spiegato nel dettaglio nella fermata #51 un wallet Bitcoin non contiene davvero bitcoin: un wallet non è altro che un portachiavi, ossia un software che gestisce gli indirizzi, le chiavi private (e quelle pubbliche) necessarie per firmare le transazioni.
Il nucleo di un wallet Bitcoin è costituito dal seed, un numero esadecimale come il seguente:
a0e04873eb1c9ad484d19f8cf6060df80f8b0acc5c711e9c686143fc35ad6d2dfae4055a1c75468744f6b17ce754f8908b8110162541041794282b6f0e5c8a4
Questo numero, per facilitare la comprensione, è convertito in una lista di solitamente 12 o 24 parole – selezionate dall’elenco predefinito BIP-39 – chiamata seed-phrase.
La seed-phrase serve per derivare tutte le chiavi gestite dal wallet. La lista di 2048 parole implica che i diversi wallet generabili dal protocollo Bitcoin non siano infiniti, ma comunque molti di più di quanto l’uomo avrà mai bisogno: come menzionato più volte, infatti, Bitcoin può supportare 2^256 chiavi private, più o meno il numero di atomi presenti nell’universo conosciuto (che si pensa siano tra i 2^240 e i 2^280).
Va da sé che creare una seed-phrase di 12 parole in modo da formare, per esempio, una frase di senso compiuto, è un pessimo modo per generare un wallet. Esistono software specializzati per individuare le combinazioni meno casuali e, se qualcuno manda dei fondi alle chiavi private generate da quelle combinazioni, rubare i bitcoin. Verosimilmente, questo è quanto successo nel caso analizzato a inizio articolo.
Quando si dice che una seed-phrase è caratterizzata da un’alta entropia, quindi, significa che la combinazione delle parole da cui è costituita è estremamente casuale e, di conseguenza, molto difficile da riprodurre. Si tratta del proverbiale ago nel pagliaio.
Un alto livello di casualità è fondamentale per la sicurezza di un wallet Bitcoin, poiché rende estremamente improbabile che qualcuno possa indovinare o duplicare il seed.
Mai generare un wallet a mente
Per questo non è saggio generare un wallet scegliendo le parole a mente.
La mente umana, pur essendo straordinariamente complessa e creativa, non è efficiente come un generatore di numeri casuali (Rng) nel creare vera casualità. Studi in ambito psicologico e informatico hanno dimostrato che gli esseri umani tendono a seguire schemi prevedibili, anche quando cercano di essere casuali. Questa prevedibilità può rendere i seed generati manualmente meno sicuri rispetto a quelli creati da un RNG adeguato.
Questo è il motivo per cui tutti i produttori di wallet più popolari, software come hardware, si affidano a generatori di numeri casuali anziché lasciar scegliere la seed-phrase all’utente.
Pseudo Random Number Generator.
Replace by Fee: meccanismo implementato in Bitcoin che consente a un mittente di sostituire una transazione non confermata in blockchain con un’altra transazione che include una commissione più alta. Questo approccio è stato introdotto per risolvere il problema delle transazioni bloccate nella mempool (la coda delle transazioni in attesa di essere confermate) a causa di commissioni troppo basse.