Blockchain: cos’è un HASH?

Blockchain: cos’è un HASH?

Come abbiamo visto in questo post, la targa del taxi cambia in base alle persone che trasporta!

Facciamo un passo indietro. Se non hai letto il post in cui spieghiamo com’è fatto il blocco di una blockchain e quali informazioni contiene, ti consiglio di dare un’occhiata qui.

Nel post abbiamo paragonato il blocco di una blockchain ad un taxi giallo: abbiamo visto da quali elementi è composto il nostro taxi e come fanno le persone a lasciare la stazione dei treni a bordo del taxi.

Nell’esempio dei nostri taxi, abbiamo accennato anche al concetto di HASH ed abbiamo detto che l’HASH è la targa della macchina, l’impronta digitale della vettura.

Abbiamo anche detto di immaginare però che al momento di caricare le persone sul taxi, la macchina non abbia ancora una targa. La targa viene generata di volta in volta. In che modo?

Sul taxi c’è una piccola scatola nera in cui il tassista inserisce diverse informazioni tra cui alcune di quelle che abbiamo già visto sempre nel post precedente:

  • l’orario di partenza 
  • gli account anonimi (o ancora meglio pseudonimi) dei passeggeri ed i messaggi che trasportano. 
  • la “targa speciale” del veicolo che è partito prima di lui (speciale perchè è anch’essa generata con le regole che stiamo scoprendo insieme)

In base a queste informazioni, che il taxista inserisce in una immaginaria scatola nera, quest’ultima calcola e restituisce la targa del taxi!

Se anche solo una virgola delle informazioni inserite cambia, la targa del taxi non sarà più la stessa (potrebbe cambiare completamente!).

Vediamo nel dettaglio come funziona l’HASH, ovvero la targa dei nostri taxi.

INDICE ARGOMENTI

1) L'impronta digitale di un documento.

Ogni persona ha un impronta digitale. Ciascuno ha un’impronta digitale diversa. Così come le targhe dei taxi.

Semplice e banale. Questo è un concetto che ormai conosciamo e diamo per scontato. 

La polizia utilizza costantemente questo sistema per identificare le persone. Anche nell’Italia di oggi, quando ti rechi in comune per il rinnovo del passaporto, per esempio, ti viene chiesto di lasciare l’impronta digitale dell’indice.

Quell’impronta serve per identificarti. Esiste la possibilità di avere l’impronta digitale identica a quella di un altro individuo? Poco probabile ma possibile.

La probabilità di trovare qualcuno con la tua stessa impronta è di 1 su 60 milioni per l’esattezza.

Cosa succede se porto lo stesso concetto di “finger print” su un documento digitale? Esiste la possibilità di dare un’impronta univoca che identifica un documento digitale?

HASH di un documento

2) L'HASH è l'impronta di un documento digitale.

Si, è possibile portare lo stesso concetto di finger print su un documento digitale. 

La soluzione esiste, si chiama HASH ed è stata inventata dalla NSA (National Security Agency) Americana. 

In particolare, la blockchain utilizza un algoritmo di hashing che prende il nome di SHA256. SHA sta per Secure Hash Algoritm. 256 è il numero di bit (ovvero di ‘0’ o ‘1’) che l’HASH occupa in memoria.

L’HASH in questione è lungo 64 caratteri e consiste di cifre e numeri. 

Siccome l’HASH è esadecimale, i numeri che lo compongono vanno sempre da 0 a 9, mentre le lettere vanno da A ad F e rappresentano i numeri da 11 a 16. 

In questo blog abbiamo dichiarato fin dall’inizio di voler spiegare in termini semplici argomenti complessi. Come possiamo quindi immaginarci il concetto di HASH ed il suo funzionamento? 

Possiamo immaginare l’algoritmo come una specie di scatola nera. Come abbiamo detto quando abbiamo immaginato il modo in cui viene generata la targa del nostro taxi. Tu inserisci dei dati nella scatola nera, e quella ti restituisce la targa del taxi.

Qualsiasi cosa tu inserisci nella scatola nera, ti viene restituito un output alfanumerico della lunghezza di 64 caratteri che rappresenta l’impronta digitale di ciò che hai inserito nella scatola nera. Come nell’immagine qui sotto. Inserisco i dati del taxi del nostro esempio e lui genera una targa di 64 caratteri.

HASH 256

Una cosa molto importante da ricordare: l’HASH non funziona solo con i documenti di testo. Nella scatola nera puoi inserire qualsiasi tipo di documento digitale: audio, video, testo, software…

3) Come funziona l'HASH

Proviamo a giocare con l’HASH per capire come funziona. 

Per fare questo ci viene in aiuto Anders Brownworth con questo link:

