Blockchains, istruzioni per l'uso
Il seguente articolo è stato pubblicato nel numero 1/2-2019 del Notiziario dell’Ordine degli Ingegneri della Provincia di Verona.
Viene pubblicato qui grazie alla gentile concessione della Redazione.
Come funzionano le criptovalute, l’e-voting e le altre applicazioni di un sistema informatico ancora poco conosciuto
Negli ultimi tempi non trascorre giorno senza che un articolo, un programma televisivo o un comizio citi le “blockchain” come soluzione ultima di un qualche problema tecnico od organizzativo.
Tali promesse in realtà fanno sollevare più di qualche sopracciglio nel settore degli esperti di questa tecnologia. Pare quasi che la blockchain sia una cosiddetta oracle machine che genera verità e certezze indipendentemente dal suo uso e dai suoi limiti.
In questo articolo cercherò di spiegare di che cosa si tratta e a che cosa servono, e, soprattutto, perché non possono essere una soluzione per qualunque problema informatico.
Cos’è una blockchain
La blockchain è prima di tutto un’applicazione crittografica.
In generale la crittografia moderna si basa sull’uso di funzioni la cui inversione, in assenza della chiave di decodifica, è estremamente difficile in tempi utili. Nella crittografia asimmetrica, per esempio, il processo di codifica è una funzione che, da un testo in chiaro ed una chiave pubblica, nota a tutti, fornisce un messaggio criptato:
E = f (M, P)
M è il messaggio in chiaro, un blocco di dati, P la chiave ed E il messaggio codificato. Il processo di decodifica è una funziona analoga, ma con una chiave segreta S nota solo al destinatario:
M = g (E, S)
Le funzioni f (M, P) e g (E, S) sono funzioni la cui inversione è computazionalmente difficile. Calcolare direttamente
M = f -1 (E, P)
è possibile ma praticamente inutile, perché richiede di scomporre in fattori un numero molto grande, cosa che necessiterebbe effettivamente di molti anni anche impiegando tutte le risorse computazionali del mondo. Un’altra categoria di funzioni molto usata in crittografia è la funzione di Hash:
HM = H (M)
Tale funzione converte il messaggio M in un numero HM, solitamente molto grande (con 256 bit è un numero di 77 cifre).
L’hash ha due caratteristiche molto importanti:
- non si può risalire al blocco di dati iniziali, né ad uno che fornisca lo stesso risultato;
- due blocchi di dati diversi, anche per un solo bit, danno possibilmente due risultati diversi.
In pratica, dato HM non è possibile calcolare Mf in modo che H (Mf )= HM, e inoltre, per due blocchi di dati diversi A e B, si ha, con quasi certezza,
A ≠ B → H (A) ≠ H (B) . Poiché esistono un numero finito di cifre per , mentre i blocchi di dati sono infiniti, esiste sempre la possibilità di trovare una “collisione”. Dunque, l’hash è qualcosa di molto simile ad una firma, o impronta (fingerprint).
Ora, se prendiamo un blocco di dati, ne calcoliamo l’hash e inseriamo il risultato in un altro blocco, assieme ad altri dati, e poi di questo secondo blocco calcoliamo l’hash e lo inseriamo all’interno di un terzo blocco di dati, e così via, otteniamo una catena che ha l’interessante caratteristica di risultare immutabile per tutti i blocchi precedenti l’ultimo inserito.
Abbiamo creato così una blockchain: i dati possono essere
sempre inseriti in coda alla catena, ma tutto quanto è stato inserito precedentemente non è più alterabile, perché altrimenti tutte le firme
dei blocchi successivi sarebbero errate; a meno di non riscrivere tutti i blocchi, con le relative firme.
Se vogliamo che le modifiche siano rese evidenti, è sufficiente rendere pubbliche le copie della catena, in una rete di nodi. Un insieme di
regole, detto protocollo, stabilisce, oltre a come gestire la rete, come le modifiche si debbano propagare attraverso la rete. Abbiamo in questo modo definito un “registro” distribuito, detto ledger.
Le blockchain fanno parte delle DLT, Distributed Ledger Technologies, tecnologie a registro distribuito. La prima implementazione pratica di questo sistema è stata proposta nel 2008 nel _white paper _“Bitcoin: A Peer-to-Peer Electronic Cash System”, a firma di uno o più autori sotto
lo pseudonimo di Satoshi Nakamoto 1. Lo scopo dell’applicazione era quello di implementare un sistema affidabile di registrazione di transazioni economiche; un partecipante alla rete può inserire una transazione di unità di conto (token) all’interno del registro e [utilizzare] tali token per effettuare altre transazioni. Ad esempio, Alice potrebbe “acquistare” da Bob un certo numero di token (bitcoin, appunto). Bob trasmetterà alla rete la cessione di una quantità di bitcoin in favore di Alice. Alice, a sua volta, può trasferire alcuni dei propri bitcoin a Charlie, in cambio di un servizio
o di un bene; tale transazione sarà scritta anch’essa nella rete. Per le caratteristiche della rete, tali transazioni, una volta validate, non possono essere ripudiate. Suona familiare?
Il sistema bitcoin ha avuto una tale diffusione che poco per volta i suoi token hanno assunto un valore economico, attirando sempre più attori
interessati a partecipare. Se la prima transazione scritta nel ledger, nel
lontano 2008, era servita per acquistare una pizza in cambio di alcuni
bitcoin, nel 2017 il valore dei token era cresciuto fino a quasi 20.000
dollari per bitcoin, salvo poi crollare successivamente per questioni non
legate strettamente alla tecnologia utilizzata 2.
Nel frattempo sono nati altri sistemi basati su blockchain, con caratteristiche simili ma diversi dettagli implementativi; per lo più si tratta di sistemi monetari alternativi al bitcoin (criptovalute), ma la collaborazione di migliaia di sviluppatori, teorici e semplici entusiasti, ha portato ad individuare ed implementare anche sistemi per scopi differenti.
Come funziona un ledger distribuito
Abbiamo visto che una blockchain, al fine di essere realmente “immutabile”, deve essere distribuita tra molti partecipanti alla rete. Ogni volta che un nodo entra nella rete ed inizia a collaborare al sistema,
una copia del libro mastro (ledger) viene trasferito, blocco per blocco, al nodo stesso. Il nodo può autonomamente vagliare la bontà della struttura verificando le firme (hash) applicate ai vari blocchi.
Ciascun nodo può, a sua volta, partecipare alla rete aggiungendo dati alla catena. Tuttavia, è essenziale che la rete sia “robusta” nei confronti di comportamenti scorretti, che cerchino cioè di forzarne il funzionamento per scopi diversi. Ad esempio, è essenziale che i dati scritti nella catena siano utili e corrispondano a transazioni reali, poiché il processo di trasmissione e verifica delle firme richiede energia elettrica. Un nodo
o un gruppo di nodi potrebbe generare dati falsi al fine di rallentare
il funzionamento della rete; oppure alcuni nodi potrebbero cercare
di spendere più volte i propri token, generando transazioni diverse a partire dagli stessi blocchi (double spending). La rete deve essere in grado di rilevare e rifiutare tali comportamenti scorretti; e viceversa, il comportamento corretto deve essere incentivato al fine di attirare nuovi collaboratori.
Questo sistema di incentivo e disincentivo è realizzato tramite il _proof-of- work _e il mining. Il proof of work è una funzione matematica (Hashcash) che richiede molti calcoli per essere completata, e la soluzione è indispensabile per poter aggiungere dati alla blockchain. Una specie di francobollo 3. Il mining, invece, è il processo di verifica e generazione di nuovi blocchi, e garantisce una percentuale della transazione o dei nuovi bitcoin creati a chi completa il mining. Il double spending viene risolto implicitamente con la sincronizzazione della rete.
Quando un nuovo blocco viene generato ed aggiunto alla catena, esso non viene automaticamente accettato nel registro, ma deve essere prima validato da un certo numero di nodi della rete, in genere almeno 3 o 4.
In caso di double spending, si avranno due catene concorrenti (“fork” temporaneo), ma solo quella con il più alto numero di validazioni potrà essere accettata. Si tratta di una votazione a maggioranza qualificata.
Per ottenere un double spending, un attaccante deve possedere il 51% delle risorse della rete. Tale attacco alla blockchain è detto appunto “del 51%”, ed è stato effettivamente portato a termine sulla rete Ethereum Classic 4.
Per assegnare la “proprietà” dei token ai relativi partecipanti, si utilizza un sistema di indirizzamento basato su crittografia asimmetrica a chiave pubblica. Ciascun partecipante ha assegnato uno o più indirizzi, detti Wallet, portafogli. Ciascun Wallet è costituito da una coppia di chiavi, una pubblica, l’indirizzo del wallet appunto, e una privata, segreta, che permette di accedervi. Persa la chiave privata, il Wallet è bloccato per sempre 5.
Il ledger con il sistema così costruito contiene al suo interno tutte le transazioni tra tutti i wallet attivi sulla rete, identificati dai relativi indirizzi.
La conseguenza di ciò è che i Bitcoin non sono, a differenza
di quel che si dice, “non tracciabili”. Il ledger trascrive tutte le
transazioni, a cominciare dalla prima, e le ricorda. L’indirizzo “1CXup5BRrEFuBHDeQcduCvfu3P48rXHrck”, per esempio, è stato utilizzato per raccogliere i riscatti delle truffe dei filmini pornografici. Ha raccolto 0.73BTC (circa 2500€) in 19 transazioni fino a settembre 2018, e al momento è vuoto 6.
Non sappiamo a chi sia assegnato quell’indirizzo, perché i bitcoin sono soltanto anonimi, in quanto non hanno un nome e cognome collegato. Ma sono tracciati, e prima o poi, i soldi escono dal virtuale, i beni reali devono essere recapitati, le auto intestate, e così via.
Pubblico, privato o misto
Quella fin qui descritta è una possibile implementazione di una blockchain con regole peer to peer, in cui tutti i partecipanti hanno gli stessi permessi di accesso al ledger. Non vi è alcun nodo che ha funzioni diverse, di controllo o di regolazione, da tutti gli altri. Ciò implica, come visto, alcune problematiche, ad esempio, il sistema di premio/incentivo alla partecipazione.
Alterando un po’ le regole, è possibile ottenere strutture meno
distribuite e più centralizzate. Ad esempio, una delle possibilità è limitare l’accesso in scrittura al ledger, utilizzando la crittografia come sistema
di autorizzazione, mantenendo però l’accesso pubblico alla lettura e verifica dei blocchi. Si implementa così un sistema privato (o ibrido, misto, a seconda del grado di limitazione all’accesso) e si ottiene il risultato di correggere alcuni dei problemi delle reti peer-to-peer, tuttavia si rinuncia ad una parte del controllo sul ledger e si introduce un intermediario, al quale si conferisce la fiducia sul buon funzionamento.
Tale fiducia deve essere relativa non solo alla volontà di condurre il proprio ruolo con buona fede, ma anche la capacità di farlo garantendo la sicurezza globale del servizio, in termini di confidenzialità, integrità, continuità per tutta la durata prevista.
L’opportunità di conferire tale fiducia, e dunque l’adeguatezza di tale sistema per lo scopo al quale deve assolvere, va valutato con estrema
attenzione ed è uno dei punti cruciali della progettazione di un sistema
a blockchain. Un sistema privato può essere adeguato quando i dati
che la blockchain deve gestire hanno un interesse privato o di un
ristretto numero di attori, e quando la violazione della fiducia non porta
ad un danno rilevante; viceversa quando la blockchain mantiene dati
di interesse pubblico ed in cui la violazione delle regole porta ad un danno importante, sarebbe preferibile un sistema peer-to-peer, il quale però richiede la partecipazione di un alto numero di nodi, una cosa non sempre facile.
Non è una scelta da poco: gli utenti potrebbero non fidarsi dei gestori di una blockchain mista pubblica/privata, e dunque rifiutare il servizio.
È questo uno dei punti che ad oggi fanno preferire le criptovalute pubbliche come bitcoin ed ethereum a sistemi privati o ibridi come Ripple, anche se sostenuti da entità pubbliche importanti come banche e università.
La blockchain fa al caso mio?
Come capire se un’applicazione trae vantaggio dall’uso della blockchain? Come dovrebbe essere chiaro, la blockchain non è semplicemente
un mezzo per registrare dei dati, né un oracolo che dà risposte giuste indipendentemente dalla bontà dei dati in essa scritti.
È invece un sistema molto complesso che cerca di garantire l’integrità dei dati inseriti non solo grazie alla crittografia, ma anche attraverso la ripartizione dei rischi su diversi attori coordinati da un set di regole, il protocollo. Questo obiettivo si ottiene al costo di una partecipazione massiva di tanti nodi, e all’utilizzazione di una grande quantità di energia e risorse.
La valutazione dunque deve tener conto sia delle esigenze in termini di sicurezza, trasparenza, integrità e disponibilità del servizio, sia in termini di costi per il mantenimento di tale infrastruttura. È assai probabile che in mancanza di un interesse pubblico evidente, la scelta più opportuna potrebbe essere verso altre tecnologie classiche, come Database distribuiti High Availability.
Alcune applicazioni della Blockchain
A questo punto, vale la pena analizzare alcune applicazioni possibili, reali o teoriche, delle blockchain.
Criptovalute
La criptovaluta è la prima e di sicuro la più importante applicazione della blockchain. Non è un caso se il paper da cui tutto trae origine s’intitola Electronic peer-to-peer cash system.
Il denaro è, nell’intenzione di Nakamoto, l’applicazione perfetta della blockchain: deve essere sempre disponibile, trasparente, affidabile, possibilmente reso indipendente da un “potere centrale” che ne
possa fare arbitraggio, e, naturalmente, non deve essere inflazionabile
né spendibile due volte. Tutte caratteristiche che il sistema della DLT pubblica può garantire. E in effetti il più grande risultato dei Bitcoin e delle altre omologhe (ethereum, monero, eccetera) è stato quello di permettere a milioni di persone dei paesi detti “del terzo mondo” di scambiare denaro con bassissimi costi di intermediazione grazie ai telefonini. Esistono anche criptovalute “ibride”: l’esempio più importante è Ripple (XRP). La sua diffusione, tuttavia, è per lo più spinta dall’accettazione da parte di banche ed istituti di credito, che fanno da validatori.
Ad oggi sussistono diversi problemi legati all’uso delle criptovalute, da una parte legate alla sicurezza del sistema, dall’altra legata all’accettazione legale di tali metodi di pagamento.
Smart Contracts
Un sistema di smart contracts è un’applicazione avanzata della Blockchain, in cui nei blocchi della catena sono inseriti programmi che verranno eseguiti dai nodi della rete al verificarsi di determinati eventi. Tali programmi sono detti “Contracts”.
In uno smart contract, le clausole sono automaticamente realizzabili:
“Se alla data X il prezzo p del bene z supererà il valore di y, allora Alice pagherà a Bob la differenza tra il prezzo e y”. Questo è un esempio
di contratto, un classico future. In uno smart contract, tale clausola è codificata in un linguaggio applicativo specifico, per cui quando la condizione in premessa si realizza (Data X, p > y) la rete esegue l’azione (Alice effettua la transazione verso Bob di p - y ).
_Ethereum _è una blockchain che supporta gli smart contract **7 **con un linguaggio applicativo turing-completo. Il problema, ancora irrisolto, è fare in modo che le premesse siano alimentate da condizioni “fidate”, visto che una transazione in una blockchain non è (facilmente) cancellabile.
In molti contesti è difficile garantire o verificare che le condizioni siano davvero verificate, si pensi per esempio a valori letti da sensori, che possono essere alterati da rumore, guasti o artificiosamente, o, peggio,
a condizioni difficilmente quantificabili o misurabili. Supponete di dover codificare o quantificare lo scoppio di una guerra o il verificarsi di eventi umani (“Gwendalyn si separa dal marito”). Le blockchain non sono oracoli (“_Oracle machines” _8), non danno “per magia” la verità delle cose. Sono piuttosto sistemi che garantiscono che Garbage in, Garbage Out, se inseriamo dati falsi in una blockchain, otterremo risultati falsi.
Pertanto, finché non ci saranno sistemi hardware fidati (trusted) in grado di garantire la “verità” del verificarsi delle condizioni, sarà assai difficile che tali sistemi abbiano grande diffusione.
E-voting
Non passa giorno senza che i sostenitori della democrazia digitale ci spieghino come la Blockchain risolverà il problema del voto digitale. Purtroppo, non sarà mai così per una lista lunghissima di problemi, non da ultimo, quello, come visto per gli smart contracts, della fiducia nella piattaforma che trasforma il voto “analogico” (la volontà dell’elettore) in un dato digitale. Chi può garantire che pigiando il pulsante X sullo schermo il voto vada effettivamente a X?
Purtroppo non è neanche l’unico problema del voto elettronico, anzi. Ben più problematico è il fatto che il voto democratico si fonda sulla segretezza (anonimità) del voto e sulla garanzia del sistema di conteggio. Per ovviare al problema della fiducia nel sistema di voto, occorrerebbe contemporaneamente un voto anonimo che sia verificabile, cosa che è in palese contraddizione: se l’elettore potesse verificare il proprio voto, non sarebbe segreto, poiché chiunque potrebbe costringere l’elettore a rivelarlo.
E, infine, è tutt’altro che raccomandabile far sì che l’elettore possa votare al di fuori dei seggi, personalmente, senza coercizione alcuna. L’assenza di coercizione è garantita, entro limiti precisi, dall’anonimità del voto e dall’esercizio del diritto in un luogo pubblico (il seggio).
Dobbiamo quindi rassegnarci in quanto è evidente che il sistema di voto migliore è e sarà sempre quello lento e apparentemente demodé della matita e della scheda, proprio perché in questo modo è assai più complesso e difficile perpetrare brogli. In un sistema digitale, invece, per sua propria natura potrebbero bastare poche righe di codice.
Considerazioni finali
Come abbiamo visto in questo articolo, la blockchain non è un semplice contenitore di dati. È un contenitore che garantisce la sua integrità
grazie alla trasparenza dei dati e all’inviolabilità della crittografia. Tale caratteristica si raggiunge al costo di una notevole complessità di implementazione e a costi di gestione molto alti, che, in assenza di una chiara esigenza, ad esempio l’interesse pubblico, potrebbero non essere giustificati.
Diversi studi anche recenti hanno inoltre mostrato che oltre 9 startup su 10 impegnate in progetti di blockchain non sopravvivono oltre il secondo anno, cosa che costituisce un risultato pesante anche nel panorama altamente volatile delle Startup.
Ma come si è visto, forse la tecnologia DLT è stata fraintesa, e abusata. Pur non volendo trascurare le sue potenzialità, è evidente che è ancora materia di ricerca e molti aspetti devono essere ancora approfonditi
e chiariti. È compito nostro, come ingegneri, di non cadere nella facile trappola della moda, e spero che questa trattazione abbia un po’ contribuito a chiarire le idee. ■