Oggi i bitcoin sono sulla bocca di tutti: criptovaluta, moneta libera, denaro del futuro… Al momento un bitcoin vale 5891.69 euro. Ma raramente qualcuno sa davvero di cosa si parla quando si nomina questa moneta virtuale: ecco un articolo che vi aiuterà a fare un po’ di chiarezza.
A livello molto basso, il sistema Bitcoin è un file che contiene nomi e quantità di valuta posseduta. Una lista, insomma. Tutto qui? Sì e no. Sì perché effettivamente i bitcoin dipendono da questa lista e dal fatto che tutti gli utilizzatori siano d’accordo sull’usarla come riferimento per la valuta, no perché il documento è distribuito, cioè più computer ne possiedono una copia, per ragioni di sicurezza in caso di guasto.
Scambiare bitcoin significa essenzialmente aggiornare la lista, togliendo un certo ammontare di valuta da una parte ed aggiungendolo dall’altra, come in un normale movimento tra conti correnti bancari. A differenza di una banca però, anziché una singola entità è tutta la rete di utenti a controllare la lista: questo significa che chiunque può vedere le transazioni di chiunque (vedremo che questo è un punto fondamentale del sistema). Inoltre l’intera rete è progettata per fare in modo che sia impossibile risalire a chi sia la persona dietro l’utente che scambia valuta.
Per spostare del denaro da un conto all’altro, il computer invia a tutti i suoi “vicini” un messaggio contenente gli account oggetto della transazione e l’importo, ad esempio “Alice manda 5.0 BTC a Bob”. Ogni elemento della rete (computer) che riceve il messaggio aggiorna la sua lista secondo quanto ricevuto e poi lo inoltra ai propri vicini. Ma come fa una macchina a capire che la richiesta è autentica, cioè che quanto compare nel messaggio è effettivamente quello che l’utente desidera? È usato un meccanismo chiamato firma digitale che, proprio come la firma a mano, non è imitabile e permette di identificare il firmatario.
Una firma digitale è composta da due chiavi – privata e pubblica – legate tra loro: la privata è posseduta solo dall’utente ed usata per firmare, la pubblica è disponibile a tutti e serve per verificare la validità della firma.
Per essere disponibili a tutti, le chiavi pubbliche sono in realtà gli indirizzi degli utenti, quindi il nostro messaggio di esempio sarebbe in realtà “(chiave pubblica di Alice) invia 5.0 BTC a (chiave pubblica di Bob)”.
Le due chiavi sono la base di un algoritmo che consente ad un utente di criptare (firmare) un file con la propria chiave privata ed a tutti gli altri di decrittare (verificare) il file stesso con la chiave pubblica, senza poter risalire a quella privata.
La firma digitale ha anche una proprietà in più rispetto a quella manuale: cambia per ogni documento su cui è apposta, impedendo così modifiche al file mentre passa lungo la rete. Eventuali modifiche cambierebbero infatti la firma stessa.
Così come i nomi della lista in realtà sono chiavi pubbliche, anche i valori di bitcoin sono un po’ più complessi: il file non contiene veramente un ammontare di valuta, bensì un link a transazioni precedenti che sommate assieme danno il valore attuale posseduto da un utente. Per inviare 5.0 BTC a Bob, Alice deve fare riferimento a vecchie transazioni dove ha ricevuto in totale 5 o più bitcoin, dette transizioni di input. La transazione corrente è detta di output.
I nodi riceventi il messaggio di transizione controllano se gli input sono validi (cioè se Alice era davvero la destinataria, se il totale è maggiore o uguale a 5 e se quegli input non sono già stati usati da altre transazioni). Inoltre, se c’è del denaro in eccesso rispetto all’output desiderato, quella differenza deve essere inviata a se stessi.
Se volete vedere questo meccanismo in pratica qui c’è un esempio: https://goo.gl/Z9Uraz .
Anche gli output non sono così semplici. Facendo un paragone, inviare bitcoin non è come inviare denaro per mail ma piuttosto come metterlo in un armadietto pubblico bloccato, dove la combinazione di sblocco è un problema matematico difficile da risolvere. Ogni utente può scrivere il proprio problema, dando così la possibilità di output indirizzati a più di un destinatario, per esempio un meccanismo “alla meglio dei tre” o un problema risolvibile da chiunque (come fu la prima transazione di sempre).
Tornando al problema del sistema distribuito, si potrebbe pensare che non ci siano garanzie su transazioni sovrapposte, perché non c’è modo di ordinarle. Per esempio: alle 12:00 Alice manda 5.0 bitcoin a Bob usando le transazioni 1 e 2, ed il messaggio inizia a propagarsi per la rete; alle 12.01 Bob invia a Charlie 6.5 bitcoin usando la precendente transazione con Alice e la transazione 3. Al computer di Charlie arriva prima la transazione di Bob che quella di Alice, quindi si genera un errore perché una transazione su cui si basa quella di Bob per Charlie non esiste ancora.
Questo problema è risolto utilizzando ancora il trucchetto del problema matematico attraverso un meccanismo detto block chain.
Ogni nodo può mettere un insieme di transazioni non ancora confermate in un blocco e inviarlo a tutti i computer a lui vicini con un riferimento all’ultimo blocco che ha ricevuto, costruendo così una catena.
Visto che ogni computer può inviare il proprio blocco, per decidere quale è il blocco corretto il sistema utilizza una funzione hash.
Paroloni a parte, la funzione hash è una cosa che prende il blocco precedente ed un numero casuale e li trasforma in un valore. Se il valore è sotto una determinata soglia, il blocco viene selezionato dal sistema: trovare per primi un valore sotto la soglia è il problema da risolvere. In media, con tutti i computer della rete che provano a scendere sotto la soglia, il tempo di risoluzione del problema si gira attorno ai 10 minuti e la difficoltà del problema viene aggiornata costantemente per rimanere vicini a questo valore. Esistono altre criptovalute con tempi diversi, per esempio Litecoin con un tempo di due minuti e mezzo. Il più veloce a risolvere il problema ottiene la possibilità di inserire il proprio blocco di transazioni nella catena. L’output della funzione hash è usato nel blocco come riferimento al precedente.
Cosa succede se più computer diversi vincono ed inseriscono contemporaneamente il proprio blocco? La catena si sfilaccia in rami (branches in inglese) e gruppi di computer seguono rami diversi; quando un ramo diventa più lungo degli altri, cioè generalmente al blocco successivo di transazioni, questi vengono eliminati e sostituiti.
A livello singolo, la competizione per vincere il piazzamento del blocco successivo è computer contro rete: due potenze di calcolo incomparabili che rendono improbabile la possibilità di inserire più blocchi di fila (il massimo conosciuto è 6 ed è stato ottenuto non da un singolo ma da un sottoinsieme piuttosto grande della rete). Questo evita che un malintenzionato possa utilizzare sempre le stesse transazioni di input per output diversi creando da solo rami sempre più lunghi.
Terminiamo la descrizione del sistema bitcoin paradossalmente con l’inizio : come è generata la valuta? Chi risolve un blocco ottiene una piccola ricompensa come incentivo alla verifica delle transazioni ed al mantenimento della block chain. Ogni quattro anni la ricompensa è dimezzata, quindi prima o poi (circa attorno ai 121 milioni, perché è possibile usare fino a 1 centimilionesimo di BTC) la valuta immessa finirà. Il mining consiste in questo: processare quante più transazioni possibili per ottenere bitcoin.
In sintesi, Bitcoin è un sistema protetto di moneta virtuale basato su una architettura peer-to-peer (non ci sono autorità centrali); le transazioni individuali sono autorizzate tramite firma digitale e il possesso di valuta è passato attraverso insiemi di transazioni raggruppate, il cui ordine è protetto dalla block chain. Richiedendo la risoluzione di un problema matematico per ogni blocco, i malintenzionati sono costretti a competere contro tutto il resto della rete, senza possibilità di vittoria.
[Per chi volesse approfondire, una spiegazione più lunga (in inglese) da cui è stato tratto molto materiale di questo articolo è disponibile su YouTube https://www.youtube.com/watch?v=Lx9zgZCMqXE oppure a http://www.imponderablethings.com/2013/07/how-bitcoin-works-under-hood.html]