Cos’è l’hashing? [Guida passo passo-Under Hood Of Blockchain]

Allora, cos’è veramente l’hashing?

TLDR:

  1. L’hashing genera uno o più valori da una stringa di testo utilizzando una funzione matematica.
  2. L’hashing è un modo per abilitare la sicurezza durante il processo di trasmissione del messaggio quando il messaggio è destinato solo a un determinato destinatario. Una formula genera l’hash, che aiuta a proteggere la sicurezza della trasmissione da manomissioni.

È importante sapere come funziona l’hashing della blockchain. Per fare ciò, tuttavia, dobbiamo prima comprendere uno dei principi fondamentali che entrano nella creazione di blockchain. La tecnologia blockchain è una delle scoperte più innovative e definitive dell’era del secolo scorso. Considerando l’influenza che ha avuto negli ultimi anni e l’impatto che avrà in futuro, non è certo un’esagerazione affermare questo. Per capire come funzionano varie criptovalute come Ethereum e Bitcoin.

 Allora, cos’è l’hashing?

In termini semplici, hashing significa prendere una stringa di input di qualsiasi lunghezza e fornire un output di lunghezza fissa. Nel contesto delle criptovalute come bitcoin, le transazioni vengono prese come input ed eseguite attraverso un algoritmo di hashing (bitcoin utilizza SHA-256) che fornisce un’uscita di lunghezza fissa.

Vediamo come funziona il processo di hashing. Stiamo per inserire determinati input. Per questo esercizio, utilizzeremo SHA-256 (Secure Hashing Algorithm 256).

Cos'è l'hashing? Sotto il cofano della Blockchain

Come puoi vedere, nel caso di SHA-256, non importa quanto grande o piccolo sia il tuo input, l’output avrà sempre una lunghezza fissa di 256 bit. Ciò diventa fondamentale quando si ha a che fare con un’enorme quantità di dati e transazioni. Quindi fondamentalmente, invece di ricordare i dati di input che potrebbero essere enormi, puoi semplicemente ricordare l’hash e tenerne traccia. Prima di andare oltre, dobbiamo prima vedere le varie proprietà delle funzioni di hashing e come vengono implementate nella blockchain. 

Funzioni hash crittografiche

Una funzione hash crittografica è una classe speciale di funzioni hash che ha varie proprietà che la rendono ideale per la crittografia. Ci sono alcune proprietà che una funzione hash crittografica deve avere per essere considerata sicura. Analizziamoli uno per uno.

Proprietà 1: deterministico

Ciò significa che non importa quante volte analizzi un particolare input attraverso una funzione hash, otterrai sempre lo stesso risultato. Questo è fondamentale perché se ottieni hash diversi ogni singola volta sarà impossibile tenere traccia dell’input.

Proprietà 2: calcolo rapido

La funzione hash dovrebbe essere in grado di restituire rapidamente l’hash dell’input. Se il processo non è abbastanza veloce, il sistema semplicemente non sarà efficiente.

Proprietà 3: resistenza pre-immagine

Quali stati di resistenza pre-immagine sono che dato H (A) non è possibile determinare A, dove A è l’input e H (A) è l’hash di output. Notare l’uso della parola “non fattibile” invece di “impossibile”. Sappiamo già che non è impossibile determinare l’input originale dal suo valore hash. Facciamo un esempio.

Supponiamo che tu stia lanciando un dado e l’output sia l’hash del numero che esce dai dadi. Come sarai in grado di determinare qual era il numero originale? È semplice tutto ciò che devi fare è scoprire gli hash di tutti i numeri da 1 a 6 e confrontarli. Poiché le funzioni hash sono deterministiche, l’hash di un particolare input sarà sempre lo stesso, quindi puoi semplicemente confrontare gli hash e scoprire l’input originale.

Ma funziona solo quando la quantità di dati fornita è molto inferiore. Cosa succede quando hai un’enorme quantità di dati? Supponi di avere a che fare con un hash a 128 bit. L’unico metodo che hai per trovare l’input originale è usare il “metodo della forza bruta“. Il metodo della forza bruta significa fondamentalmente che devi prendere un input casuale, hash e quindi confrontare l’output con l’hash di destinazione e ripetere fino a trovare una corrispondenza.

