Questa è la lezione introduttiva alla blockchain e come tale dovrebbe essere comprensibile da chiunque, anche da chi ne sente parlare per la prima volta, il che rende molto difficile racchiudere tutto ciò che la è la blockchain in una semplice definizione.
Per questo motivo, riportiamo alcune definizioni che sono state date della blockchain, per poi cercare di approfondirle e trarre delle caratteristiche che potremmo attribuire a questa tecnologia.
“La blockchain (letteralmente ‘catena di blocchi’) è una struttura dati condivisa e ‘immutabile’. È definita come un registro digitale le cui voci sono raggruppate in ‘blocchi’, concatenati in ordine cronologico, e la cui integrità è garantita dall’uso della crittografia.” (Wikipedia)
“È un database distribuito che sfrutta la tecnologia peer-to-peer e chiunque può prelevarlo dal web, diventando così un nodo della rete.” (Wired)
“La blockchain è un libro mastro di dati decentralizzati condivisi in modo sicuro.” (Oracle)
“Blockchain, che letteralmente significa catena di blocchi, è un grande registro digitale in cui le voci sono raggruppate in blocchi concatenati in ordine cronologico.” (Money.it)
“La blockchain è una sottofamiglia di tecnologie in cui il registro è strutturato come una catena di blocchi contenenti le transazioni e la cui validazione è affidata a un meccanismo di consenso, distribuito su tutti i nodi della rete nel caso delle blockchain permissionless o pubbliche o su tutti i nodi che sono autorizzati al processo di validazione delle transazioni da includere nel registro nel caso delle blockchain permissioned o private.” (Blockchain4innovation)
Da queste sei definizioni emergono chiaramente delle tematiche che bisogna affrontare singolarmente:
- Distribuzione, decentralizzazione e peer-to-peer
- Registro distribuito
- Sicurezza, crittografia e immutabilità
- Trustless, algoritmi di consenso
- Permissionless e permissioned
1- Bitcoin e la nascita della blockchain
Dimentichiamo per un attimo la lista di concetti, perché è impossibile parlare di blockchain senza parlare di Bitcoin.
Infatti, sebbene vi fossero già state delle proposte teoriche vicine a ciò che si intende ora con blockchain, come ad esempio la proposta di David Chaum del 1982 o quella di Stuart Haber, W. Scott Stornetta e Dave Bayer del 1992, la prima vera e propria blockchain fu quella presentata da Satoshi Nakamoto il 31 ottobre del 2008 nel white paper di Bitcoin, la prima criptovaluta.
Alle criptovalute dedicheremo un apposito articolo per beginner, come questo, ma restiamo sulla blockchain.
La blockchain teorizzata da Nakamoto ha visto la sua reale implementazione nel 2009, con il lancio di Bitcoin.
Questo breve excursus storico serve per sottolineare l’indissolubile rapporto tra blockchain e bitcoin.
Passiamo ora agli aspetti tecnici, descrivendo le caratteristiche di questa tecnologia.
2- Distribuzione, decentralizzazione e peer-to-peer
La blockchain nasce come tecnologia distribuita e decentralizzata, fondata sul paradigma peer-to-peer.
Per spiegare questi tre termini, bisogna addentrarsi nel mondo informatico e in particolare nel campo delle reti di computer.
Partiamo dal fatto che una rete è composta da un insieme di computer, detti nodi, in comunicazione tra di loro.
Detto in questi termini, non è diverso da ciò che conosciamo come internet: una rete di reti di computer.
Nell’ambito delle reti vi sono due principali tipologie di architetture:
- Client/server
- Peer-to-peer (P2P)
L’architettura client/server (quella a cui siamo solitamente abituati navigando sui siti web) si basa su una divisione dei nodi in nodi (server) che svolgono il ruolo di fornitori di servizi e degli altri nodi (client) che richiedono questi servizi.
Pensate a ciò che state facendo in questo momento: con il vostro dispositivo (mobile o fisso, è indifferente) state richiedendo un servizio, la pagina che state leggendo.
Digitando l’indirizzo di questa pagina, senza scendere in dettagli tecnici, ciò che succede è che verrà inviata una richiesta al computer sul quale sono presenti i file che compongono il sito: il server.
Per riassumere, siete dei client che stanno richiedendo un servizio a un server.
Come voi ci sono molti altri client che richiedono servizi allo stesso server e i client non sono in comunicazione tra di loro.
Ci troviamo davanti a un tipo di architettura centralizzata, in cui è presente un ente centrale che distribuisce dei servizi ai client.
Non è molto diverso da ciò che fa una banca, un supermercato o qualsiasi altro ente centrale che distribuisce servizi a dei clienti.
All’estremo opposto invece abbiamo l’architettura peer-to-peer (P2P) che, come suggerisce il nome, si tratta di una rete tra pari, senza necessità di un coordinamento da parte di server o di un qualsiasi altro organismo centrale.
In un’architettura di questo tipo, tutti i nodi della rete saranno sia fornitori che consumatori di risorse.
Parliamo in questo caso di decentralizzazione.
Il paradigma peer-to-peer non trova molte applicazioni nel nostro tipo di società, che è decisamente più improntato sulla centralizzazione che sulla decentralizzazione, cosa che potrebbe sembrare concettualmente più vicina all’anarchia.
In effetti si deve proprio all’avvento della blockchain la possibilità di dar vita a modelli decentralizzati, per esempio, della finanza, in cui non si hanno enti centrali come le banche della finanza tradizionale, ma attori alla pari che si scambiano denaro senza la necessità di terzi.
3- Registro distribuito
Abbiamo detto che la blockchain è una sottofamiglia di tecnologie, infatti appartiene alla più grande famiglia dei distribuited ledger (registri distribuiti).
Prima di spiegare cosa sono però, bisogna tornare di nuovo ai concetti base del mondo informatico e dare una definizione di database.
Un database (o base di dati) è un insieme di dati strutturati, un di archivio digitale contenuto in un supporto fisico (ad esempio un disco rigido).
Anche in questo caso, siamo abituati ad architetture centralizzate, in cui vi è un archivio centrale che viene consultato da più utenti.
Se torniamo di nuovo all’esempio del nostro sito, dietro alla superficie vi è un database contenente tutti i dati relativi al sito, ad esempio il contenuto di questa pagina.
Ancora una volta il paradigma è di tipo client/server, quindi questi dati sono contenuti in un nodo centrale che si occupa di distribuirli ai client che ne fanno richiesta.
I distribuited ledger (DLT), ovvero registri distribuiti, sono simili ai database tradizionali, nel senso che sono degli archivi di dati, con la differenza però che non sono centralizzati, bensì distribuiti e sincronizzati tra tutti i nodi della rete, senza bisogno di un’amministrazione centrale.
I nodi della rete quindi possono consultare i dati ma anche scriverli. Ci rendiamo conto, perciò, di trovarci davanti a un’architettura peer-to-peer.
La blockchain è una sottofamiglia dei DLT e si distingue dalle altre tipologie di DLT in primo luogo per la struttura a blocchi, da cui la tecnologia prende infatti il nome.
La blockchain è un registro distribuito e sincronizzato che organizza i dati in blocchi, che possono essere visto come dei contenitori al cui interno sono presenti, per esempio, delle transazioni.
Come suggerisce il nome dunque, il registro di una blockchain è formato dal susseguirsi di questi blocchi, contenenti delle transazioni, collegati l’uno all’altro crittograficamente, come vedremo nel prossimo paragrafo.
Inoltre i DLT, abitualmente, sono più utilizzati in ambito istituzionale e vi sono dei nodi della rete, detti nodi validatori, che appartengono a grandi istituzioni e che si occupano di validare i dati da aggiungere al registro.
Nella blockchain invece, a partire dall’idea proposta da Satoshi Nakamoto, chiunque può entrare a far parte della rete e validare i blocchi contenenti i dati. Anche questo tema verrà trattato a breve.
4- Sicurezza, crittografia e immutabilità
Parlando della caratteristica struttura a blocchi che contraddistingue la blockchain dagli altri tipi di DLT, abbiamo detto che i blocchi sono collegati tra di loro crittograficamente.
Si entra nell’ambito della crittografia, che richiede conoscenze matematiche avanzate, ma cercheremo di spiegare nel modo più semplice possibile questa caratteristica della blockchain, che è riconosciuta come una delle sue caratteristiche più importanti e che più suscitano l’interesse del mondo IT.
Ogni blocco della blockchain è associato a un codice identificativo che lo rende impossibile da confondere con altri blocchi, di fatto rappresentandolo univocamente.
Questo codice identificativo si chiama hash e viene ottenuto tramite una hash function.
Le hash functions sono algoritmi matematici molto impiegati in ambito crittografico, a causa del loro livello di sicurezza elevato.
Una hash function prende come input dei dati di lunghezza arbitraria e restituisce un output che è una stringa binaria di dimensione fissa.
Un esempio renderà più chiaro ciò di cui si sta parlando:
Nell’immagine possiamo vedere tre input di lunghezze diverse sulla sinistra e sulla destra i tre rispettivi output che, come si noterà, hanno uguale lunghezza ma sono tutti diversi.
Sempre partendo da questo esempio possiamo elencare delle caratteristiche tipiche delle hash functions, che ben esplicitano il perché siano ritenute così sicure:
- Prendiamo il secondo e il terzo input: divergono soltanto per una parola ma la stringa di output è completamente differente. In effetti, basterebbe cambiare un solo carattere dell’input per ottenere un output completamente diverso.
- Le hash functions sono unidirezionali, il che vuol dire che non si può risalire all’input partendo dall’output, funzionano solo in una direzione.
Se, partendo dal primo output dell’immagine, volessimo risalire all’input “Fox” avremmo un solo modo per farlo: attraverso bruteforce, ovvero iniziando a creare degli input casuali e vedendo gli output ottenuti dopo averli passati alla funzione. In sostanza, bisogna affidarsi al caso e sperare di indovinare l’input corretto.
Esistono diverse funzioni di hash e quella utilizzata da Satoshi Nakamoto per la prima blockchain, attualmente ancora impiegata da Bitcoin, è SHA256.
Torniamo ai blocchi. Ogni volta che viene creato un nuovo blocco, deve essere associato a un hash, che si ottiene passando il contenuto del blocco all’interno di una hash function.
Da ciò ne consegue che il codice identificativo del blocco dipende dal contenuto del blocco, che sarà sempre diverso. In questo modo sarà impossibile sostituire i dati di un blocco con altri dati, visto che cambierebbe totalmente l’hash ad esso associato.
Non solo, ogni blocco contiene al suo interno l’hash del blocco precedente, quindi l’hash di un blocco X sarà determinato dall’hash del blocco X-1, a sua volta determinato dall’hash del blocco X-2 e via dicendo.
Se era già chiaro il significato del termine blocco, ora dovrebbe essere chiaro anche il perché del termine catena.
I blocchi sono concatenati tra di loro, in una sequenza impossibile da rompere o da mutare.
Pensiamo a una catena di 100 blocchi e supponiamo di voler cambiare un dato contenuto nel blocco 50. Ciò comporterebbe un cambiamento di tutti i blocchi dal 50 al 100.
Ecco spiegato il termine immutabilità, comparso più volte nelle definizioni viste inizialmente.
A contribuire alla sicurezza è anche la decentralizzazione. Infatti questo registro digitale non è presente su un solo supporto fisico.
Torniamo all’esempio di un sito basato su un database tradizionale.
Per prima cosa i dati al suo interno non sono immutabili come quelli della blockchain, perché non sono legati tra loro in modo indissolubile.
In secondo luogo, il database si troverà all’interno di un server. Potrà anche essere duplicato, per avere delle copie di backup.
In ogni caso, per un hacker, sarà molto più semplice metterci sopra le mani, perché deve rivolgere l’attacco a un ente centralizzato.
Il registro di una blockchain invece è decentralizzato e distribuito tra i vari nodi che ne compongono la rete.
Ipotizziamo di avere 1000 nodi, vuol dire che il registro sarà presente in 1000 luoghi fisici distinti, connessi in rete ma indipendenti, il che rende all’hacker il lavoro molto più difficile, se non impossibile.
Tutte queste caratteristiche sono molto utili per evitare una serie di problemi tipici della contabilità e del mondo finanziario, su tutti il problema del double spending, ovvero lo spendere più volte la stessa moneta/banconota in due transazioni diverse.
Questo è proprio uno dei motivi per cui la blockchain è stata teorizzata in questo modo.
5- Rete trustless e algoritmi di consenso
Quando si sente parlare di blockchain si sente spesso utilizzare la parola trustless, ma cosa vuol dire?
Una rete trustless è una rete i cui partecipanti non hanno la necessità di conoscersi o avere fiducia gli uni negli altri, né tantomeno hanno bisogno di un’entità centrale che serva a dettare la regole affinché ci sia fiducia.
Siamo in una rete decentralizzata, quindi non vi è un’autorità centrale, bensì la fiducia viene raggiunta tramite degli appositi meccanismi che sono detti algoritmi di consenso.
Quello degli algoritmi di consenso è un tema molto vasto e complesso, che abbiamo trattato a parte in questa lezione.
Inoltre, le varie blockchain hanno diversi meccanismi per raggiungere il consenso, che in Crypto Web Academy cerchiamo di trattare singolarmente in articoli di livello avanzato, perché richiedono già una solida conoscenza di base del funzionamento di una blockchain.
Qui ci limiteremo a dare una veloce e generica spiegazione di cosa sia un algoritmo di consenso, mantenendoci a livello molto alto.
La cosa fondamentale da sapere non è tanto la definizione di algoritmo di consenso, bensì il perché vengono usati.
Ci troviamo in una rete decentralizzata, composta da molti nodi e ognuno di questi nodi può sia leggere il registro che scriverci. Registro che, ricordiamolo, è sincronizzato tra i vari nodi.
Sorge quindi spontanea una domanda: come si decide chi e cosa bisognerà inserire all’interno di ogni nuovo blocco?
Prendiamo sempre l’esempio di una rete composta da 1000 nodi, vi è la possibilità che alcuni di questi non siano onesti e che quindi potrebbero inserire dei dati valsi, per un proprio tornaconto personale o per danneggiare gli altri nodi.
Perché vengano aggiunti nuovi dati alla blockchain c’è bisogno che ci sia il consenso da parte dei nodi, consenso che viene raggiunto appunto attraverso gli algoritmi di consenso, appositamente studiati per gestire l’eventualità che vi siano attori malevoli all’interno della rete.
In questa lezione non andremo oltre con gli algoritmi di consenso e vi rimando ancora alla lezione dedicata a questo tema.
6- Reti permissionless e reti permissioned
Qualche riga va dedicata anche ad altre due parole che sentirete spesso associare alla blockchain:
- Permissionless
- Permissioned
Queste due parole fanno riferimento a due tipologie di rete opposte.
Le reti permissionless sono reti in cui è permesso a chiunque di prenderne parte, partecipando al consenso. Ancora una volta siamo in ambito di piena decentralizzazione.
Al contrario, le reti permissioned sono reti chiuse, in cui solo degli attori stabiliti possono partecipare al consenso, quindi sono solo parzialmente decentralizzate.
Le blockchain come quella di Bitcoin sono permissionless, infatti chiunque può decidere di diventare un nodo della rete e iniziare a partecipare al processo di consenso.
Le blockchain permissioned esistono ma sono più che altro utilizzate in ambito privato, in cui non si vuole lasciare la possibilità ad attori esterni di accedere alla rete.
7- La nostra definizione
Per chiudere questa lezione, alla luce di tutte le cose dette finora, proviamo a dare una nostra definizione di blockchain che riassuma tutti i concetti esposti:
Con blockchain si intende una tecnologia appartenente alla famiglia dei DLT. Una blockchain è un registro digitale distribuito, decentralizzato e sincronizzato tra i nodi della rete che la compongono.
Il registro è costituito da dati organizzati in blocchi, crittograficamente legati tra di loro e aggiunti alla catena dopo aver raggiunto il consenso dei nodi della rete riguardo a un nuovo blocco, attraverso l’impiego di algoritmi di consenso, che rendono la blockchain trustless.
Infine, una blockchain può essere permissionless o permissioned, a seconda dell’impiego che se ne vuole fare. (CryptoWebAcademy)