Vai al contenuto

Blockchain: un’introduzione

Al giorno d’oggi si sente molto parlare di Bitcoin… E’ probabile che pure tu che stai leggendo ne hai già sentito parlare. Bene, la blockchain è la tecnologia di base che sta dietro Bitcoin. Ma cosa è veramente? Concettualmente è abbastanza semplice: si tratta di un database distribuito che mantiene un elenco di record ordinati in continua crescita. Ovviamente, come Internet (o la tua auto), non hai bisogno di sapere come funziona la blockchain per iniziare ad usarla, ma attraverso questo articolo cercherò di spiegarti il motivo per cui questa tecnologia è considerata rivoluzionaria.

Il concetto di blockchain può essere definito indipendentemente dall’ecosistema Bitcoin. La letteratura di solito definisce una blockchain come segue:

Una blockchain è un libro mastro o registro digitale incorruttibile di fatti (facts), replicato su diversi computer in una rete peer-to-peer. I fatti possono essere qualsiasi cosa, dalle transazioni monetarie a qualunque cosa abbia valore. I membri della rete sono individui anonimi chiamati nodi. Tutte le comunicazioni all’interno della rete sfruttano la crittografia per identificare in modo sicuro il mittente e il destinatario. Quando un nodo vuole aggiungere un fatto al libro mastro, un consenso si forma nella rete per determinare dove questo fatto dovrebbe apparire nel libro mastro; questo consenso è chiamato blocco.

Le reti peer-to-peer decentrate non sono certo una novità. Napster e BitTorrent sono reti P2P. Invece di scambiare filmati o mp3, i membri della rete blockchain scambiano fatti.

Il problema della doppia spesa

Le reti P2P, come altri sistemi distribuiti, devono risolvere un difficile problema di informatica: la risoluzione dei conflitti o riconciliazione. Mentre nei database relazionali esiste il concetto di integrità referenziale, la stessa cosa non esiste in un sistema distribuito. Nei primi anni ’90, sviluppatori, crittografi e diverse community di utenti hanno cercato di risolvere “il problema della doppia spesa” in relazione alle monete elettroniche digitali.

Supponiamo, ad esempio, di avere un file salvato localmente sul tuo computer. Puoi facilmente copiarlo da una posizione A del tuo computer e inviarlo a un amico che lo salverà in una posizione B del suo computer. Non c’è nulla che ti impedisce di copiare questo file molte volte e di condividere lo stesso file con più persone. Lo stesso principio si applica alla valuta digitale, ma con una differenza importante: è necessario garantire che i file non possano essere duplicati, in modo che lo stesso denaro non venga copiato più e più volte. Se il denaro digitale può essere copiato (e quindi contraffatto), diventa inutile.

La doppia spesa è l’atto di utilizzare gli stessi file di denaro digitale più di una volta. Se compro una mela per 1€, non posso spendere lo stesso 1€ per comprare un’arancia. Se potessi, il denaro diventerebbe inutile dato che tutti avrebbero quantità illimitate e la scarsità, cioè quella che dà il valore della valuta, scomparirebbe.

Altro esempio più orientato al Bitcoin: Alice ha 10 BTC (magari!) e manda due volte gli stessi 10 BTC a Marco e Giovanni. Chi riceverà i 10 BTC tra i due? Per rispondere a questa domanda, il modo migliore è ordinare i fatti. Se due fatti “incompatibili” arrivano nella rete, il primo che viene registrato vince e quindi è certo che uno dei due resterà a bocca asciutta… Tuttavia, in una rete P2P, due fatti inviati all’incirca nello stesso momento possono arrivare in nodi distanti in un differente ordine. Allora come può l’intera rete essere d’accordo sul primo fatto? Per garantire l’integrità su una rete P2P, è necessario un modo per rendere tutti d’accordo sull’ordinamento dei fatti. Quindi serve un sistema di consenso.

Gli algoritmi di consenso per i sistemi distribuiti sono un campo di ricerca molto attivo (tipo gli algoritmi Paxos o Raft). La blockchain di Bitcoin ad esempio implementa un algoritmo di consenso chiamato proof-of-work (PoW), usando blocchi.

Cos’è la prova di lavoro (PoW)