https://andersbrownworth.com/blockchain/hash

Useremo spesso le pagine web di Anders Bronworth perché ci danno la possibilità di sperimentare e vedere in pratica i concetti di cui stiamo parlando.

Al link trovi una rappresentazione più attinente alla realtà della scatola nera che stiamo descrivendo e puoi vedere la funzione di hashing all’opera.

Prova ad inserire un testo nel campo “Data”. Ogni nuovo elemento (lettera, numero, punteggiatura, spazio..) che inserisci fa ricalcolare l’HASH. 

Facciamo un esempio. 

Inseriamo nel campo DATA tutto ciò che abbiamo visto dover inserire il tassista del nostro esempio sul suo computer di bordo. Ecco cosa ne risulterebbe: 

HASH

SHA256 calcola la targa del taxi, ovvero l’HASH che vedi in fondo all’immagine e che viene generato in base alle informazioni che inserisci. 

Ora ipotizziamo che un malintenzionato voglia rubare l’assegno di un passeggero. 

Se noti, guardando i dati che abbiamo inserito, uno dei passeggeri trasporta un assegno da 80€. Come nella scena di un film d’azione: il ladro armato fino ai denti prende un elicottero (c’è sempre un complice che sa guidare un elicottero), si imbraga e si cala dall’alto sul tetto del taxi per aprirlo e sfilare l’assegno da 80€ sostituendolo con un assegno da 10€. 

La prima cosa che potresti pensare è: tutto questo sbattimento per 80€. Non ci sono obiezioni. Ci avvaliamo della licenza letteraria XD. 

Immagina il valore che preferisci su quell’assegno. 

Ma proviamo a vedere cosa succede se cambio l’importo dell’assegno. E’ l’unica cosa che sostituiamo: semplicemente, trasformiamo il numero 8 nel numero 1 nella scatola nera ed ecco che l’HASH cambia completamente. Ad esempio prima finiva con “a55” ed ora finisce con “496”.

HASH 256

Attenzione però: nel nostro esempio dei taxi, abbiamo visto che i taxi viaggiano in fila indiana e tra le regole che si sono dati c’è anche quella di riportare nel computer di bordo (quindi nella scatola nera che genera la targa del taxi), la targa del taxi che è partito prima. 

Proviamo a cambiare i dati dei passeggeri e riprendere in mano l’esempio ma contestualizzandolo, ovvero vedendo cosa succede a tutta la fila dei taxi. 

Guarda l’immagine qui sotto. L’assegno da 80€ si trova sul taxi 3. Il taxi 4, che lo segue, ha registrato sul suo computer di bordo la targa del taxi 3 nel campo “Prev:” che sta per Previous HASH. La targa del blocco 3 finisce con “df0”.

catena di blocchi

Il taxi 3 viene aggredito dal ladro in elicottero. L’assegno da 80€ viene rubato e sostituito con un assegno da 10€. 

Ecco cosa succede:

blockchain attack

Come abbiamo sempre visto fino a questo momento la targa cambia completamente ed ora finisce con “6c7”.

Siccome l’HASH del blocco 3 cambia, si genera una modifica a catena e anche nell’HASH del blocco 4 cambia: se cambia qualcosa nel taxi 3, cambia il suo hash, che a questo punto non corrisponde più con quello registrato dal taxi 4, e se il taxi 4 cambia i suoi dati per aggiornarsi cambia anche la sua targa, ed il tutto si propaga anche al taxi 5 e così via …

Perché? 

Perché nel campo in cui il tassista deve riportare il Previous HASH, il numero è cambiato, modificando di conseguenza anche l’HASH del blocco 4 che passa dal finale “ff9” al finale “01e”. E così a catena anche per il blocco 5, il blocco 6 ecc.ecc. fino a quanto è lunga la catena.

Questo cambiamento mette in allarme la sicurezza che si accorge subito dell’attacco ed interviene con aerei, elicotteri e carri armati. Si, per 80 euro XD . 

Osserviamo insieme 3 cose fondamentali:

 

1 – HASH univoco

Se inserisco lo stesso identico testo, l’HASH che mi restituisce è sempre lo stesso. 

Prova ad inserire la frase “ciao bella” comprensiva degli apici. La scatola nera restituirà questo HASH: 

39ce9aa807204ed76650e5c750392eeb63d66103874fe049ccf4b2a9c099b4a5

Ora cancella il testo nel campo “Data” e reinserisci la frase “ciao bella”. Noterai che l’HASH che ti restituisce è sempre lo stesso. Prova da un altro computer o chiedi ad un tuo amico di farlo e vedrai che il risultato non cambia.

 

 

2 – Un carattere cambia tutto 

