BLOCKCHAIN: COS'È UN HASH?

Cos’è e a cosa serve la funzione HASH su blockchain? 

Come abbiamo spiegato in questo post  dedicato ai blocchi e alla loro struttura, possiamo immaginare la blockchain come una fila di taxi gialli e l’HASH come la targa del singolo taxi, cioè come il codice identificativo del singolo blocco che forma la catena. 

L’HASH, però, è una targa decisamente “speciale”, che rientra nell’ambito della crittografia.
Dobbiamo immaginare che al momento di caricare le persone, il taxi non abbia ancora la sua targa. Questa viene generata di volta in volta. Ma in che modo?

Sul taxi c’è una piccola scatola nera, in cui il tassista inserisce diverse informazioni, tra cui:

– l’orario di partenza 
– gli account anonimi (o pseudonimi) dei passeggeri e i messaggi che trasportano 
– la “targa speciale”, ossia l’HASH, del veicolo che è partito prima di lui

E’ sulla base di queste che l’immaginaria scatola nera calcola e restituisce la targa del taxi.
Se cambia anche solo una virgola nei dati inseriti, la targa del taxi non sarà più la stessa (potrebbe anche cambiare completamente!).

In questo post, ti raccontiamo in dettaglio cos’è, a cosa serve e come funziona un HASH, ovvero la targa dei nostri taxi.

1. Cos'è l'HASH? Una definizione

Come l’impronta digitale di un documento!

Ogni persona ha un’impronta digitale. E nessuna impronta digitale è uguale ad un’altra.

Lo stesso vale per 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.

Cosa succede, ad esempio, quando ti rechi in comune per il rinnovo del passaporto? 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. Per l’esattezza, la probabilità di trovare qualcuno con la tua stessa impronta è di 1 su 60 milioni.

Ora, cosa succede se porto lo stesso concetto di “finger print” su un documento digitale? C’è la possibilità di assegnare un’impronta univoca che identifichi un documento digitale?

Ecco la nostra risposta.

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

Si, è possibile portare il concetto di impronta su un documento digitale, anzi la soluzione già 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, mentre 256 è il numero di bit del codice binario (ovvero di ‘0’ o ‘1’) che l’HASH occupa in memoria.

L’HASH in questione è lungo 64 caratteri ed è un algoritmo crittografico che combina cifre e numeri. Poiché è 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 che il nostro intento è spiegare in termini semplici argomenti complessi.

Come possiamo quindi descrivere in modo chiaro cos’è un HASH e come funziona? 

Possiamo immaginare l’algoritmo come una specie di scatola nera.

Riprendiamo il nostro esempio del taxi: tu inserisci i dati necessari nella scatola nera e quella restituisce la targa del taxi.

Qualsiasi cosa inserisci nella scatola nera, ti viene restituito un output alfanumerico della lunghezza di 64 caratteri, che rappresenta l’impronta digitale di quello che hai inserito nella scatola nera.

Guarda l’immagine qui sotto: inserisco i dati del taxi e si genera una targa di 64 caratteri.

Ricorda una cosa molto importante: 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 e come si calcola un HASH

Divertiamoci a giocare con l’HASH per capire ancora meglio come funziona.

La funzione di hashing: ecco come vederla all’opera

Per farlo, ci viene in aiuto Anders Brownworth con il suo blog dedicato alla blockchain, che ci permette di sperimentare e mettere in pratica i concetti di cui stiamo parlando.

A questo suo link puoi vedere la funzione di hashing in azione.

Sperimentiamo!

Inserisci un testo nel campo “Data”.

Vedrai che ogni nuovo elemento (lettera, numero, punteggiatura, spazio…) che inserisci fa ricalcolare completamente l’HASH. 

Se, per esempio, inseriamo nel campo DATA tutte le informazioni che, come puoi leggere qui, il tassista deve inserire nel computer di bordo, risulta questo: 

SHA256 calcola la targa del taxi. In base alle informazioni che hai inserito, cioè, genera l’HASH che vedi nella parte bassa dell’immagine. 

Ipotizziamo ora che un malintenzionato voglia rubare l’assegno di un passeggero