La proof-of-work (PoW) è il fulcro dell’attività di mining. L’attività di mining, che serve a validare le transazioni e determina l’emissione di nuova moneta (almeno fino al raggiungimento dei 21 milioni di bitcoin), è un gioco competitivo dove l’obiettivo è quello di risolvere un problema matematico (la cosiddetta sfida) e di ottenere quindi la posta in gioco.

Per parteciparvi ci si connette alla rete Bitcoin con un software che implementa tale protocollo. Solitamente questi programmi, oltre a essere in grado di eseguire le attività crittografiche necessarie, svolgono altre operazioni come la visualizzazione delle statistiche sullo stato delle rete Bitcoin.

Una transazione non si considera verificata finché non viene inserita nella blockchain.

La difficoltà del sistema viene ricalibrata ogni 2016 blocchi, affinché i minatori siano in grado di creare un blocco (ovvero un insieme di transazioni, solitamente qualche centinaio) ogni dieci minuti circa.

Per il mining viene utilizzato l’algoritmo di hash SHA-256, che, come noto, produce un numero formato da 256 bit.

Blocchi

Le transazioni sono raggruppate nei blocchi della blockchain e il numero di transazioni all’interno di ognuno di questi blocchi varia in base alla dimensione della transazione stessa. La dimensione della transazione, invece, varia in base al numero di input e di output della stessa. Un blocco è composto da due parti principali: l’header e il body. Mentre le transazioni sono racchiuse nel body del blocco, nell’header sono presenti sette campi di gestione del blocco stesso:

Versione 02000000
Hash del blocco precedente (PrevHash) E87C17C45768w7e1643fsd5481sd3f4131df681
Merkle root (hash di tutti gli hash di tutte le transazioni nel blocco) 697we168t4v1a4rv3v1e3r43c4er14ca8c4168a
Timestamp 358b0553
Bits 535f0119
Nonce 48750933
Numero di transazione 64

L’obiettivo della sfida consiste nell’ottenere un valore di hash che sia uguale o minore a un certo target assegnato. L’unico parametro che si può variare è il nonce, che solitamente viene settato a zero e poi incrementato di volta in volta mentre si calcola la funzione di hash finché non si trova un valore che sia compatibile (minore o uguale) con il target assegnato.

Si tratta di un calcolo non rapido da effettuare (computazionalmente molto oneroso), ma facile da verificare.

Volendo alterare una transazione in un blocco, bisognerebbe modificare anche tutte le transazioni passate, visto che sono collegate a cascata da una serie di firme digitali. Inoltre i vari nodi della rete Bitcoin considerano corretta la catena di blocchi (blockchain) più lunga, quindi se la maggior potenza di calcolo della rete è sotto il controllo di nodi che svolgono il proprio operato con intenti onesti, il sistema è sicuro.

Il primo nodo che risolve il problema matematico, pubblica la soluzione in rete; gli altri nodi possono verificarla velocemente.

Gli incentivi per i nodi che contribuiscono alla costruzione della blockchain sono di due tipi:

  • il ricarico sulle transazioni. Serve a incentivare i minatori a includere una determinata transazione in un blocco. Non è calcolata sul valore dell’importo della transazione ma sul “peso” della transazione misurato in kbyte;
  • i nuovi bitcoin che vengono emessi per ogni blocco risolto e trasferiti al minatore che ha risolto tale blocco. Fissato inizialmente in 50 bitcoin per blocco, questo numero viene dimezzato ogni 210.000 blocchi. Attualmente il premio è di 25 bitcoin per blocco “minato”.

PoW ha però uno svantaggio importante: è un processo costoso e intenso. L’uso del protocollo PoW aumenta la difficoltà di data mining con il tempo. E questo ha delle implicazioni finanziarie poichè i minatori devono investire in hardware sempre più potente per completare le transazioni. I computer più veloci e potenti (e costosi!) richiedono molta energia per generare monete. Pertanto, il mining con l’uso di PoW è stato riservato a coloro che possono permettersi un’attrezzatura pesante in una grande quantità. Ignorando i costi, PoW ha un grande vantaggio: consente un consenso senza fiducia e distribuito.

La copia integrale del blockchain comprende infatti le registrazioni di ogni transazione Bitcoin eseguita fin dal lancio della criptovaluta. Questa può quindi fornire informazioni utili come l’indirizzo di ogni transazione avvenuta.