Se aggiungi qualsiasi cosa alla frase “ciao bella” l’HASH cambierà completamente. Fai una prova: aggiungi un numero o una lettere o anche solo uno spazio dopo la frase e vedrai l’HASH cambiare drasticamente (la probabilità che uno dei caratteri rimanga lo stesso di prima è di 1/16, ovvero di circa il 6,25%). 

 

 

3 – SHA256 = 64 caratteri

Non importa la lunghezza del testo o delle informazioni che inserisci nel campo “Data”. La lunghezza dell’HASH sarà sempre di 64 caratteri. 

Tipicamente l’esempio che viene fatto è quello di inserire nel campo “Data” l’intero testo della divina commedia. E niente, sempre 64 caratteri vengono restituiti.

4) I 5 requisiti fondamentali dell'HASH

Oltre alle 3 caratteristiche fondamentali che abbiamo visto qui sopra, il nostro HASH per compiere così bene il suo lavoro all’interno del sistema blockchain (e non solo), deve avere 5 caratteristiche fondamentali che sono poi quelle che lo rendono così importante:

 

1 – One way 

Non puoi capire di quale documento si tratta basandoti sull’HASH. Cioè, non potrai mai capire che cosa trasporta il taxi semplicemente leggendo la sua targa. Esattamente come per le impronte digitali. Se ho un’impronta digitale non posso risalire alla persona a cui appartiene (a meno che non abbia schedato in precedenza persona e impronta).

Questo significa che dato un HASH non puoi capire di quale documento sia l’impronta digitale (a meno che tu non abbia il testo completo, partendo dal quale potresti calcolare l’HASH e confrontarlo con quello a tua disposizione). 

Se scrivo l’HASH 8fb7667496495bf679060883e61969e5464a4bba3544af65697db44b7b60d7cf

non potrai mai capire qual’è il messaggio che ho inserito nella scatola nera a meno che non ti do un indizio, una chiave di lettura per fare dei tentativi … e in ogni caso tanti auguri. PS. non ti dirò mai il messaggio che si nasconde dietro quell’HASH 🙂 

 

2 – L’HASH è deterministico 

Questo l’abbiamo già visto prima giocando con l’HASH. Se prendo lo stesso documento e lo metto nella scatola nera, l’HASH che mi restituisce deve essere sempre lo stesso. Se inserisci “ciao bella” oggi, riprovi domani, e poi ancora il giorno dopo, ti restituirà sempre lo stesso identico HASH.

 

3 – Veloce

L’algoritmo che svolge il calcolo dell’HASH deve essere veloce, indipendentemente dal tipo di documento digitale inserito nella scatola nera. Immagina se il tempo di risposta fosse di ore, o crescesse esponenzialmente con la lunghezza del testo inserito … chi sarebbe disposto ad aspettare così tanto? 😛

 

4 – Effetto valanga

Anche questo punto l’abbiamo già visto prima. Se cambi anche una sola virgola, trasformi una lettera maiuscola in minuscola, aggiungi uno spazio, insomma qualsiasi cosa tu faccia, l’HASH cambia. E non cambia di poco. Non è che se tu aggiungi una virgola nel messaggio, l’algoritmo (la scatola nera) cambia solo un numero nell’HASH. L’algoritmo ricalcola completamente l’HASH, dall’inizio alla fine.

Il fenomeno per cui se cambia anche solo un piccolo input, l’output cambia significativamente, viene definito effetto valanga. 

A cosa serve questo meccanismo? Il sistema deve resistere a diversi tipi di attacco. Ad esempio, non deve essere possibile creare un messaggio con un particolare HASH.

Perché? Immagina di salvare l’HASH di un particolare documento di proprietà. Se tu potessi generare un altro documento, con un nome diverso nel campo “PROPRIETARIO”, allora potresti provare a sostituire il documento originale con questa “copia falsificata”.

Per rendere difficile trovare un documento che genera un particolare HASH, cambiando una virgola deve cambiare tutto l’HASH, altrimenti con piccole modifiche successive ci si potrebbe avvicinare progressivamente all’HASH desiderato.

L’effetto valanga è quindi utile perché, anche se arrivi vicino (e comunque non è facile) a generare un particolare HASH, ecco che cambiando anche solo uno spazio l’HASH cambia completamente e te ne ritrovi uno del tutto diverso da quello che avresti voluto raggiungere!

 

5 – Rarità delle collisioni

Deve essere estremamente difficile trovare 2 messaggi che, inseriti separatamente nella scatola nera, generino lo stesso HASH.

Perché questo? Altrimenti io potrei fare un commitment e poi decidere in un secondo momento se rivelare l’informazione A e l’informazione B (che hanno lo stesso HASH).