Guardando i dati che abbiamo inserito, vedrai che uno dei passeggeri trasporta un assegno da 80€.

Il setting è come quello 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 uno da 10€. 

La prima cosa che potresti pensare è: tutto questo sbattimento per 80€?

Non ci sono obiezioni. Ci avvaliamo della licenza letteraria XD. 

Immagina, allora, il valore che preferisci. E vediamo cosa succede se cambi l’importo dell’assegno.

 

Sostituiamo solo questo dato e trasformiamo il numero 8 nel numero 1 nella scatola nera.

Cosa succede? L’HASH cambia completamente: prima finiva con “a55”, ora con “496″!

Attenzione però! Lo abbiamo visto, i taxi viaggiano in fila indiana e hanno stabilito tra le varie regole quella di riportare nel computer di bordo (cioè nella scatola nera che genera la targa del taxi) la targa del taxi che è partito prima

Facciamo un altro esperimento. Cambiamo i dati dei passeggeri. Cosa succede alla fila di taxi?

Se guardi l’immagine qui sotto, puoi vedere che:
– l’assegno da 80€ si trova sul taxi 3
– la targa del blocco 3, l’HASH, finisce con “df0”

– 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

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

E adesso?

La targa cambia completamente: ora finisce con “6c7”.

Siccome l’HASH del blocco 3 cambia, si genera una modifica a catena e, quindi, cambia anche l’HASH del blocco 4.
Se cambia qualcosa nel taxi 3, cambia anche il suo HASH e questo non corrisponde più a quello registrato dal taxi 4.

Allo stesso modo, se il taxi 4 cambia i suoi dati per aggiornarsi cambia anche la sua targa…e questo si propaga al taxi 5 e così via…

Questo avviene perchè nel campo in cui il tassista deve riportare il Previous HASH, il numero è cambiato e di conseguenza si è modificato anche l’HASH del blocco 4, che invece che con “ff9” si chiude ora con “01e”. E così a catena anche per il blocco 5, il blocco 6 ecc… per tutta la lunghezza della catena.

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

4. Caratteristiche e requisiti di un HASH

Le 3 caratteristiche di un HASH

Ogni HASH ha tre caratteristiche principali:

È univoco

Inserendo lo stesso identico testo, viene restituito sempre lo stesso HASH. 

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

Ora cancella il testo nel campo “Data” e reinserisci la frase “ciao bella”. Noterai che l’HASH restituito è sempre lo stesso.

Fai un test da un altro computer o chiedi ad un tuo amico di farlo. Il risultato non cambia.

Un carattere cambia tutto

Al contrario, se aggiungi qualsiasi cosa alla frase “ciao bella”, l’HASH cambia completamente.

Puoi verificarlo con facilità: aggiungi un numero, una lettera 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%)!

SHA256 = 64 caratteri, sempre e comunque

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

L’esempio più famoso è inserire nel campo “Data” l’intero testo della Divina Commedia.

Vengono sempre e comunque restituiti 64 caratteri.

….e i 5 requisiti fondamentali

Oltre a queste 3 caratteristiche fondamentali, per compiere bene il suo lavoro all’interno del sistema blockchain (e non solo), il nostro HASH deve avere 5 requisiti fondamentali. Sono questi, infatti, a renderlo unico e importante.

Ogni HASH deve essere:

1. One way

Basandoti sul solo HASH, non sei in grado di capire di quale documento si tratta.

In altre parole, non potrai mai capire cosa o chi 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!).

Dato un HASH, non puoi capire di quale documento esso rappresenta l’impronta digitale, il codice identificativo (a meno che tu non abbia il testo completo del documento: in tal caso, partendo dal testo potresti calcolare l’HASH e confrontarlo con quello a tua disposizione). 

Se scrivo l’HASH 8fb7667496495bf679060883e61969e5464a4bba3544af65697db44b7b60d7cf, non puoi arrivare a sapere quale messaggio ho inserito nella scatola nera, a meno che non ti dia io un indizio, una chiave di lettura per fare dei tentativi… e in ogni caso tanti auguri. P.S. non ti dirò mai il messaggio che si nasconde dietro quell’HASH 

