Introduzione
Continuiamo la nostra panoramica sul funzionamento di Bitcoin; ricordiamo che Bitcoin con la B maiuscola fa riferimento all’intero sistema e bitcoin con la b minuscola indica la moneta proprietaria del sistema.
Dopo aver trattato nella parte precedente la rete, i suoi nodi con le varie funzioni e alcuni principi base della crittografia, continuiamo la discussione parlando di chiavi, indirizzi e wallet.
Chiavi e indirizzi
Vediamo adesso il modo in cui le funzionalità crittografiche appena introdotte vengono sfruttate per calcolare gli indirizzi Bitcoin e le coppie di chiavi, private e pubbliche, ad essi associate.
Innanzitutto spieghiamo che cos’è un indirizzo Bitcoin. Detto in parole semplici, ce lo possiamo immaginare come una sorta di “IBAN” dove si possono ricevere e inviare i bitcoin. Detto in termini più tecnici, è un hash dove si possono bloccare, attraverso una firma digitale, dei bitcoin, che potranno essere spesi successivamente grazie al possesso della chiave privata associata.
Gli step necessari per generare un indirizzo Bitcoin, sono i seguenti:
- l’esecuzione di un generatore puro di casualità per ottenere una chiave privata di 256 bit, sequenza puramente casuale di 0 e 1 (processo non riproducibile);
- la cifratura della chiave privata, attraverso l’algoritmo a crittografia asimmetrica basato sulle curve ellittiche, per determinare l’unica chiave pubblica ad essa associata (funzione non invertibile);
- il calcolo del doppio hash della chiave pubblica, attraverso gli algoritmi SHA-256 e RIPDEM-160 eseguiti in sequenza, al fine di ottenere l’unica stringa alfanumerica di 160 bit associatavi (funzioni non invertibili);
- la codifica di questa stringa alfanumerica, attraverso la funzione Base58Check, per ricavarne un’altra più compatta e senza caratteri ambigui all’occhio umano. Infatti 0 (zero), O (o maiuscola), l (elle minuscola), I (i maiuscola} non sono mai presenti in questa stringa, che rappresenta l’unico indirizzo associato al doppio hash della chiave pubblica (funzione non invertibile).
Osservazioni sulla sicurezza della chiave privata
La relazione che sussiste fra la chiave privata e l’indirizzo è tale per cui solo chi possiede la chiave privata può spostare i fondi da quell’indirizzo. Più precisamente, possedere la chiave privata di un indirizzo Bitcoin nel quale risiedono delle monete equivale a possedere quelle monete (proprietà e spendibilità); questo perché siamo gli unici in grado di dimostrare che la firma digitale che blocca i fondi in quello hash l’abbiamo generata noi, appunto con la nostra chiave privata. Ne deriva che, se la chiave privata non viene custodita a dovere, i fondi presenti su quell’indirizzo sono a rischio: chiunque possieda la chiave privata può spostare i fondi presenti.
Da quando detto sopra viene spontaneo porsi la seguente domanda: “Ma se due entità distinte generano per caso la stessa chiave privata, cosa succede?”. La risposta è semplice: “Entrambi generano la stessa chiave pubblica, lo stesso indirizzo, e quindi sono capaci di spendere gli stessi soldi!”.
Come si risolve questo problema? Semplicemente utilizzando un generatore di casualità puro, ovvero non pseudo-casuale (algoritmo che genera numeri random ma che in determinate condizioni ripropone la stessa sequenza). Con un tale generatore puro le possibili combinazioni di chiavi private sul sistema Bitcoin sono 2256, approssimativamente 1077 in cifre decimali, un numero incomprensibile per noi umani: basti pensare che la stima degli atomi dell’universo visibile è 1080. Ne deriva quindi che la probabilità di calcolare entrambi la stessa chiave privata è pressoché nulla, a patto di utilizzare un sistema di entropia puro.
Funzionalità abilitate dalla crittografia
Grazie all’utilizzo della crittografia, Bitcoin riesce a implementare in maniera elegante una miriade di funzionalità. Ad esempio:
- la creazione degli indirizzi del sistema — dove risiederanno i bitcoin spendibili — associati 1:1 con le rispettive chiavi private;
- l’attestazione della proprietà dei fondi bloccati su questi indirizzi; ne è il proprietario, solo chi conosce la chiave privata che ha generato la firma digitale con cui questi fondi sono bloccati;
- il controllo su questi fondi; può spenderli solo chi conosce la chiave privata che ha generato la firma digitale con cui questi fondi sono bloccati;
- la sicurezza matematica che questi fondi non saranno rubabili fintanto che la chiave privata sarà protetta; inviolabilità della chiave privata a meno di falle sulla sicurezza nella custodia della stessa.
Wallet
Introdotti i concetti di chiavi e indirizzi, possiamo comprendere cosa sia effettivamente un wallet Bitcoin.
Iniziamo dicendo che il nome di questo strumento (= “portafogli”, “portamonete”) è completamente fuorviante, in quanto esso non contiene monete — come vedremo più avanti i bitcoin sono tutti all’interno della blockchain sotto forma di output di transazione non spesa o UTXO — ma semplicemente coppie di chiavi, private e pubblica, e indirizzi a queste associate.
I wallet sono degli strumenti che servono per semplificare la vita nell’interazione con il sistema Bitcoin. Le loro principali funzionalità sono:
- generare una nuova tripletta {chiave privata, chiave pubblica, indirizzo} ogni qualvolta ve ne sia la necessità, eseguendo in automatico la sequenza di operazioni viste nel paragrafo precedente;
- memorizzare tutti gli indirizzi, e le coppie di chiavi a questi associati, che siano stati precedentemente generati;
- mostrare il saldo totale di tutti i bitcoin bloccati negli indirizzi che gestisce;
- creare transazioni valide per il sistema Bitcoin (vedremo più avanti cosa vuol dire);
- firmare queste transazioni per rendere spendibili i relativi bitcoin (vedremo più avanti come questo avviene).
Rimarchiamo che, in linea con quanto visto precedentemente per le chiavi private, non esiste limite al numero di indirizzi che si possono generare con un wallet. Ogni indirizzo corrisponde 1:1 con una chiave privata, e lo spazio delle chiavi private di Bitcoin è 1077.
Tipologie di wallet
Esistono svariate forme di wallet: da quella cartacea a quella digitale, da quella software a quella hardware, e la scelta di una forma piuttosto che di un’altra dipende molto dall’utilizzo e dalla dimestichezza che abbiamo con questi sistemi.
Indipendentemente da quale wallet si scelga, la cosa più importante da fare è eseguirne il backup, in quanto, se il wallet si corrompe o viene smarrito, tutti i fondi ivi contenuti sono persi per sempre; la generazione delle chiavi private del wallet è puramente casuale, per cui è impossibile recuperare i fondi in esso contenuti se non si fa un backup.
Agli albori di Bitcoin, i wallet erano tutti di tipo non deterministico o casuale, ossia non sussistevano relazioni fra le chiavi private in essi contenute. Questo implicava che il backup di questo tipo di wallet era molto oneroso, perché era necessario eseguirne uno nuovo ogni qualvolta si generava una nuova chiave, così da avere la garanzia di non perdere i fondi contenuti nel nuovo indirizzo.
Per ovviare a questo fastidio, molti utenti violavano una delle regole principali della privacy su Bitcoin: riutilizzavano lo stesso indirizzo più volte. Così facendo avevano meno chiavi private di cui fare il backup ma esponevano i loro fondi a maggiori rischi di hackeraggio.
Per risolvere questo inconveniente sono nati i wallet deterministici o seeded [1], dove ogni nuova chiave privata generata sul wallet si ricava facendo l’hash della chiave privata precedente. Si capisce quindi che tutte le chiavi private di questa tipologia di wallet sono collegate tra di loro e, per ricreare l’intera sequenza, è semplicemente necessario conoscere la prima chiave privata del wallet, detta anche master key o seed.
Al giorno d’oggi, quando creiamo un nuovo wallet, ci viene chiesto di memorizzarci un insieme di 12-24 parole generate casualmente, che altro non sono che il suo seed, ossia l’unica informazione che ci serve per ripristinare l’intero wallet: tutte le chiavi private, pubbliche e gi indirizzi ad esso associati.
Nota bene: il seed del wallet è l’informazione che consente di fare il ripristino dello stesso a fronte di qualsiasi problema, così come è l’informazione che dà pieno accesso e controllo a tutti i fondi presenti nel wallet! Va tenuto segreto e ne vanno fatti vari backup!
Digressione
Ad un lettore attento non sarà sfuggito che, nella definizione iniziale di Bitcoin, viene utilizzata sia la parola “decentralizzato” che “distribuito”, quasi come se fossero sinonimi. In realtà, questo è un errore molto comune che si riscontra in quasi tutta la narrativa sull’argomento.
Bitcoin è intrinsecamente distribuito, sia dal punto di vista topologico che dal quello dell’autorità (chi autorizza cosa).
La differenza fra una rete topologicamente decentralizzata e una distribuita è ben visibile nella figura 2.
In altre parole, la rete è strutturalmente:
- decentralizzata, se esiste un sottoinsieme di nodi collegati fra di loro in modo ridondante, i quali a loro volta costituiscono un singolo punto di collegamento per altri sottoinsiemi di elementi della rete; se un nodo “principale” va fuori uso, tutta la sottorete a questo associata rimane scollegata e non operante;
- distribuita, se esistono collegamenti ridondanti fra ogni nodo della rete (si parla di struttura rilassata o senza vincoli topologici). Con questa topologia di rete non esistono punti di fallimento evidenti perché, se un qualsiasi nodo va fuori uso, tutti gli altri elementi ad esso collegato rimangono connessi e operativi.
Lo stesso discorso può essere applicato anche al concetto di autorità: se non esiste un sottoinsieme di nodi che può imporre la propria volontà sugli altri, ma sono tutti nodi alla pari con stessi diritti e doveri, allora la rete è ad autorità distribuita.
Si rimanda ad un video di Marco Crotta, noto esperto italiano del settore, per una comprensione più approfondita di questi concetti. [2]
Conclusioni
In questo quarto articolo della serie Bitcoin abbiamo continuato a illustrare il funzionamento del sistema Bitcoin, spiegando le chiavi, gli indirizzi e i wallet. Nel prossimo pezzo ci concentreremo sulle transazioni e su come viene generata la blockchain di Bitcoin.
Riferimenti
[1] Approfondimento di Deterministic wallet da bitcoinwiki
https://en.bitcoinwiki.org/wiki/Deterministic_wallet.
[2] BlockChain Caffè, Ethereum è decentralizzato (Bitcoin no), 2022
https://www.youtube.com/watch?v=CEatlMM0QrQ.
Marco Migliorini è un ingegnere informatico con un'esperienza più che decennale nella progettazione e nello sviluppo di sistemi software basati su architettura Java EE.
Negli ultimi anni si è avvicinato al mondo delle blockchains permissionless e dell'economia di scuola austriaca, trasformando l'iniziale curiosità in una veemente passione per questi argomenti.
Dopo un periodo di intensa formazione, ha intrapreso l'attività di libero professionista nel settore blockchain/web3.
Attualmente fornisce servizi di consulenza e sviluppo di applicazioni decentralizzate basate su blockchains Ethereum e Polygon, ed eroga formazione su Bitcoin e Lightning Network.
La sua mission è contribuire alla divulgazione e all'adozione di queste tecnologie, nonché alla conoscenza delle tematiche socioeconomiche che ne rappresentano la base.
Per maggiori informazioni visitare il sito www.marcomigliorini.com