Come funziona Bitcoin?

· 10 min read

Bitcoin è un concetto di valuta digitale proposto nel 2009 dal leggendario ed enigmatico Satoshi Nakamoto, che usa la tecnologia blockchain come infrastruttura e funziona in modo decentralizzato, da persona a persona. Il Whitepaper scritto da Nakamoto per spiegare questo concetto è una lettura obbligata per chiunque voglia capire bitcoin e le criptovalute in generale. Non si limita a spiegare bitcoin come idea: mostra anche come un sistema con tolleranza ai guasti bizantini possa funzionare in un ambiente decentralizzato.

Prima di tutto, chi si interessa a Bitcoin deve sapere che il fattore decisivo per cui il concetto di bitcoin è diventato realtà è la tecnologia blockchain, e deve capire come funziona questa tecnologia.

Cos'è la blockchain?

La blockchain è una catena di blocchi, ciascuno dei quali contiene dei dati, e non è supervisionata né gestita da alcuna autorità centrale. Queste catene di informazioni sono protette dalla crittografia e non possono essere messe a tacere grazie alla loro struttura decentralizzata. Alla base, la blockchain utilizza due strutture dati: i puntatori e le liste concatenate.

Puntatori

I puntatori sono variabili che indicano dove si trova un'altra variabile. Normalmente, nella programmazione le variabili contengono dati. (Nell'esempio int a = 10, la variabile intera a ha valore 10.) I puntatori, invece, non conservano un valore come dato: indicano l'indirizzo della variabile che contiene quel dato.

Liste concatenate

Le liste concatenate sono una delle unità più importanti delle strutture dati e, a grandi linee, si presentano così.

Una sequenza di blocchi, ciascuno dei quali contiene un dato specifico ed è collegato al blocco successivo tramite un puntatore. La variabile puntatore contiene l'indirizzo del nodo successivo e garantisce così il collegamento. Come abbiamo visto nel nodo finale, l'ultimo puntatore non contiene alcun dato.

Il punto importante qui è che ogni puntatore contiene l'indirizzo del blocco successivo. E allora dov'è il puntatore al primo blocco? Il primo blocco si chiama blocco genesis e il suo puntatore si trova all'interno del sistema stesso.

Un puntatore hash è un puntatore che contiene l'hash del blocco precedente.

L'hash è un processo che prende dati di qualsiasi lunghezza e, tramite una determinata funzione, produce un risultato sempre della stessa lunghezza, indipendentemente dal contenuto dei dati. Nel caso di Bitcoin, l'operazione di trasferimento viene presa come dato e fatta passare nell'algoritmo SHA-256 per ottenere un risultato di lunghezza fissa. Qualunque sia la lunghezza dei dati inseriti, l'algoritmo SHA-256 produce sempre un risultato lungo 256 bit.

Nella sua forma più semplice la blockchain è una lista concatenata, come mostrato di seguito.

Una blockchain è una lista concatenata in cui ogni blocco contiene un dato e un puntatore hash che rimanda al blocco che lo precede. Cos'è dunque un puntatore hash? I puntatori hash somigliano molto ai puntatori normali, ma oltre all'indirizzo del blocco precedente contengono anche il risultato hash dei dati di quel blocco. È proprio questa piccola differenza di struttura a rendere la tecnologia blockchain così sicura.

Immaginiamo per un attimo che un attaccante voglia colpire il blocco 3 e modificarne i dati. A causa della funzione hash, la più piccola modifica ai dati si riflette nel risultato come una differenza enorme. Il minimo cambiamento ai dati del blocco 3 cambierà l'hash memorizzato nel blocco 2, la modifica del blocco 2 inciderà sull'hash del blocco 1 e quindi andrebbe cambiata l'intera catena, cosa impossibile. È questo il metodo che rende le blockchain impossibili da mettere a tacere.

Cos'è il mining?

Il mining è il processo necessario per creare nuovi bitcoin. Il mining di bitcoin funziona secondo il principio della Proof of Work (POW), la prova di lavoro. In parole semplici: risolvere un problema deve essere molto difficile, ma una volta risolto, la correttezza della soluzione deve essere dimostrabile con estrema facilità.

