Prima
di iniziare, una premessa: questa serie di articoli ha lo scopo di
informare su cos’è e come è fatto il Bitcoin, in modo che se ne
possa parlare con maggiore consapevolezza. Chi decide di trattare i
Bitcoin o strumenti analoghi lo fa a proprio rischio se ne assume la
responsabilità.
Questa
volta vado a fondo nei meccanismi informatici di Bitcoin per capire
su cosa poggia la sua sicurezza, visto che l’ideatore (Satoshi
Nakamoto) non voleva basarsi sulla fiducia verso un intermediario che
facesse da garante.
Nel
primo articolo un lettore ha commentato sarcasticamente, quasi come
se parlasse di fantascienza, che per essere veramente sicuro, ci
vorrebbe un software automodificante in grado di ripararsi e
correggere ogni modifica. Senza saperlo c’è andato molto vicino.
Qui
siamo in presenza di un sistema che è in grado di rigettare
qualsiasi operazione fatta da una sua parte modificata per non
rispettare le regole, con il limite che la parte modificata non
superi il 50% del totale. Attenzione, ho usato volutamente la parola
“sistema” e non “software”.
Procediamo
per gradi per comprendere a fondo quest’affermazione e come si
realizza tutto ciò.
Chiarisco
perché ho usato la parola “sistema” prendendone
la definizione da
Wikipedia: “Un insieme di elementi interconnessi tra di loro o con
l’ambiente esterno tramite reciproche relazioni, ma che si comporta
come un tutt’uno, secondo proprie regole generali”.
Bitcoin
è realizzato da un sistema, non da un software. Dei software che
girano su dei computer sono gli elementi che costituiscono il
sistema. Bitcoin non è il risultato delle operazioni svolte dai
singoli software ma il risultato delle interazioni di tutti questi
software. Questi elementi per interagire devono parlare una sorta di
stessa “lingua”, quello che viene chiamato protocollo, che altro
non è che un insieme di regole prestabilite.
Alla
base di Bitcoin c’è un tipo particolare di sistema che ha due
caratteristiche fondamentali: è un sistema distribuito e in
particolare è una rete peer to peer (P2P). L’aggettivo distribuito
sta a indicare che gli elementi sono interconnessi su rete
informatica che usano per comunicare. Le reti P2P hanno la
caratteristica che tutti gli elementi (chiamati nodi) hanno lo stesso
ruolo, tutti contribuiscono al risultato, nessuno è indispensabile.
Prestate particolare attenzione a quest’ultima affermazione, i nodi
possono venire a mancare quasi tutti senza compromettere il
funzionamento della rete P2P.
Bitcoin
è una rete P2P di nodi che si controllano a vicenda, verificano
ognuno le operazioni dell’altro. Le operazioni vengono considerate
buone (per operazioni successive) solo quando la maggioranza dei nodi
le ha validate. Qui si intuisce la questione del 50%. Per
alterare un’operazione già validata in passato è necessario che
la modifica sia validata da più del 50% dei nodi, solo così tutti i
nodi la accetteranno scartando la vecchia.
Come
vedremo poi, il discorso è un po’ più articolato, ma il risultato
è analogo.
Ora
abbiamo anche gli elementi per dire qual è la chiave della sicurezza
del sistema di Bitcoin: la distribuzione. Il sistema è tanto più
sicuro quanto più i nodi della rete p2p sono uniformemente
distribuiti. In altre parole i nodi devono essere molti, sparsi per
tutto il mondo, essere controllati da soggetti diversi che non hanno
interessi comuni se non quello di far funzionare la rete così com’è.
Tanto più si verificano queste condizioni tanto più sarà difficile
per un soggetto malintenzionato prendere il controllo di più della
metà dei nodi per modificarne il comportamento.
Fin
qui le definizioni generali, ora torniamo al lavoro di Satoshi
Nakamoto.
Com’è
rappresentato un Bitcoin nella memoria del sistema? Tramite tutta la
sua storia di passaggi da un portafoglio ad un altro (per ora
tralascio l’origine). Ad ogni passaggio c’è una firma digitale
che garantisce che la moneta sia stata spesa dal legittimo
proprietario e che l’informazione non venga alterata in un momento
successivo. Non do i dettagli di come funziona la firma digitale,
prendete queste affermazioni per buone.
Quando
il legittimo proprietario di un bitcoin vuole fare una transazione,
aggiunge all’elenco chi è il prossimo proprietario, ci pone la
propria firma digitale, e comunica la nuova transazione a tutti i
nodi della rete che ne verificano la correttezza. È evidente che per
fare queste verifiche tutti i nodi devono conoscere tutte le
transazioni fatte dalla nascita di Bitcoin.
Questo
meccanismo garantisce che ognuno possa spendere solo i propri
bitcoin, ma come si fa a impedire che qualcuno li spenda due volte
generando due transazioni a partire dalla stessa? Ci vuole qualcosa
che garantisca che una transazione è stata fatta prima dell’altra
in modo da rifiutare la seconda.
Tutte
le transazioni sono impacchettate in quelli che vengono chiamati
blocchi. Questi blocchi sono collegati in una sequenza temporale
garantita da una prova di lavoro che deve essere svolta per poter
“chiudere” il blocco e iniziare a lavorare al successivo. La
prova di lavoro è semplicemente un calcolo che richiede molto tempo
per essere fatto, in media 10 minuti, indipendentemente dalla
velocità del calcolatore.
Una
transazione non è valida finché non è stato “chiuso” il blocco
che la contiene, e il blocco accettato da un certo numero di altri
nodi della rete.
Se
un nodo disonesto vuole cambiare una transazione già validata, deve
rifare la prova di lavoro del blocco che la contiene, rifare la prova
di lavoro per ognuno dei blocchi chiusi successivamente e chiudere un
nuovo blocco prima che lo faccia qualcun altro. Può essere sicuro di
riuscire a fare tutto ciò solo se controlla più della metà della
capacità di calcolo dell’intera rete.
Un’osservazione:
anche controllando più del 50% della capacità di calcolo, un
malintenzionato non può fare qualsiasi genere di alterazione. Ad
esempio non riuscirà mai a spendere i soldi di qualcun altro perché
non potrà mai falsificare la firma digitale del legittimo
proprietario. Le transazioni devono essere sempre formalmente
corrette, altrimenti gli altri nodi non le accetteranno mai. L’unica
operazione che è possibile fare è cancellare delle transazioni, ad
esempio per spendere una seconda volta il proprio denaro.
Vediamo
un po’ più in dettaglio. Ogni blocco contiene una specie
d’impronta digitale (valore hash) del blocco precedente, in modo
che se questo viene alterato l’impronta non corrisponda più. Oltre
ad un elenco di transazioni, nel blocco c’è anche il risultato
della prova di lavoro a dimostrazione che il lavoro è stato fatto.
Si crea così una sequenza di blocchi che viene chiamata “block
chain”.
Questa
catena di blocchi rappresenta il registro di tutte le transazioni
avvenute dalla nascita di Bitcoin stesso. Ogni nodo della rete lavora
a un nuovo blocco raccogliendo le transazioni e cercando di
“chiuderlo” svolgendo la prova di lavoro. Quando la prova di
lavoro è terminata, il blocco viene passato a tutti gli altri nodi e
si inizia a lavorare ad un nuovo.
Visto
che ogni nodo procede per conto suo, potrebbe succedere che compaiano
delle biforcazioni in questa catena ma, tramite opportuni
accorgimenti, le biforcazioni vengono poi riassorbite. Il punto
chiave è che, in presenza di più catene, predomina quella più
lunga. È per questo che il malintenzionato oltre a rifare il lavoro
deve chiudere un nuovo blocco prima che lo faccia qualcun altro.
La
prova di lavoro è una specie di enigma crittografico calcolato in
base al contenuto del blocco stesso, per cui se viene alterato anche
la soluzione all’enigma cambia. Inoltre il grado di difficoltà
della prova viene continuamente aggiustato in modo da seguire la
capacità computazione totale della rete e in modo che il tempo medio
per la chiusura di un blocco rimanga intorno ai 10 minuti.
La
novità del lavoro di Satoshi Nakamoto è questa appena illustrata.
Garantire la sequenzialità delle transazioni tramite delle vere e
proprie prove di lavoro che richiedono un tempo considerevole per
essere svolte.
Sono
già andato fin troppo a fondo nei dettagli implementativi, concludo
con alcune considerazioni. Ho già detto che la sicurezza di Bitcoin
si bassa sulla presenza di molti nodi indipendenti sparsi per la
rete, i nodi svolgono questi calcoli molto complessi di cui ho appena
parlato, ma a questo punto perché qualcuno dovrebbe mettere a
disposizione della rete di Bitcoin un computer, consumando risorse di
calcolo ed energia elettrica? Si è ricorso ad un incentivo basato su
un meccanismo di premiazione. Ad ogni nuovo blocco sono associati dei
nuovi bitcoin, appena coniati, che vengono dati a chi è riuscito a
“chiudere” il blocco. Per analogia al mondo dei metalli preziosi,
quest’attività è stata battezzata con il nome “mining”.
L’errore
che molti commettono la prima volta che sentono parlare di mining è
di pensare che questi computer facciano dei conti per generare nuova
moneta. Falso, semplicemente fanno tutti calcoli che servono al
sistema di garanzie su cui si basa Bitcoin, la nuova moneta è solo
una parte del premio che gli viene assegnato per incentivare il loro
contributo. Altra parte del premio deriva dalla tassazione sulle
transazioni.
Per
semplice scelta progettuale, prendendo nuovamente a riferimento il
modello dei metalli preziosi, la quantità di nuova moneta generata
per ogni blocco diminuisce nel tempo in modo che i bitcoin in
circolazione non saranno mai più di 21 milioni.
Nel
prossimo articolo inizierò a fare delle considerazioni su alcune
conseguenze, anche di enorme impatto, dei meccanismi qui descritti.
http://ilpunto-borsainvestimenti.blogspot.it/2013/12/il-bitcoin-secondo-marco-polci.html