2. Deterministico

Abbiamo già visto questo requisito, giocando con l’HASH.

Se prendo lo stesso documento e lo metto nella scatola nera, l’HASH che mi viene restituito è sempre lo stesso.

Inserisci “ciao bella” oggi, riprova 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 che hai inserito nella scatola nera.

Pensa 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. Soggetto all'effetto valanga

Anche questo punto l’abbiamo già accennato.

Cambia anche una sola virgola, ad esempio trasforma una lettera maiuscola in minuscola o aggiungi uno spazio: l’HASH cambia. E non di poco.

Non funziona che se tu aggiungi una virgola nel messaggio, l’algoritmo cambia solo un numero nell’HASH. Affatto. L’algoritmo ricalcola completamente l’HASH, dall’inizio alla fine.

Questo fenomeno per cui se cambia anche solo un piccolo input, l’output cambia totalmente, 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.

Cerchiamo di capire bene perché. Immagina di salvare l’HASH di un determinato 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, è indispensabile che, cambiando una virgola, cambi tutto l’HASH. Se così non fosse, con piccole modifiche successive, infatti, sarebbe possibile avvicinarsi progressivamente all’HASH desiderato.

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

5. Poco soggetto alle collisioni

Cosa vuol dire che l’HASH deve essere poco soggetto alle collisioni?

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

Altrimenti, 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!

Possono esistere due HASH uguali?

All’inizio di questo post, abbiamo paragonato l’HASH all’impronta digitale di una persona e ci siamo chiesti: è possibile trovare qualcuno con la tua stessa impronta digitale? 

 

È molto poco probabile, certo, ma, in effetti, è possibile (ricordi la percentuale di 1 su 60 milioni di persone?).

E, sulla falsariga, esiste la possibilità che due taxi abbiano la stessa targa?

Ovvero che 2 documenti diversi abbiano lo stesso HASH? 

Anche questo è possibile. Ma qual è la probabilità?

Qual è la probabilità che esistano due HASH identici?

In precedenza, abbiamo detto 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 entrambi gli hash inizino per ‘0’ o ‘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? Calcoliamola 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’.

Se consideriamo 1 solo bit, i casi possibili sono solo 2: ‘0’ o ‘1’.
Abbiamo cioè 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, le combinazioni possibili diventano 4: ‘00’, ‘01’, ‘10’ o ‘11’.
C’è quindi una probabilità su 4 (pari al 25%) che i 2 hash A e B comincino nello stesso modo.

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

Proviamo ora a considerare 3 bit. I casi possibili diventano 8: ‘000’, ‘001’, ‘010’, ‘100’, ‘011’, ‘101’, ‘110’, ‘111’.

Esiste 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).

Scegliendo una persona a caso, in una 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, 3 volte di seguito è circa 1 su 2^99.

Per farla breve, sarebbe 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)!

Vuoi 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. E ora sperimenta: scopri il nostro HASH!

Ecco qui per te l’HASH di una frase che descrive KNOBS

3e19acf3b8afac8a0ce4105b4746c77aa4bf8a37216ece1ae8b2c2e521916890

Per ottenere questo HASH ho passato la frase tramite la funzione di hashing.

Hai un solo modo per scoprire di cosa si tratta: devi copiare una per una ciascuna di queste tre frasi e inserirle nella scatola nera. 

“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”

Quella che più rappresenta KNOBS, ti restituirà l’HASH riportato qui sopra.

Buon divertimento

Vuoi scoprire di più sulla tecnologia blockchain
e su come puo' far crescere il tuo business?

|   Chi siamo

KNOBS è una società di sviluppo software specializzata in tecnologia blockchain. Dal 2014.

|   KNOBS srl

Bastioni di Porta Volta, 9
20121 Milano (MI) – Italia
info@knobs.it
knobs@legalmail.it
P. IVA 08560240965
SDI X2PH38J

|   Orari di apertura

Dal lunedì al venerdì 9.00 – 18.00

|   Seguici

|   Newsletter

Iscriviti alla newsletter e ricevi subito il PDF
Blockchain in parole semplici