lunedì 11 luglio 2016

La Blockchain spiegata. Cosa è? Come funziona? Come si usa?


Blockchain è diventata una parola magica: la si sente praticamente dappertutto, dagli ambienti tecnologici alla finanza. Addirittura si sente affermare (e non è una esagerazione nella opinione di chi scrive) che la Blockchain rivoluzionerà il mondo più di quanto abbia fatto Internet stessa. Ciò nonostante, cosa sia effettivamente è un concetto ancora sfuggente ai più.
Sul web si trovano spiegazioni assai complete ma molto tecniche assieme a spiegazioni semplici ma troppo generiche. Proviamo qui a fare un po' di chiarezza e sintesi, mettendoci in una posizione intermedia fra questi estremi. Chiedo scusa in anticipo agli esperti di blockchain che certamente troveranno inesattezze o semplificazioni estreme in quanto ho scritto, d'altra parte meglio un articolo un po' imperfetto ma esistente che uno non esistente perché mai perfetto abbastanza! Take it easy ;)

Generalità
Innanzitutto chiariamo che la Blockchain nasce col Bitcoin e ne costituisce la tecnologia core, ma qui non parleremo di Bitcoin, se non in maniera molto superficiale e come esempio, poiché questa criptocurrency non è che una singola applicazione della blockchain: la Blockchain sta a Bitcoin come Internet sta alla e-mail. Ci interessa qui essere più generali (ma non generici) e comprendere cosa sia nel dettaglio la blockchain, come funziona e perché funziona.
In termini tecnici, la Blockchain è un database contenente transazioni, distribuito su svariati server. Ciò significa che, per quanto grande possa essere questo "diario delle transazioni" esso è replicato migliaia di volte su migliaia di server, geograficamente distribuiti, chiamati "nodi". Ossia la Blockchain è un registro di transazioni implementato su un sistema infrastrutturale di grandi dimensioni, distribuito su scala geografica, sul quale è possibile costruire applicazioni. E queste, per loro stessa natura, possono essere le più svariate possibili.
Per comprendere meglio i dettagli della Blockchain è necessario avere ben chiaro cosa sia una transazione. Questo termine ha diverse accezioni in campo giuridico, legale, economico e informatico; qui ci interessa per il momento quest'ultima. Vedremo in seguito però che la tecnologia implementata dalla Blockchain può servire applicazioni che si occupano dei più disparati tipi di transazioni.
In IT, il termine transazione deriva dalla teoria dei database relazionali. Sostanzialmente, in questo ambito, una transazione è un insieme di operazioni di lettura-scrittura effettuate sui dati; il complesso di queste operazioni deve garantire che, in caso di successo, il risultato sui dati deve essere persistente, mentre, in caso di insuccesso, tutto deve tornare allo stato preesistente, ossia come se la transazione non avesse mai avuto inizio. Questa caratteristica delle transazioni è garantita da un insieme di proprietà dette ACID, acronimo che sta per Atomic, Consistent, Isolated, Durable. In altri termini, una transazione che sia veramente tale deve essere: 1) Atomic; ossia atomica: sebbene composta da sotto operazioni, la sua esecuzione deve essere completa o nulla, non sono ammesse esecuzioni parziali. 2) Consistent; questa proprietà sta a indicare che lo stato della base dati deve rimanere coerente prima e dopo la transazione, sia che questa si concluda in modo corretto, sia che venga abortita. Cioè la transazione non deve in nessun caso corrompere i dati, violare vincoli di integrità o qualsiasi altra modifica che alteri lo stato della base dati preesistente alla transazione. 3) Isolated; questa proprietà indica che ciascuna transazione deve essere eseguita in un contesto indipendente da ogni altra transazione di modo che l'eventuale fallimento di una transazione non possa influire sull'andamento di altre transazioni che le sono simultanee. 4) Durable, che in italiano possiamo tradurre con Persistente; una volta che la transazione si sia conclusa con successo, questa modifica deve essere salvata in modo persistente sulla base dati, ossia non deve essere più smarrita per alcun motivo.
Un esempio banale di transazione può essere un pagamento con carta di credito: se il pagamento va a buon fine l'importo sarà inesorabilmente scalato dal conto, se non va a buon fine lo stato del conto deve essere quello preesistente al pagamento. Inoltre il pagamento deve essere isolato da altri pagamenti simultanei e il suo effetto deve essere persistente sul conto. Nessuno accetterebbe di effettuare un pagamento se non fossero assicurate tutte le proprietà ACID che definiscono il concetto stesso di transazione.
A questo punto che abbiamo un po' più chiaro il concetto stesso di transazione, chiediamoci chi è che decide se l'esito di una transazione è positivo o negativo. In altre parole, tornando all'esempio fatto, quando ci accingiamo a pagare con la nostra carta di credito, chi è che decide se la transazione avrà successo o, al contrario, verrà respinta? Nel caso degli attuali sistemi di pagamento transazionali, esiste una terza parte che garantisce l'esito della transazione. Ad esempio garantisce che il cliente sia effettivamente chi dichiara di essere, possieda effettivamente il denaro per pagare e così via.
La Blockchain è fatta in modo che per verificare l'esito di una transazione non sia necessaria una terza parte fidata, ma fa in modo che sia il sistema stesso a decidere. Ma come? Poniamo qui l'accento soprattutto sul termine "fidata", trusted in inglese, poiché questo è un punto cruciale. Se la terza parte che valida la transazione non è fidata cade l'intero meccanismo che sta alla base della transazione, cioè non saremmo davvero più in grado di dire se una transazione sia valida o meno.
Per comprendere meglio questo aspetto cruciale, proviamo per un attimo a estendere il concetto di transazione ai più svariati aspetti del commercio. Ossia, allo scambio di beni e servizi che oggigiorno avviene su scala planetaria alla velocità di Internet. Transazioni sono pertanto gli acquisti su un sito di e-commerce, un bonifico online, la cessione di un immobile, perfino un comune pagamento in contanti e quant'altro ci viene in mente.
Nel mondo reale, per ratificare la validità di una transazione ricorriamo a banche, notai, organismi finanziari, banconote. Questi organismi sono chiamati terze parti fidate (trusted third parties), ad esempio, la Banca Centrale Europea (BCE) garantisce che le banconote che abbiamo nel nostro portafogli abbiano un certo valore che è sostanzialmente stabile nel tempo e che queste banconote saranno accettate come sistema di pagamento in tutta quella parte dell'Unione Europea che ha adottato l'Euro come moneta. Queste terze parti hanno però diversi svantaggi, uno su tutti: per ratificare le transazioni normalmente richiedono il pagamento di una somma di denaro, non sono cioè gratuiti, hanno un costo (chiunque sia andato da un notaio sa di cosa parlo) e, per di più, quanto sono realmente trusted? Chi verifica il grado di fiducia che possiamo ragionevolmente riporre in una terza parte?
Per avere una sensazione di quanto queste domande siano profonde, basterà citare le origini della criptocurrency Bitcoin. Questa, come è noto, nacque nell'autunno del 2008, subito dopo il crack della Lehman Brothers e la conseguente crisi che ne derivò, crisi soprattutto di fiducia proprio in quegli organismi di terze parti che avrebbero dovuto verificare ma che evidentemente avevano fallito nella loro missione. E tutto il sistema ne pagò le consegiuenze mostrando che nell'economia attuale la crisi della fiducia fra i partecipanti del mercato porta a conseguenze disastrose: nessuno si fida di nessuno, nessuno presta più denaro a privati o aziende e l'intera economia collassa. Fu ciò che avvenne in quel 2008 quando, non per caso, comparve l'ormai storico articolo di Satoshi Nakamoto (probabilmente un nickname visto che il vero autore, o autori, della Blockchain restano tuttora anonimi), che prometteva un sistema di moneta elettronica peer-to-peer che avrebbe consentito pagamenti online "senza passare attraverso istituzioni finanziarie".
Ecco il punto centrale: con l'adozione di una moneta virtuale come Bitcoin, questa terza parte fidata non è un ente particolare bensì un registro pubblico (Ledger) che tiene traccia in tempo reale di tutte le transazioni da sempre effettuate con Bitcoin. Questo registro è memorizzato in una rete distribuita di calcolatori ed è disponibile a chiunque. In definitiva chiunque può consultare o scaricare il registro e letteralmente seguire il percorso fatto da ciascun singolo Bitcoin dalla sua creazione fino all'ultima transazione in cui è stato utilizzato.
Nel caso dell'applicazione Bitcoin, la Blockchain coincide con questo registro. O, per meglio dire, ne costituisce la tecnologia fondante.
Essendo memorizzata in migliaia di nodi e aggiornata in modo pubblico e pressoché simultaneo su ciascun nodo, la Blockchain garantisce che una determinata transazione è realmente avvenuta. Se, per esempio, un agente malevolo tentasse di attaccare un nodo, o di falsificare anche una sola transazione, ad esempio atta a dimostrare di possedere un quantitativo di Bitcoin che in realtà non ha, ecco che i rimanenti nodi non sarebbero allineati su quella transazione che pertanto produrrebbe il fallimento di ogni altra transazione successiva che tentasse di "spendere" quei Bitcoin non realmente posseduti. Questa verifica, fatta in maniera distribuita su migliaia di nodi, viene eseguita da programmi detti Miner che utilizzano allo scopo un complesso algoritmo matematico. Solo se la maggioranza di nodi è d'accordo la transazione è valida. È come se esistesse un registro pubblico contenente tutti gli estratti conto in euro, completi di movimenti, attraverso il quale è possibile tracciare il movimento di ogni singolo euro e verificare se, per esempio, ogni partecipante a una transazione possiede davvero la soma di denaro necessaria. È come se un notaio virtuale, distribuito e non controllabile da nessuno (governo, banca o azienda privata) ratificasse ogni singola transazione, ma senza alcun costo aggiuntivo per gli utenti.
Il punto di forza di questa tecnologia è che la Blockchain non fa distinzione se si sta parlando di moneta (reale o virtuale) o di un qualsiasi altro bene che può essere scambiato nel mondo reale. Ad esempio gli utenti della Blockchain possono decidere che un elemento di scambio è una somma di denaro, un certificato di proprietà o quant'altro.
Ma, come abbiamo premesso, non vogliamo qui focalizzarci sui Bitcoin ma solo comprendere il modo di funzionare della Blockchain. Quindi facciamo anche un altro esempio in cui la Blockchain può costituire l'infrastruttura tecnologica in grado di ospitare applicazioni trusted per il mondo reale.
Pensiamo al sistema di voto: la tecnologia Blockchain può tenere traccia delle schede elettorali facendo in modo che ogni votante, pur conservando l'anonimato, esprima la sua preferenza solo una volta e che, viceversa, ciascuna scheda possa contenere un unico voto. Oppure pensiamo a un sistema che consenta di tracciare le gemme con un identificativo che ne esprima la provenienza, la lavorazione e ogni passaggio di proprietà, dalla produzione al gioielliere a ogni altro acquirente successivo. Un sistema simile previene la frode perché ogni gemma avrebbe una identità e una provenienza del tutto pubblica e verificabile direttamente consultando la Blockchain. Pensiamo ancora a un sistema che possa garantire la provenienza di un pezzo di carne, di una verdura o di un barile di petrolio. Simili applicazioni già esistono e sempre di più ne verranno create man mano che la tecnologia diverrà più matura.