Prima di arrivare a come Bitcoin abbia adottato la POW come concetto, cerchiamo di capire perché le criptovalute abbiano bisogno di un sistema del genere.

Prima di Bitcoin erano state create diverse valute digitali, ma quando si costruisce una rete decentralizzata e da persona a persona nell'ambiente digitale, l'ostacolo più grande è il problema logico chiamato problema dei generali bizantini. Poiché Nakamoto è riuscito a superarlo in bitcoin grazie alla POW, bitcoin ha potuto iniziare la sua vita e prosegue con forza.

Il problema dei generali bizantini

Proseguiamo spiegando il problema dei generali bizantini, spesso ripreso anche negli studi accademici. I generali bizantini che pianificano l'attacco alla città nemica hanno due problemi:

I generali si trovano molto lontani gli uni dagli altri, quindi è impossibile che un'autorità centrale diriga l'assedio.

Anche il nemico ha un esercito forte, perciò l'attacco deve essere sferrato da tutti i generali nello stesso momento perché possa avere successo.

Mentre gli eserciti assedianti circondano la città, ciascuno trasmette il messaggio d'ordine dall'esercito alla propria destra a quello alla propria sinistra, e così la comunicazione si mantiene. Il problema è che, quando arriva l'ordine di attaccare mercoledì, un esercito potrebbe non essere pronto e rimandare indietro un messaggio: no, si attacca venerdì. Oppure il soldato che porta il messaggio può essere catturato dal nemico, o il contenuto del messaggio può essere alterato. In un ambiente così poco sicuro, qualsiasi attacco fallirà se non si raggiunge un coordinamento totale.

Lo stesso problema logico vale per le reti blockchain, che costituiscono l'infrastruttura di criptovalute come bitcoin. Sono reti incredibilmente grandi: come possiamo fidarci di ogni singola persona che ne fa parte? Magari vogliamo inviare a qualcuno 4 ether, ma come possiamo essere sicuri che un malintenzionato non trasformi quell'importo in 40 ether?

Satoshi Nakamoto è riuscito a superare questo problema logico introducendo il protocollo proof of work. Vediamo come funziona:

Quando l'esercito assediante vuole trasmettere il messaggio "attacchiamo lunedì" all'esercito alla sua sinistra, deve seguire questi passaggi;

Innanzitutto, al messaggio originale viene assegnato un valore casuale e generato una sola volta, chiamato "nonce". Il nonce può essere un qualsiasi valore del sistema esadecimale.

Poi il testo del messaggio con il nonce assegnato viene fatto passare nella funzione hash e se ne ottiene un risultato. Nell'attacco immaginario che stiamo considerando, supponiamo che i comandanti abbiano deciso di condividere tra loro solo i risultati della funzione hash le cui prime 5 cifre sono zeri.

Se il risultato della funzione hash è quello desiderato, inoltrano il messaggio al generale successivo. Se il risultato non corrisponde, occorre cambiare a caso il nonce assegnato e ripetere l'operazione finché non si ottiene un risultato con cinque zeri iniziali. Un sistema del genere richiede tempi e potenza di calcolo incredibilmente elevati.

Se il soldato che porta il messaggio viene catturato o il contenuto del messaggio viene alterato, il risultato dell'hash cambierà radicalmente per via delle caratteristiche della funzione hash. Esaminando il messaggio, i generali si accorgeranno che le prime cinque cifre dell'hash non sono zeri e revocheranno l'attacco.

Tuttavia, per quanto sia molto improbabile, ogni funzione hash può produrre risultati in collisione. In teoria, prendendo A e B come due input distinti, non dovrebbe esistere alcuna probabilità che H(A) = H(B), ma nell'applicazione reale nessuna funzione hash è completamente a prova di collisione.

Bene: in questa bassa probabilità, cosa succede se il soldato che porta il messaggio viene catturato, il messaggio viene modificato e l'hash esce comunque come i generali se lo aspettano? Sarebbe ovviamente un processo lunghissimo, ma non impossibile. Contro questo, i generali usano il loro vantaggio numerico.