Quindi, cosa succederà se usi questo metodo?

  • Scenario migliore: Ottieni la tua risposta al primo tentativo stesso. Dovrai seriamente essere la persona più fortunata del mondo perché questo accada. Le probabilità che ciò accada sono astronomiche.
  • Nella peggiore delle ipotesi: Ottieni la tua risposta dopo 2 ^ 128 – 1 volte. Fondamentalmente, significa che troverai la tua risposta alla fine di tutti i dati.
  • Scenario medio: Lo troverai da qualche parte nel mezzo, quindi fondamentalmente dopo 2 ^ 128/2 = 2 ^ 127 volte. Per metterlo in prospettiva, 2 ^ 127 = 1,7 X 10 ^ 38. In altre parole, è un numero enorme.

Quindi, sebbene sia possibile rompere la resistenza pre-immagine tramite il metodo della forza bruta, ci vuole così tanto tempo che non importa.

Proprietà 4: Piccole modifiche nell’input modifica l’hash.

Anche se apporti una piccola modifica al tuo input, le modifiche che si rifletteranno nell’hash saranno enormi. Proviamolo usando SHA-256:

Cos'è l'hashing? Sotto il cofano della Blockchain

Lo vedi? Anche se hai appena cambiato il caso del primo alfabeto dell’input, guarda quanto ha influenzato l’hash dell’output. Questa è una funzione fondamentale perché questa proprietà dell’hashing porta a una delle più grandi qualità della blockchain, la sua immutabilità (ne parleremo più avanti).

Proprietà 5: resistente alle collisioni

Dati due diversi input A e B dove H (A) e H (B) sono i rispettivi hash, non è possibile che H (A) sia uguale a H (B). Ciò significa che, per la maggior parte, ogni input avrà il proprio hash unico. Perché abbiamo detto “per la maggior parte”? Parliamo di un concetto interessante chiamato “The Birthday Paradox”.

Qual è il paradosso del compleanno?

Se incontri uno sconosciuto a caso per strada, le possibilità che entrambi abbiate lo stesso compleanno sono molto basse. In effetti, supponendo che tutti i giorni dell’anno abbiano la stessa probabilità di avere un compleanno, le probabilità che un’altra persona condivida il tuo compleanno è 1/365 che è dello 0,27%. In altre parole, è davvero basso.

Tuttavia, detto questo, se raccogli 20-30 persone in una stanza, le probabilità che due persone condividano lo stesso identico compleanno aumentano astronomicamente. In effetti, c’è una probabilità del 50-50 per 2 persone che condividono lo stesso compleanno in questo scenario!

Cos'è l'hashing? Sotto il cofano della Blockchain

Credito immagine: (YouTube)

Perché succede? È a causa di una semplice regola di probabilità che è la seguente. Supponi di avere N diverse possibilità di accadimento di un evento, quindi hai bisogno della radice quadrata di N elementi casuali per avere una probabilità del 50% di una collisione.

Quindi applicando questa teoria per i compleanni, hai 365 diverse possibilità di compleanni, quindi hai solo bisogno di Sqrt (365), che è ~ 23 ~, persone scelte a caso per il 50% di possibilità che due persone condividano i compleanni.

Qual è l’applicazione di questo nell’hashing?

Supponi di avere un hash a 128 bit che ha 2 ^ 128 diverse possibilità. Usando il paradosso del compleanno, hai il 50% di possibilità di rompere la resistenza alle collisioni al sqrt (2 ^ 128) = 2 ^ 64a istanza.

Come puoi vedere, è molto più facile rompere la resistenza alle collisioni che rompere la resistenza preimmagine. Nessuna funzione hash è priva di collisioni, ma di solito ci vuole così tanto tempo per trovare una collisione. Quindi, se stai usando una funzione come SHA-256, è lecito ritenere che se H (A) = H (B) allora A = B.

Proprietà 6: Puzzle Friendly

Ora, questa è una proprietà affascinante e l’applicazione e l’impatto che questa proprietà ha avuto sulla criptovaluta sono enormi (ne parleremo più avanti quando tratteremo i puzzle di mining e crittografia). Per prima cosa definiamo la proprietà, dopodiché esamineremo ogni termine in dettaglio.

Per ogni output “Y”, se k è scelto da una distribuzione con min-entropia alta non è possibile trovare un input x tale che H (k | x) = Y.

Probabilmente ti è passato per la testa! Ma va bene, ora capiamo cosa significa questa definizione.

Qual è il significato di “alta min-entropia”?

