IL BITCOIN SECONDO MARCO POLCI!
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à.
Invito chi non l’ha fatto a leggere l’ARTICOLO PRECEDENTE
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.
IL BITCOIN SECONDO MARCO POLCI!
Iscriviti a:
Commenti sul post (Atom)
Nessun commento:
Posta un commento