Il problema si può superare facendo inviare i messaggi verso sinistra da tre generali contemporaneamente, invece che da un solo generale che passa a turno il messaggio da destra a sinistra. Se i generali, partendo dai propri messaggi, ne compongono uno cumulativo, lo fanno passare nella funzione hash, assegnano al risultato un nonce e lo reinseriscono nella funzione hash, questa volta le prime sei cifre del risultato devono essere zeri.

A questo punto, trovare il nonce di quel messaggio e cambiarne il contenuto diventa una gravissima perdita di tempo.

Il compito dei generali che ricevono il messaggio è invece facile: basta aggiungere al risultato hash il nonce che è stato loro comunicato e confrontare i risultati. Questo passaggio è un'operazione rapidissima e semplice. Questa idea è il meccanismo di funzionamento del principio proof of work.

Trovare il nonce che dà l'hash giusto richiede una potenza di calcolo e un tempo enormi

Esaminare i risultati e stabilire se ci sia un intento malevolo richiede invece pochissimo tempo.

È così che i miner applicano il protocollo proof of work nel mining di Bitcoin. Usano la loro potenza di calcolo per risolvere il problema crittografico che hanno davanti e creare il blocco successivo. Nella blockchain di Bitcoin i blocchi vengono creati ogni 10 minuti.

Come avvengono i trasferimenti sulla rete Bitcoin?

Mettiamo che John voglia inviare dei bitcoin a Dave. Come avviene questo trasferimento? I trasferimenti in bitcoin funzionano in modo molto diverso da quelli in denaro fiat. Se John volesse dare 10 USD a Dave, tirerebbe fisicamente fuori la banconota da 10 USD dal portafoglio, la darebbe a Dave e il trasferimento sarebbe concluso. Con bitcoin è diverso: non è qualcosa che possediamo fisicamente. Quello che abbiamo è la prova di possedere bitcoin.

Ci sono due cose da sapere e a cui prestare attenzione;

I miner confermano e mettono in sicurezza le operazioni di trasferimento con i dati che inseriscono nel blocco che creano. Per questo servizio applicano anche una commissione.

Con le valute fiat non conosciamo né seguiamo la storia della banconota che abbiamo in mano. Non esiste un modo pratico per farlo. Ogni operazione di trasferimento in bitcoin, invece, è registrata sulla rete.

Alla luce di tutto ciò, diamo un'occhiata al trasferimento di bitcoin tra John e Dave. Questo trasferimento ha due parti: input e output.

Per poterlo effettuare, John deve possedere bitcoin provenienti da trasferimenti precedenti. Come abbiamo detto, tutti i trasferimenti sono registrati sulla rete bitcoin.

John deve raccogliere i bitcoin ricevuti in precedenza con i trasferimenti chiamati TR(0), TR(1) e TR(2), creare un nuovo trasferimento dal nome TR(INPUT) e inviarlo a Dave. Qui TR(INPUT) diventa il dato di input del nuovo trasferimento.

Ecco più o meno come si presenta un trasferimento di bitcoin dal lato dell'input.

I dati di output conterranno semplicemente la quantità di bitcoin che Dave dovrà avere dopo il nuovo trasferimento e il resto rimanente, che torna a John e diventerà il valore TR(INPUT) nel suo trasferimento successivo.

Se non consideriamo la parte del resto, il processo include un unico risultato di output, ma sono possibili anche trasferimenti con più risultati di output. Questa descrizione mostra in modo semplice come avviene un trasferimento sulla rete bitcoin. Perché tutto ciò riesca, però, devono essere soddisfatte determinate condizioni.

Condizioni che i trasferimenti devono rispettare:

TR(INPUT) > TR(OUTPUT). Il trasferimento di input deve sempre essere maggiore di quello di output. In ogni trasferimento, la differenza tra input e output (output + resto) viene pagata ai miner come commissione. Quindi: Commissione di mining = TR(INPUT) - (TR(OUTPUT) + RESTO)

Sul lato dell'input deve valere TR(0)+TR(1)+TR(2)=TR(INPUT). In altre parole, John deve avere abbastanza bitcoin da inviare a Dave. Se non ne ha a sufficienza per eseguire l'operazione, il trasferimento viene rifiutato dai miner.