Implementazione
In questo paragrafo scenderemo nei dettagli implementativi della tecnologia Blockchain e sono richieste alcune nozioni di base della teoria delle basi di dati e di crittografia.
La Blockchain è un database. In particolare, è un database distribuito su migliaia di nodi, ad accesso pubblico, crittografato per garantirne la sicurezza, costantemente sincronizzato allo scopo di tenere costantemente aggiornate le transazioni.
La Blockchain deve il suo nome al fatto che le informazioni al suo interno (una somma di denaro, la prova di un'avvenuta transazione bancaria come un bonifico, ma anche un contratto, una scheda elettorale, una identità digitale, un certificato di autenticità e quant'altro possa venirci in mente) sono immagazzinate (letteralmente programmate) in blocchi, ciascuno dotato di timestamp e identificativo univoco e legati uno all'altro in una catena (chain, appunto) in maniera crittografica attraverso l'hash del blocco precedente, il che garantisce la sicurezza e la consistenza delle informazioni in quanto l'hash cambia se per qualsiasi motivo un blocco viene alterato o corrotto. Le identità stesse dei partecipanti alla Blockchain sono generate localmente e non esiste alcun registro centralizzato che possa essere corrotto o attaccato.
In che modo il sistema è attaccabile? Ad esempio mediante pseudospoofing o Sybil attack, un attacco informatico in cui un hacker crea un grande numero di identità fittizie su un sistema peer to peer allo scopo di guadagnare influenza, il che su un sistema basato sulla reputazione, ha valore critico. Blockchain contrasta questa debolezza rendendo onerosa la creazione di identità digitali, ossia richiedendo una grande quantità di calcolo e risorse fisiche e reali (come l'elettricità consumata per alimentare i server). Questa Proof of Work (PoW), ad esempio hashcash, viene espressamente richiesta per approvare una transazione su Blockchain e l'algoritmo matematico che sta alla base della tecnologia decide che, in presenza di più copie della Blockchain disallineate, ciascun nodo deve preferire quella che presenta più PoW. Il sistema così è robusto in quanto nessun individuo o piccolo numero di individui può avere una potenza di calcolo superiore al 50% dei partecipanti alla Blockchain pertanto una transazione che sia validata dal 50%+1 dei nodi è dichiarata trusted.
Ovviamente, man mano che avvengono le transazioni e vengono registrate nella catena, la lunghezza e la complessità della Blockchain aumenta. Questo rende problematico la sincronizzazione in tempo reale di migliaia di nodi e soprattutto rende sempre più costoso il PoW richiesto, rendendo meno accessibile l'uso stesso della tecnologia. Queste issues sono tuttora aperte e si aggiungono alle perplessità rimostrate da numerose istituzioni che sono preoccupate per le vulnerabilità di un sistema che si propone di soppiantarle a favore di un modello puramente peer to peer.

Conclusioni
La Blockchain è oggi una realtà e introdurrà vere e proprie rivoluzioni nel modo in cui scambiamo informazioni e asset attraverso la rete. Troppo spesso mitizzata, come tutte le tecnologie soffre di controindicazioni e punti di debolezza che non vanno mai dimenticati. Il primo passo è conoscere, il secondo è studiare. Per il primo crediamo di aver dato un piccolo contributo con questo articolo, per gli altri è necessario aggiornarsi di continuo. D'altra parte il web è letteralmente pieno di risorse da esplorare.
Qui di seguito vi segnaliamo alcune interessanti applicazioni e startup che usano una implementazione open di Blockchain chiamata Blockstack.

  • Onename: applicazione per la gestione di identità digitali basata su Blockchain. 
  • LaZooz: applicazione per la mobilità urbana.
  • Ujo Music: interessante startup peer-to-peer per musicisti.

2 commenti:

  1. Bellissimo articolo. Se posso, aggiungo questo al problema delle transazioni distribuite e della consistenza: http://research.google.com/archive/spanner.html

    Tra un po' avremo il "Google" come moneta... :)

    RispondiElimina

I commenti di questo blog sono moderati. Pensa prima di scrivere...