Quest’ultimo aspetto è molto importante! All’inizio di questo post abbiamo paragonato l’HASH all’impronta digitale di una persona e ci siamo chiesti: è possibile trovare qualcuno che abbia la tua stessa impronta digitale? 

Si, è poco probabile ma è possibile e nel caso dell’impronta digitale la probabilità di trovare qualcuno che abbia la tua stessa impronta digitale è di 1 su 60 milioni di persone. 

Potresti chiederti: ma esiste la possibilità che due taxi abbiano la stessa targa? Ovvero che 2 documenti diversi abbiano lo stesso HASH? 

Sì, è possibile. Ma quant’è la probabilità?

Abbiamo detto in precedenza che l’hash SHA256 è formato da 256 simboli binari (‘0’ o ‘1’). La probabilità che il primo bit di 2 hash presi a caso sia uguale (ovvero che inizino entrambi per ‘0’ o entrambi per ‘1’) è del 50% (ovvero ½). Esattamente la stessa probabilità che lanciando 2 monete (o una stessa moneta per 2 volte) escano 2 ‘testa’ o 2 ‘croce’.

E che 2 hash A e B presi a caso abbiano i primi 2 bit uguali?

Proviamo a calcolarla insieme!

Consideriamo che il primo hash A cominci con ‘01110010..’.

Il secondo hash B può iniziare al 50% con ‘0’ e al 50% con ‘1’.

Considerando 1 solo bit, i casi possibili sono dunque solo 2: ‘0’ o ‘1’. Abbiamo quindi 1 caso su 2 (pari al 50%) in cui i 2 hash A e B cominciano nello stesso modo.

Il secondo bit dell’hash B può essere ‘0’ (al 50%) o ‘1’ (al 50%).

Considerando 2 bit, i casi possibili sono ben 4: ‘00’, ‘01’, ‘10’ o ‘11’. Abbiamo quindi 1 solo caso su 4 (pari al 25%) in cui i 2 hash A e B cominciano nello stesso modo.

Il terzo bit dell’hash B può essere ‘0’ (al 50%) o ‘1’ (al 50%).

Considerando 3 bit, i casi possibili diventano 8: ‘000’, ‘001’, ‘010’, ‘100’, ‘011’, ‘101’, ‘110’, ‘111’. Abbiamo quindi 1 solo caso su 8 (pari al 12.5%) in cui i 2 hash A e B cominciano nello stesso modo.

E così via …

Generalizzando, possiamo dire che, considerando N bit, i casi possibili sono 2^N. Abbiamo quindi 1 solo caso su 2^N in cui i 2 hash A e B cominciano nello stesso modo.

La probabilità che tutti i bit degli hash A e B siano uguali è dunque 1 su 2^256. Ma che numero è 2^256? Alto? Soltanto ‘alto’?

In Italia siamo circa 60 milioni di persone (circa 2^26), nel mondo siamo meno di 8 miliardi (ovvero meno di 2^33). Se scegliessimo una persona a caso, in una sorta di lotteria mondiale, la probabilità che venga scelto proprio tu è quindi di circa 1 su 2^33 … che tu vinca per 2 volte di fila è circa 1 su 2^66 … che tu vinca 3 volte di seguito è circa 1 su 2^99 … ecco, per farla breve è più facile vincere 7 volte di fila una lotteria mondiale (avresti 1 caso favorevole su circa 2^231) che trovare casualmente 2 hash uguali (1 solo caso su 2^256)

Per fare un altro esempio, considera che gli scienziati hanno stimato che il numero di atomi contenuti nell’universo sia compreso tra 10^79 e 10^81, e che 2^256 vale “poco più” di 10^77.

5) Scopri il nostro HASH

Questo è l’HASH di una frase che descrive KNOBS: 

3e19acf3b8afac8a0ce4105b4746c77aa4bf8a37216ece1ae8b2c2e521916890

Per ottenere questo HASH ho passato, tramite la funzione di hashing, una frase che descrive KNOBS.

Per scoprire di cosa si tratta hai un solo modo: copiare una di queste tre frasi ed inserirle nella scatola nera. 

Quella che realmente rappresenta di più KNOBS, ti restituirà l’HASH riportato qui sopra. Buon divertimento: 

KNOBS è una software house che si occupa di programmazione tramite l’utilizzo di linguaggi evoluti, come PHP

KNOBS è una software house & tech advisory firm specializzata in tecnologia blockchain

KNOBS è la software house che durante il secondo conflitto mondiale decifrò il codice Enigma. Ora si occupa di tecnologia blockchain

Share on facebook
Share on twitter

non perderti tutte le news, i nostri report gratuiti e gli aggiornamenti sui trend blockchain