Cos’è la blockchain? La Crittografia (Parte 3)

Un po di storia e tecnologie a supporto: la crittografia

Con questo articolo continuiamo l’introduzione alla tecnologia Blockchain andando ad analizzare un po’ più nel dettaglio alcune delle tecnologie a supporto. Analizzeremo la componente tecnologica necessaria a garantire la sicurezza e la privacy delle informazioni trattate e memorizzate nel registro blockchain: la “Crittografia”. 

Blockchain: Breve storia

Il concetto di Blockchain non è recente. Le prime teorie nascono agli inizi degli anni 90, ma nel 1991, due impiegati della Bellcore (poi diventata AT&T), Stuart Haber e W. Scott Stornetta, pubblicarono un articolo sul Journal of Cryptology intitolato How to Time-Stamp a Digital Document (https://www.anf.es/pdf/Haber_Stornetta.pdf), che ne definiva le fondamenta. I due ricercatori descrissero un metodo che, con l’ausilio di tecniche di crittografia, era in grado di memorizzare documenti in una catena di blocchi

L’obiettivo era quello di creare un registro permanente delle modifiche apportate al documento, in modo da evitare che se ne potessero confutare la data di emissione o quelle di modifica.

L’abstract dell’articolo recitava:

“The prospect of a world in which all text, audio, picture, and video documents are in digital form on easily modifiable media raises the issue of how to certify when a document was created or last changed. The problem is to time-stamp the data, not the medium. We propose computationally practical procedures for digital time-stamping of such documents so that it is infeasible for a user either to back-date or to forward-date his document, even with the collusion of a time-stamping service. Our procedures maintain complete privacy of the documents themselves and require no record-keeping by the time-stamping service.” 

“La prospettiva di un mondo in cui tutto il testo, gli audio, le immagini e i video sono in formato digitale e pertanto facilmente modificabili, viene sollevata la questione su quale strumento utilizzare per capire se quel documento sia stato modificato. Il problema avere un time stamping univoco del documento e dell’eventuale modifica, non il supporto. Proponiamo procedure computazionalmente pratiche per la marcatura temporale digitale di tali documenti in modo che sia impossibile per un utente retro-datare o inoltrare il suo documento, anche con la collusione di un servizio di marcatura temporale. Le nostre procedure mantengono la completa riservatezza dei documenti stessi e non richiedono alcuna registrazione da parte del servizio di marcatura temporale”.

I due ricercatori continuarono ad apportare miglioramenti al loro metodo di certificazione. La svolta arrivò nel 1992 quando fecero uso di una struttura dati in grado di garantire nel modo più efficiente e sicuro il suo contenuto, più efficiente e sicuro. Quest’ultima prende il nome di Merkle Tree o Hash tree, utilizzandola come struttura per la memorizzazione di più record all’interno di un singolo blocco del registro blockchain. Nel prossimo articolo dedicheremo ampio spazio agli Hash trees.

L’introduzione del Merkle Tree comportò un’ottimizzazione sia in termini di spazio di archiviazione dei blocchi, sia in termini di efficienza e scalabilità del sistema. Quando si parla di scalabilità di un sistema, si intende la sua capacità di poter supportare carichi di lavoro crescenti senza la necessità di dover ridefinire le strutture di base e i propri algoritmi di funzionamento.

Nacque così la struttura di base delle Blockchain attuali.

Nell’ottobre del 2008, un individuo o gruppo di individui sotto lo pseudonimo di Satoshi Nakamoto, con l’intento di riuscire a trasferire degli asset digitali cui è associato un valore e la proprietà degli stessi, da un individuo ad un altro in modo sicuro e senza l’intermediazione di terze parti, definì il primo progetto descritto in “Bitcoin P2P e-cash paper” che, in maniera completa, utilizza ancora oggi le caratteristiche e le innovazioni messe a disposizione dalla tecnologia Blockchain, ma con la caratterizzazione di aver reso decentralizzata tale tecnologia.

Nacque così la famosa criptovaluta bitcoin, la cui tecnologia verrà analizzata nel dettaglio nei prossimi articoli.

In seguito, molti altri hanno fatto uso della Blockchain per la gestione di transazioni di carattere economico.

Nel 2014 Vitalik Buterin, propose la Blockchain Ethereum cui è legata la criptovaluta (ether), (https://bitcointalk.org/index.php?topic=428589.0). A differenza di molte altre Blockchain nate fino a quel momento, con Ethereum vennero introdotte profonde innovazioni, una delle quali, fu quella di dare la possibilità di eseguire un algoritmo scritto nella Blockchain, e quindi la possibilità di creare delle vere e proprie applicazioni su Blockchain: le DAPP (Distributed Application).

Questa innovazione fu resa possibile grazie all’intuizione degli sviluppatori, che aggiunsero alla Blockchain uno strato software che si interponeva tra questa ed il mondo esterno, un layer di utilizzo definito EVM (Ethereum Virtual Machine), capace di interpretare ed eseguire le istruzioni della una nuova classe di programmi DAPP (Distributed Application) scritti in un nuovo linguaggio di programmazione Turing Complete chiamato Solidity.

Con il termine Turing Complete  si indica un linguaggio di programmazione in grado di eseguire con il medesimo risultato la stessa operazione al pari di qualsiasi altro linguaggio.

Successivamente molti sviluppatori clonarono la piattaforma Ethereum, creando altre Blockchain simili, ma tutte compatibili con le DAPP sviluppate per Ethereum.

La Crittografia

La crittografia è quella disciplina che si occupa delle “scritture nascoste“, ovvero, lo studio dei metodi per rendere un messaggio “offuscato” in modo da non essere comprensibile a persone non autorizzate a leggerlo. Fin dall’antichità, gli esseri umani hanno cercato un metodo per scambiarsi messaggi riservati in modo sicuro, in grado di offuscare e proteggere il contenuto di tali messaggi alle persone che non fossero i diretti interessati. 

Nel corso dei secoli i sistemi crittografici si sono evoluti passando dal semplice Cifrario di Cesare, in cui ogni lettera del testo in chiaro è sostituita nel testo cifrato o codificato, dalla lettera che si trova ad un certo numero di posizioni dopo nell’alfabeto (che ne rappresenta la chiave di lettura). In tal caso se il destinatario fosse stato l’unico a conoscere la chiave di lettura (es. 3 posizioni dopo nell’alfabeto), e l’informazione che Cesare avrebbe voluto inviare fosse stata:

ILGATTOSIMORDELACODA

avrebbe dovuto inviare il seguente messaggio crittografato:

LOJDWWRVLPRUGHODFRGD

Il destinatario conoscendo la chiave di lettura, per ogni lettera del messaggio, avrebbe dovuto effettuare la semplice sostituzione della corrispondente lettera dell’alfabeto, di 3 posizioni in avanti.

Questa semplicissima operazione può essere tradotta in termini matematici, con un’espressione che ne rappresenti la funzione di risoluzione del cifrario, avente come chiave di lettura 3 ed il numero di lettere dell’alfabeto, pari a 26.

Orbene, è chiaro che con l’avanzare dei tempi e con l’evoluzione dei mezzi di comunicazione che hanno imposto notevoli cambiamenti e limiti ai vecchi sistemi. La crittografia si è dovuta dotare di metodi più complessi di crittazione. Il fine è di rendere più complessa ai malintenzionati la decodifica dei messaggi cifrati, inventando degli algoritmi di cifratura e di decodifica molto complessi rispetto alla banale funzione matematica che risolve il cifrario di Cesare.

Uno dei metodi più sicuri, utilizzato anche dalla tecnologia Blockchain è quello della cifratura a chiave asimmetrica, sviluppata agli inizi degli anni ’70, e per lungo tempo utilizzata in segreto per scopi militari e di sicurezza nazionale.

Solo nel 1997 quando fu declassificata e resa pubblico dal governo britannico si potè utilizzarla nel mercato consumer.

Il più famoso degli algoritmi è denominato RSA, dalle iniziali dei 3 sviluppatori che l’hanno realizzato nel 1977 (Ron Rivest, Adi Shamir, Leonard Adleman).

La cifratura a chiave asimmetrica non utilizza una singola chiave di lettura, ma si basa sull’utilizzo di una coppia di chiavi definite Pubblica e Privata

La chiave Pubblica viene generata con un algoritmo che utilizza complesse funzioni matematiche applicate alla chiave Privata. Una volta ottenuta la chiave Pubblica, questa viene utilizzata per criptare un messaggio o un set di dati. 

La cifratura a chiave asimmetrica è di fondamentale importanza per la Blockchain. Infatti, una delle caratteristiche principali di questo metodo crittografico è che la chiave Pubblica può essere resa nota a chiunque senza rischi per la sicurezza dei dati crittografati. Questo metodo di cifratura permette la cifratura o crittazione con la chiave Pubblica, ma la decodifica o decrittazione può essere unicamente risolta la chiave Privata.

Questo è reso possibile in quanto con questo tipo di cifratura è possibile generare una chiave Pubblica dalla chiave Privata con diversi metodi matematici, ma non è possibile effettuare l’operazione inversa. Non esiste infatti una funzione matematica che permetta di risalire alla chiave privata partendo dalla chiave pubblica.

Lo schema seguente riassume e mostra graficamente un tipico caso d’uso di questa tecnica nel trasferimento di un semplice documento di testo.

Approfondiremo il discorso sulla gestione e calcolo della chiavi private, pubbliche e degli indirizzi pubblici quando parleremo di Bitcoin, riportando anche qualche esempio pratico.

Appuntamento al prossimo articolo dove parleremo in dettaglio dei Merkle Tree e del Bizantine General Problem.