Blockchain: crittografia e funzioni hash nel dettaglio
– Dalla rubrica di Gaetano Matarese, “Inside Blockchain” –
Nel terzo articolo della rubrica intitolato “Funzionamento della tecnologia Blockchain e delle sue tipologie” abbiamo visto le caratteristiche più comuni di tale tecnologia e le diverse tipologie presenti.
Se non lo hai letto ti consiglio di recuperare perché riprenderò solo alcuni concetti considerandone altri per scontati.
Oggi infatti entreremo più nel dettaglio del funzionamento delle catene di blocchi.
In particolare vedremo il contenuto di ogni singolo blocco e come funziona una transazione.
Prima di lasciarti iniziare la lettura qualche nota terminologica qualora tu fossi totalmente a digiuno di questi argomenti.
Buona lettura.
Alcuni termini di base
Durante il testo troverai l’utilizzo di alcuni termini tecnici in merito ai quali non dovrebbero esistere dubbi d’interpretazione.
Per evitare ogni futura incomprensione ne spiego il significato all’inizio.
Nodo
Per “nodo” s’intende un PC, dislocato in qualche parte del mondo e collegato alla rete che mette a disposizione le sue risorse per il funzionamento della rete.
Hai presente la tecnologia Peer to Peer e lo scaricamento compulsivo di film e software in torrent con l’annessa ricerca spasmodica di banda e server disponibili attraverso il compianto Napster, il buon Emule e compagnia?
Il funzionamento è lo stesso della Blockchain con una differenza notevole.
Nel caso del Peer to Peer ogni nodo(computer) si scaricava in locale e metteva a disposizione degli altri solo una parte del file (il software poi ricomponeva tutti i tasselli una volta scaricati).
Nella Blockchain ogni nodo si scarica tutti i dati (organizzati in blocchi di transazioni) dall’inizio alla fine e non avrà l’esigenza di trovare le informazioni mancanti tra gli altri nodi.
In termini pratici questo comporta che diventare “nodo” e contribuire al funzionamento di una blockchain richiede un PC con buona memoria.
Ovviamente dipende tutto dal volume di transazioni della rete.
Definiamo bene il termine transazione.
Transazione
Puoi considerare le transazioni di cui parliamo come uno scambio di informazioni tra indirizzi (più avanti vedrai quale forma hanno).
Ogni transazione viene registrata in un blocco insieme ad altre transazioni ed è sempre facilmente consultabile attraverso gli explorers di rete .
Nell’articolo ti spiego in che forma vengono registrate.
Struttura della Blockchain: un breve riepilogo
Prima di vedere la struttura di un singolo blocco ti riprendo alcuni concetti generali del precedente articolo sulla struttura generale delle blockchain (in italiano “catene di blocchi”, repetita iuvant).
Ti enunciavo in quella sede il vero punto di forza di tale tecnologia: la modalità di organizzazione dei dati.
Scrivevo nello specifico che “ogni serie di dati viene inserita in un blocco collegato al precedente e al successivo attraverso una funzione crittografica chiamata hash”
Aggiungevo inoltre: “i blocchi di dati collegati l’un con l’altro formeranno una catena di blocchi (la blockchain) e sarà sempre possibile recuperare i dati da ogni singolo blocco”.
Oggi possiamo spiegare meglio queste definizioni e capire perché tale organizzazione dei dati è fondamentale in relazione alle funzioni della blockchain.
Le funzioni della blockchain
Per illustrarti le singole funzioni generali della Blockchain parto dall’eccellente libro di Lorenzo Foti “capire la blockchain”.
L’autore individua le seguenti:
- saper dire chi è proprietario di un bene
- Difendere le proprietà di un bene
- Memorizzare tutte le transazioni
- Proteggere i dati
- Far avere le informazioni ai registri
- Aggiungere le transazioni ai registri
- Decidere in caso di non allineamento dei registri quale sia quello con l’informazione corretta
Vediamo nel dettaglio come le prime due funzioni vengono garantite dalla blockchain.
Saper dire chi è proprietario di un bene
La Blockchain organizza le informazioni di ogni transazione tramite tabelle immutabili.
In particolare per ogni transazione vengono conservate le seguenti informazioni:
- Quale bene è stato venduto
- Chi lo ha venduto
- Chi lo ha ricevuto
- Quando è stata fatta la transazione
- Quanto è stato pagato per la transazione
- Prova di effettiva volontà delle parti per la transazione
I dati contenuti in ogni tabella non vengono mai sovrascritti ma ne vengono sempre aggiunti di nuovi.
Facciamo subito un esempio con una transazione in criptovalute (uno dei diversi ambiti di applicazione della blockchain come saprai se hai letto gli articoli precedenti).
Ipotizziamo che Ugo debba pagare 0,05 BTC (bitcoin) a Cinzia.
Nelle tabelle del registro è sicuramente già conservata l’informazione del saldo di Ugo e Cinzia (rispettivamente identificati con un codice univoco).
In un blocco troveremo ad esempio “Il codice 56690 (Ugo) possiede 1 BTC” mentre in un altro “il codice 90879 (Cinzia) possiede 0 BTC”
La comunicazione della transazione consisterà nel seguente:
“Oggi 10 gennaio 2022 il codice 56690 (Ugo) che si è correttamente autenticato, toglie 0,05 BTC dal suo portafoglio e li passa al codice 90879 (Cinzia) che avrà 0 + 0,05 BTC”
Come vedi la frase precedente contiene tutti gli elementi dell’elenco sopra (eccetto quanto è stato pagato per la transazione perchè era un passaggio di valute).
In Blockchain tale transazione sarebbe stata inserita in un blocco dopo essere stata verificata da altri nodi.
In caso di esito positivo della verifica il registro aggiornato con le nuove informazioni dell’ultima transazione sarebbe stato replicato integralmente in più copie (tante quanti sono i nodi della rete blockchain).
Et voilà.. tutti possono sapere che il 10 gennaio 2022 il codice 56690 ha tolto 0,05 BTC dal suo portafoglio per passarli al codice 90879.
Tale sistema rende molto difficile un eventuale smarrimento dei dati o la loro modifica fraudolenta perché ogni registro è presente su più computer sparsi per il mondo e costantemente in contatto.
La decentralizzazione (distribuzione dei dati su più server) da sola, però, non è sufficiente a garantire la sicurezza della rete quindi la blockchain ha dovuto adottare delle procedure utili nell’impedire l’accesso ai dati e la loro modifica da parte di terzi non autorizzati.
In questo modo si preserva anche la proprietà di qualsiasi bene ma approfondiremo nel prossimo paragrafo.
Difendere proprietà di un bene
Per difendere la proprietà di un bene, come abbiamo visto nel paragrafo precedente, viene impedito l’accesso a chi non ne è proprietario.
Credo che arrivati a questo punto ti sia chiaro infatti che il funzionamento della blockchain si basi tutto sulle informazioni.
Per essere chiari: il nostro amico Ugo dell’esempio precedente aveva la possibilità di spendere 1 BTC perché in uno dei blocchi della rete era scritto che lui possedeva 1 BTC.
In teoria se ne avesse voluti spendere 2 gli sarebbe stato sufficiente trovare il blocco di informazioni contenente quell’informazione e modificarlo in “il codice 56690 possiede 2 BTC”.
Allo stesso modo Cinzia avrebbe potuto modificare il messaggio della transazione in “Il codice 56690 paga al codice 90879 3 BTC” in modo tale da guadagnare di più.
Semplice vero?
Mica tanto se consideri che ogni transazione passa sotto il controllo di altri nodi che hanno tutto l’interesse a mantenere la rete con transazioni autentiche.
Inoltre Cinzia per poter modificare la transazione avrebbe dovuto fingere di essere Ugo impossessandosi della sua “firma”.
Tutto ciò fa parte del sistema di sicurezza della blockchain che la rende “immodificabile”.
Tecnicamente tutto ció viene fatto attraverso due procedure matematiche estremamente efficienti in tal senso:crittografia e procedura Hash.
Crittografia
La crittografia ovvero il messaggio viene offuscato in modo da non essere comprensibile per persone non autorizzate a leggerlo.
Chi è autorizzato avrà a disposizione una “chiave crittografica” che servirà a decriptare il contenuto ovvero renderlo comprensibile.
In merito alla chiave in crittografia ho trovato una definizione molto pertinente su Wikipedia:
“stringa alfanumerica che implementa l’algoritmo di codifica/decodifica dell’informazione protetta”.
La chiave infatti può servire sia a criptare il messaggio che a decrittarlo.
Fin qui spero che sia tutto chiaro perché le cose si complicano un pochettino.
Esistono infatti due tipologie di crittografia:
- Crittografia simmetrica
- Crittografia asimmetrica
Di seguito te le spiego.
Crittografia simmetrica
La crittografia simmetrica utilizza una sola chiave sia per la cifratura del messaggio sia per la decifrazione.
Ad esempio A può inviare un messaggio criptato con chiave X a B che può decriptarlo con la stessa chiave.
La chiave X dovrà essere utilizzata anche da B per crittografare un’eventuale risposta ad A e da A per decrittare il messaggio.
Insomma la crittografia simmetrica prevede un’unica chiave per tutte le occasioni.
In Blockchain però vengono utilizzate due chiavi e quindi si parla di crittografia asimmetrica.
Vediamo in cosa consiste.
Crittografia asimmetrica
La crittografia asimmetrica prevede l’utilizzo di una coppia di chiavi, solitamente definite “chiave pubblica” e “chiave privata”.
Un messaggio criptato con una chiave può essere decriptato solo con l’altra e viceversa.
La chiave pubblica è quella destinata ad essere distribuita per ricevere messaggi mentre quella privata viene mantenuta segreta ed utilizzata come “chiave di decriptazione” e quindi una sorta di password.
Prendiamo il nostro solito esempio del messaggio da A e B utilizzando la crittografia asimmetrica.
Per prima cosa A deve ottenere la chiave pubblica di B.
Scriverà il messaggio e lo cripterà con la chiave pubblica di B prima di inviarglielo.
B riceve il messaggio e per poterlo leggere dovrà decriptarlo con la sua chiave privata.
Nessuno potrà leggere il messaggio in chiaro senza la chiave privata di B.
Con questo sistema la proprietà di un bene è difesa perché solo il mittente e il destinatario dell’informazione possono venire a conoscenza del contenuto originale.
La crittografia simmetrica però svolge altre due importantissime funzioni:
- Identifica gli utenti e le rispettive proprietà di un bene
- Offre una prova certa della volontà di vendita
In entrambi i compiti opera in concomitanza con un’importantissima procedura informatica denominata “Hash”.
Procedura informatica Hash
La procedura di Hash serve a difendere la proprietà dei beni a livello di ogni singola transazione.
In particolare:
- Firma ogni contenuto in modo diverso per non far copiare firma
- Rende possibile che tutti sappiano che firme sono autentiche e appartengono alla stessa persona
Come fa tutto ciò?
Una volta applicata ad un testo fornisce un “hash” del contenuto iniziale.
L’hash è una parola formata da un numero definito di caratteri.
Vediamo subito un esempio meramente didattico (la procedura verrà applicata in automatico dall’algoritmo).
Ipotizziamo di voler trovare un hash della frase “sto leggendo la rubrica Inside Blockchain”.
Per la nostra simulazione userò un sito comodissimo www.onlinemd5.com.
Attraverso il servizio che offre è possibile trovare l’hash di un file o di un testo.
Tra le diverse tipologie di hash ti suggerisco di utilizzare Sha256 perché è quello più comune.
Una volta completata l’operazione l’hash della nostra frase sarà il seguente:
DFBA732CECF7CB219400BDD5A7D811786679A89272962F5583BB529317EB8B83
Tutti gli hash devono avere determinate caratteristiche.
Caratteristiche degli Hash
Ogni hash per essere considerato attendibile deve possedere una serie di requisiti:
- Univoco:Applicando la stessa procedura di hash allo stesso testo non deve cambiare risultato
- Non deve essere possibile risalire ad Hash di un testo a partire da un altro Hash
- La procedura di hash non deve essere invertibile cioè non deve poter essere eseguita al contrario (da un hash non puoi trovare un testo)
- Deve essere molto difficile che due testi diversi abbiano lo stesso hash. Questa proprietà si chiama resistenza alle collisioni
Se manca uno dei precedenti punti non ti trovi davanti ad una procedura di Hash a regola d’arte.
Spero che ti siano chiari il funzionamento e le finalità di tale procedura perché è il fondamento di tutte le operazioni in Blockchain.
Nelle criptovalute, uno degli utilizzi più conosciuti della Blockchain, gli indirizzi pubblici di ogni utente e le rispettive chiavi private sono hash di testi contenenti determinate informazioni.
Per rendere un pochino più pratico quello che abbiamo visto ti illustrerò l’applicazione dei diversi concetti in un’ipoteca procedura di firma di un messaggio.
Procedura di firma messaggio
Ipotizziamo che A debba mandare un messaggio a B.
Prima di procedere t’invito a fare un piccolo sforzo di astrazione mentale ed iniziare a concepire:
- A e B come due nodi (due computer) di una rete blockchain
- Il messaggio come una serie di informazioni sulla transazione (ti ricordo che ogni transazione contiene specifiche informazioni e più transazioni costituiscono un blocco)
Le diverse fasi sono:
- A prepara il messaggio: in una transazione di criptovalute può essere ad esempio “ci sono 20 token nel wallet e A ne paga 2 a B”
- A applica procedura di hash su messaggio
- A cripta messaggio con la sua chiave privata
- A inserisce in transazione sia il messaggio non criptato sia il valore criptato dell’hash (passaggio fondamentale per permettere la verifica di ogni transazione)
L’ultimo punto merita un approfondimento perché è il primo elemento di garanzia dell’autenticità del messaggio e quindi della non contraffazione della transazione.
Grazie ad una delle proprietà dell’hash (elencate più sopra) testi uguali danno origine ad hash uguali quindi chi dovrà verificare il messaggio farà due semplici operazioni:
- applicherà la procedura di hash al testo in chiaro contenuto nel messaggio
- confronterà il suo risultato con l’hash inserito dal mittente
Gli hash sono uguali?
Il messaggio è originale.
La procedura di hash ha fatto il suo lavoro.
Conclusioni
Prima di tutto congratulazioni per aver raggiunto questo punto (se non hai letto tutto però torna sopra).
In questo articolo abbiamo visto solo alcuni obiettivi che la procedura di hash, in concomitanza con l’applicazione di tecniche crittografiche, ci aiuta a perseguire.
Nello specifico ti ho spiegato le modalità con cui un algoritmo blockchain riesce ad identificare l’esatto proprietario di un bene e a difenderne la proprietà anche durante le transazioni.
Spero che sia tutto chiaro ma in caso contrario non esitare a contattarmi per eventuali domande.
Nel prossimo t’illustrerò ulteriori funzioni tra quelle che ho elencato all’inizio.
A presto.