Significa che la distribuzione da cui viene scelto il valore è enormemente distribuita tanto che scegliere un valore casuale ha una probabilità trascurabile. Fondamentalmente, se ti viene detto di scegliere un numero compreso tra 1 e 5, questa è una distribuzione minima di entropia bassa. Tuttavia, se dovessi scegliere un numero compreso tra 1 e un miliardo di gazillion, questa è una distribuzione min-entropy elevata.

Cosa significa “k | x”?

Il “|” denota la concatenazione. Concatenazione significa aggiungere due stringhe insieme. Per esempio. Se dovessi concatenare “BLU” e “CIELO” insieme, il risultato sarà “BLUESKY”.

Quindi ora rivisitiamo la definizione.

Supponiamo di avere un valore di output “Y”. Se scegli un valore casuale “k” da un’ampia distribuzione, non è possibile trovare un valore X tale che l’hash della concatenazione di k e x darà l’output Y.

Ancora una volta, nota la parola “irrealizzabile”, non è impossibile perché le persone lo fanno sempre. In effetti, l’intero processo di mining funziona su questo (ne parleremo più avanti).

Esempi di funzioni hash crittografiche

  • MD 5: produce un hash a 128 bit. La resistenza alle collisioni è stata interrotta dopo ~ 2 ^ 21 hash.
  • SHA 1: produce un hash a 160 bit. La resistenza alle collisioni si è interrotta dopo ~ 2 ^ 61 hash.
  • SHA 256: produce un hash a 256 bit. Questo è attualmente utilizzato da bitcoin.
  • Keccak-256: produce un hash a 256 bit ed è attualmente utilizzato da Ethereum.

Hashing e strutture dati

Una struttura dati è un modo specializzato per archiviare i dati. Ci sono due proprietà della struttura dati che sono fondamentali se vuoi capire come funziona una blockchain. Sono:

  1. Puntatori.
  2. Elenchi collegati.

Puntatori

I puntatori sono variabili nella programmazione che memorizzano l’indirizzo di un’altra variabile. Di solito le variabili normali in qualsiasi linguaggio di programmazione memorizzano i dati.

Per esempio. int a = 10, significa che c’è una variabile “a” che memorizza valori interi. In questo caso, sta memorizzando un valore intero che è 10. Questa è una variabile normale.

I puntatori, tuttavia, invece di memorizzare valori memorizzeranno gli indirizzi di altre variabili. Ecco perché sono chiamati puntatori, perché stanno letteralmente puntando verso la posizione di altre variabili.

Elenchi collegati

Un elenco collegato è uno degli elementi più importanti nelle strutture dati. Ecco come appare un elenco collegato:

Cos'è l'hashing? Sotto il cofano della Blockchain

È una sequenza di blocchi, ciascuno contenente dati che è collegato al blocco successivo tramite un puntatore. La variabile puntatore, in questo caso, contiene l’indirizzo del nodo successivo e quindi viene effettuata la connessione. L’ultimo nodo, come puoi vedere, ha un puntatore nullo, il che significa che non ha valore.

Una cosa importante da notare qui, il puntatore all’interno di ogni blocco contiene l’indirizzo del blocco successivo. È così che si ottiene il puntamento. Ora potresti chiederti cosa significa per il primo blocco nell’elenco? Dove sta il puntatore del primo blocco?

Il primo blocco è chiamato “blocco genesi” e il suo puntatore si trova nel sistema stesso. Assomiglia a questo:

Cos'è l'hashing? Sotto il cofano della Blockchain

Cortesia dell’immagine: Coursera

Se ti stai chiedendo cosa significhi “hash pointer”, ci arriveremo tra poco.

Come avrai intuito, questo è ciò su cui si basa la struttura della blockchain. Una blockchain è fondamentalmente un elenco collegato. Vediamo come appare la struttura blockchain:

Cos'è l'hashing? Sotto il cofano della Blockchain

La blockchain è un elenco collegato che contiene dati e un puntatore hash che punta al blocco precedente, creando così la catena. Cos’è un hash pointer? Un puntatore hash è simile a un puntatore, ma invece di contenere solo l’indirizzo del blocco precedente contiene anche l’hash dei dati all’interno del blocco precedente. Questa piccola modifica è ciò che rende le blockchain così incredibilmente affidabili e innovative.