Ora Dave deve dimostrare di essere il proprietario dei bitcoin che gli sono stati inviati. John ha cifrato il suo trasferimento di bitcoin con la chiave pubblica di Dave. Dave può aprire questa cifratura solo con la propria chiave privata.

Nel frattempo John deve dimostrare di avere abbastanza bitcoin da inviare a Dave. Lo fa firmando con la propria chiave privata il trasferimento che intende eseguire. Chiunque può aprirlo con la chiave pubblica di John e verificare che disponga davvero della quantità di bitcoin richiesta. Questa prova si chiama dati di firma.

I dati di input (compresi i dati di firma) e i dati di output vengono sommati e fatti passare nell'algoritmo di hash SHA-256. L'output di questo algoritmo è ciò che si chiama trasferimento.

C'è una cosa da tenere a mente: perché un trasferimento di bitcoin avvenga, il miner che ha minato il blocco deve inserire fisicamente quel trasferimento nel blocco. Il miner che ha minato il blocco può incassare la commissione di tutti i trasferimenti che vi ha inserito. Poiché i volumi di trasferimento crescono nel tempo, i trasferimenti devono attendere la comparsa di un nuovo blocco perché i blocchi si riempiono completamente. Di fatto, chi non vuole aspettare paga commissioni di mining più alte, facendo risaltare il proprio trasferimento e rendendolo più interessante per i miner.

Da qui è nato il principio replace-by-fee. Funziona semplicemente così: anche se John ha inviato 5 BTC a Dave, la transazione non entra mai in un blocco e resta in sospeso perché la commissione di mining è stata tenuta bassa. Non c'è modo di annullare o revocare l'operazione, dato che i bitcoin spesi non si possono recuperare. Se però John effettua un trasferimento allo stesso indirizzo per lo stesso importo di BTC impostando una commissione di mining più alta, il vecchio trasferimento viene considerato non valido e il nuovo si mette in coda per l'esecuzione.

Il futuro di Bitcoin e delle criptovalute in generale è pieno di infinite possibilità. Le applicazioni della blockchain non conoscono confini e i progetti in questo campo diventano ogni giorno più solidi e più sicuri.

Nel percorso che va dalle monete-merce all'uso di metalli preziosi come oro e argento, fino alla moneta cartacea e alle valute nominali, l'idea del denaro nell'ambiente virtuale non è poi così nuova: è però solo nella storia recente che è diventata realizzabile.

Secondo alcuni è un gruppo interno alla CIA, secondo altri un alieno, e forse è davvero un cyberpunk di nome Satoshi Nakamoto. Chiunque sia, ci ha lasciati soli a decidere cosa fare delle sue idee e della loro applicazione, destinate a cambiare completamente il modo in cui guardiamo ai nostri beni e li custodiamo. Ha aperto la strada a idee più avanzate della sua e ha convinto il mondo ad adottare una prospettiva del tutto diversa.

Satoshi non aveva dimenticato di nascondere un messaggio nel blocco genesis, il blocco iniziale che ha minato e scritto come hard code. Annotando la data del 3 gennaio 2009, vi ha allegato un titolo del Times britannico di quel giorno sulle banche responsabili della crisi economica mondiale: "Il ministro è sul punto di varare un secondo salvataggio per le banche". Con quelle parole probabilmente prende in giro il sistema delle banche centrali. Non si sa perché Satoshi abbia creato nel blocco iniziale questo indirizzo da cui non è possibile spendere. Finora vi sono stati inviati in forma anonima 16 BTC e, di conseguenza, l'offerta totale di 21 milioni di bitcoin non si realizzerà mai davvero.

A Bitcoin sono bastati appena 9 anni per raggiungere livelli capaci di spaventare le banche centrali di tutto il mondo, e ha ancora molta strada davanti a sé.

Bitcoin Come funziona Bitcoin Satoshi Satoshi Nakamoto Nakamoto criptovalute blockchain Cos'è la blockchain Mining Cos'è il mining rete Bitcoin