Immagina per un secondo, un hacker attacca il blocco 3 e cerca di modificare i dati. A causa delle proprietà delle funzioni hash, un leggero cambiamento nei dati cambierà drasticamente l’hash. Ciò significa che qualsiasi leggera modifica apportata nel blocco 3, cambierà l’hash che è memorizzato nel blocco 2, ora che a sua volta cambierà i dati e l’hash del blocco 2 che si tradurrà in modifiche nel blocco 1 e così via e così via . Questo cambierà completamente la catena, il che è impossibile. Questo è esattamente il modo in cui le blockchain raggiungono l’immutabilità.

Quindi che aspetto ha un’intestazione di blocco?

Cos'è l'hashing? Sotto il cofano della Blockchain

Un’intestazione di blocco contiene:

  • Versione: il numero di versione del blocco.
  • Ora: il timestamp corrente.
  • L’attuale obiettivo di difficoltà. (Ne parleremo più avanti).
  • Hash del blocco precedente.
  • Nonce (ne parleremo più avanti).
  • Hash of the Merkle Root.

In questo momento, concentriamoci sull’hash della radice di Merkle. Ma prima dobbiamo capire cos’è un Merkle Tree.

Cos’è un albero di Merkle?

Cos'è l'hashing? Sotto il cofano della Blockchain

Cortesia dell’immagine: Wikipedia

Il diagramma sopra mostra l’aspetto di un albero Merkle. In un albero Merkle, ogni nodo non foglia è l’hash dei valori dei propri nodi figlio.

Nodo foglia: i nodi foglia sono i nodi nel livello più basso dell’albero. Quindi rispetto al diagramma sopra, i nodi foglia saranno L1, L2, L3 e L4.

Cos'è l'hashing? Sotto il cofano della Blockchain

Nodi figlio: per un nodo, i nodi al di sotto del suo livello che lo alimentano sono i suoi nodi figlio. Nel diagramma, i nodi etichettati “Hash 0-0” e “Hash 0-1” sono i nodi figli del nodo etichettato “Hash 0”.

Nodo radice: il singolo nodo sul livello più alto etichettato “Top Hash” è il nodo radice.

Cos'è l'hashing? Sotto il cofano della Blockchain

Quindi cosa ha a che fare un Merkle Tree con le blockchain?

Ogni blocco contiene migliaia e migliaia di transazioni. Sarà molto inefficiente archiviare tutti i dati all’interno di ogni blocco come una serie. In questo modo la ricerca di una particolare transazione sarà estremamente laboriosa e dispendiosa in termini di tempo. Se usi un albero Merkle, tuttavia, ridurrai notevolmente il tempo necessario per scoprire se una particolare transazione appartiene o meno a quel blocco.

Vediamolo in un esempio. Considera il seguente albero Merkle:

Cos'è l'hashing? Sotto il cofano della Blockchain

Cortesia dell’immagine: Coursera

Supponiamo ora di voler scoprire se questo particolare dato appartiene o meno al blocco:

Cos'è l'hashing? Sotto il cofano della Blockchain

Invece di passare attraverso l’ingombrante processo di guardare ogni singolo hash e vedere se appartiene o meno ai dati, posso semplicemente rintracciarlo seguendo la scia di hash che portano ai dati:

Cos'è l'hashing? Sotto il cofano della Blockchain

In questo modo si riduce notevolmente il tempo impiegato.

Hashing nel mining: i puzzle crittografici.

Quando diciamo “mining”, sostanzialmente significa cercare un nuovo blocco da aggiungere nella blockchain. I minatori di tutto il mondo lavorano costantemente per assicurarsi che la catena continui a crescere. In precedenza era facile per le persone estrarre usando solo i loro laptop, ma nel tempo le persone hanno iniziato a formare pool minerari per mettere in comune i poteri del loro computer ed estrarre in modo più efficiente.

Questo, tuttavia, avrebbe potuto essere un problema. C’è un limite per ogni criptovaluta, ad es. per bitcoin, sono solo 21 milioni. Ci sono solo 21 milioni di bitcoin là fuori. Se i minatori sono autorizzati a continuare, a questo ritmo, ripesceranno tutti i bitcoin esistenti. Inoltre, deve esserci un limite di tempo specifico tra la creazione di ciascun blocco. Per bitcoin, il limite di tempo tra la creazione di un blocco è di 10 minuti. Se i blocchi potessero essere creati più velocemente, si otterrebbe:

  • Più collisioni: verranno generate più funzioni hash che inevitabilmente causeranno più collisioni.
  • Più blocchi orfani: se molti minatori hanno terminato l’estrazione, creeranno nuovi blocchi contemporaneamente. Ciò comporterà che più blocchi non entreranno a far parte della catena principale e diventeranno blocchi orfani.

Quindi, per limitare la creazione di blocchi, viene impostato un livello di difficoltà specifico. L’estrazione mineraria è come un gioco, risolvi il puzzle e ottieni ricompense. L’impostazione della difficoltà rende il puzzle molto più difficile da risolvere e quindi richiede più tempo. Bitcoin WRT l’obiettivo di difficoltà è una stringa di 64 caratteri (che è la stessa di un output SHA-256) che inizia con un gruppo di zeri. Un numero di zeri aumenta con l’aumentare del livello di difficoltà. Il livello di difficoltà cambia dopo ogni 2016esimo blocco.

Il processo minerario

Nota: qui parleremo principalmente dell’estrazione di Bitcoin.

Quando il software di mining di bitcoin vuole aggiungere un nuovo blocco alla blockchain, questa è la procedura che segue. Ogni volta che arriva un nuovo blocco, tutti i contenuti dei blocchi vengono prima sottoposti ad hashing. Se l’hash è inferiore al target di difficoltà, viene aggiunto alla blockchain e tutti nella comunità riconoscono il nuovo blocco.

Tuttavia, non è così semplice. Dovrai essere estremamente fortunato per ottenere un nuovo blocco proprio come quello. È qui che entra in gioco il nonce. Il nonce è una stringa arbitraria che viene concatenata con l’hash del blocco. Dopodiché, questa stringa concatenata viene nuovamente hash e confrontata con il livello di difficoltà. Se non è inferiore al livello di difficoltà, il nonce viene cambiato e questo continua a ripetersi un milione di volte fino a quando finalmente i requisiti sono soddisfatti. Quando ciò accade, il blocco viene aggiunto alla blockchain.

Quindi, per ricapitolare:

  • Viene preso l’hash del contenuto del nuovo blocco.
  • All’hash viene aggiunto un nonce (stringa casuale).
  • La nuova stringa viene nuovamente sottoposta ad hashing.
  • L’hash finale viene quindi confrontato con il livello di difficoltà e viene visualizzato se è effettivamente inferiore o meno.
  • In caso contrario, il nonce viene modificato e il processo si ripete di nuovo.
  • In caso affermativo, il blocco viene aggiunto alla catena e il libro mastro pubblico viene aggiornato e avvisato dell’aggiunta.
  • I minatori responsabili di questo vengono premiati con bitcoin.

Ricordi la proprietà numero 6 delle funzioni hash? La cordialità del puzzle?

Per ogni output “Y”, se k è scelto da una distribuzione con min-entropia alta non è possibile trovare un input x tale che H (k | x) = Y.

Quindi, quando si tratta di mining di bitcoin:

  • K = Nonce
  • x = l’hash del blocco
  • Y = l’obiettivo di difficoltà

L’intero processo è completamente casuale, non c’è alcun processo mentale dietro la selezione dei nonci. È solo pura forza bruta in cui il software continua a generare stringhe casualmente fino a raggiungere il loro obiettivo. L’intero processo segue il protocollo Proof Of Work che sostanzialmente significa:

  • La risoluzione dei puzzle dovrebbe essere difficile.
  • Il controllo della risposta, tuttavia, dovrebbe essere facile per tutti. Questo viene fatto per assicurarsi che non siano stati utilizzati metodi subdoli per risolvere il problema.

Cos’è il tasso di hash?

Il tasso di hashing significa fondamentalmente la velocità con cui si svolgono queste operazioni di hashing durante il mining. Un tasso di hash elevato significa che più persone e macchine software stanno prendendo parte al processo di mining e, di conseguenza, il sistema funziona senza problemi. Se il tasso di hash è troppo veloce, il livello di difficoltà aumenta. Se la velocità di hash diventa troppo lenta, il livello di difficoltà viene ridotto.

Conclusione: cos’è l’hashing?

L’hashing è stato davvero fondamentale nella creazione della tecnologia blockchain. Se uno vuole capire di cosa tratta la blockchain, dovrebbe assolutamente capire cosa significa hashing.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me