L'hashing è il processo di generazione di un output di dimensione fissa da un input di dimensione variabile. Questo processo viene eseguito tramite una formula matematica chiamata "funzione hash" (implementata come algoritmo di hashing).
Non tutte le funzioni hash implicano l'uso della crittografia, ma le "funzioni hash crittografiche" sono il cuore delle criptovalute. Grazie alle funzioni hash crittografiche, è possibile raggiungere elevati livelli di integrità e sicurezza dei dati nella blockchain e in altri sistemi distribuiti.
Sia le funzioni hash tradizionali che le funzioni hash crittografiche sono deterministiche. Il determinismo si riferisce al fatto che un algoritmo di hashing produrrà sempre lo stesso output (chiamato anche "digest" o "valore hash") purché l'input non cambi.
In genere, gli algoritmi di hashing delle criptovalute sono progettati per essere funzioni unidirezionali, il che significa che non possono essere facilmente recuperati senza tempi e risorse di elaborazione significativi. In altre parole, è estremamente semplice creare un output da un input, ma è relativamente difficile creare un input da un output al contrario. In generale, quanto più difficile è trovare l’input, tanto più sicuro è l’algoritmo di hashing.
Come funziona una funzione hash?
Diverse funzioni di hash producono output di dimensioni diverse, ma la dimensione di output di ciascun algoritmo di hashing è sempre la stessa. Ad esempio, l'algoritmo SHA-256 può produrre solo un output a 256 bit, mentre SHA-1 produce sempre un digest a 160 bit.
Per illustrarlo, abbiamo eseguito le parole "Binance" e "binance" attraverso l'algoritmo di hashing SHA-256 (l'algoritmo utilizzato in Bitcoin).
Tieni presente che una piccola modifica nella capitalizzazione della prima lettera produrrà un valore hash completamente diverso. Indipendentemente dalla lunghezza del valore di input, l'output che utilizza SHA-256 ha sempre una lunghezza fissa di 256 bit (o 64 caratteri). Inoltre, non importa quante volte l’algoritmo esegue queste due parole, l’output di entrambe rimane lo stesso.
Al contrario, se esegui lo stesso input tramite l'algoritmo di hashing SHA-1, otterrai i seguenti risultati:
Tieni presente che "SHA" è l'acronimo di Secure Hash Algorithms. L'algoritmo si riferisce a un insieme di funzioni hash crittografiche, che include gli algoritmi SHA-0 e SHA-1, nonché i set SHA-2 e SHA-3. SHA-256, insieme a SHA-512 e altre varianti, fanno parte del gruppo SHA-2. Attualmente solo i gruppi SHA-2 e SHA-3 sono considerati sicuri.
Qual è l'importanza delle funzioni hash?
Le funzioni hash tradizionali hanno una varietà di casi d'uso, tra cui ricerche nel database, analisi di file di grandi dimensioni e gestione dei dati. Le funzioni hash crittografiche sono ampiamente utilizzate nelle applicazioni di sicurezza delle informazioni come l'autenticazione dei messaggi e l'impronta digitale. Nel caso di Bitcoin, le funzioni hash crittografiche sono parte integrante del processo di mining, influenzando sia il nuovo indirizzo che la generazione delle chiavi.
Le operazioni hash sono davvero potenti quando si elaborano grandi quantità di informazioni. Ad esempio, esegui un file di grandi dimensioni o un set di dati tramite una funzione hash e quindi utilizza il suo output per verificare rapidamente l'accuratezza e la completezza dei dati. Le funzioni hash funzionano perché sono deterministiche: un input produce sempre un output compresso e semplificato (ovvero un valore hash). Questa tecnologia elimina la necessità di archiviare e "ricordare" grandi quantità di dati.
Le operazioni hash sono particolarmente utili nel campo della tecnologia blockchain. La blockchain di Bitcoin ha molte operazioni che coinvolgono operazioni di hash, la maggior parte delle quali fanno parte del processo di mining. Infatti, quasi tutti i protocolli di criptovaluta si basano sull’hashing per connettere gruppi di transazioni e comprimerli in blocchi, generando al contempo collegamenti crittografici tra i singoli blocchi, creando di fatto una blockchain.
funzione hash crittografica
Allo stesso modo, le funzioni hash che utilizzano tecniche crittografiche possono essere definite come funzioni hash crittografiche. In generale, violare una funzione di hash crittografico richiede innumerevoli tentativi di forza bruta. Per "ripristinare" una funzione hash crittografica, indovinare l'input attraverso tentativi ed errori finché non viene generato l'output corrispondente. Tuttavia, è anche possibile che input diversi producano esattamente lo stesso output, per cui si verifica un "conflitto".
Tecnicamente parlando, una funzione hash crittografica deve possedere tre proprietà per essere considerata efficace nel garantire la sicurezza. I tre attributi principali sono anticollisione, anti-pre-immagine e anti-seconda pre-immagine.
Prima di discutere ogni attributo individualmente, riassumiamo brevemente la logica di ciascun attributo.
Resistenza alle collisioni: è impossibile che due input diversi generino lo stesso valore hash in output.
Anti-immaginebilità: è impossibile "ripristinare" una funzione hash (ovvero non è possibile trovare l'input da un determinato output).
Seconda resistenza alla preimmagine: è impossibile trovare un altro input che sia in conflitto con un input specifico.
resistenza al conflitto
Come accennato in precedenza, le collisioni si verificano quando input diversi generano esattamente lo stesso valore hash. Pertanto, una funzione hash è considerata resistente alle collisioni finché nessuno rileva una collisione. Si noti che poiché i possibili input sono infiniti e i possibili output sono finiti, ci sono sempre collisioni con le funzioni hash.
Supponendo che la probabilità di trovare una collisione sia pari a milioni di anni, si può dire che una funzione hash è resistente alle collisioni. Pertanto, sebbene in realtà non esistano funzioni hash esenti da collisioni, alcune di esse (come SHA-256) sono considerate resistenti alle collisioni purché siano sufficientemente forti.
Tra i vari algoritmi SHA, i gruppi SHA-0 e SHA-1 sono in conflitto, quindi non sono più sicuri. Attualmente i set SHA-2 e SHA-3 sono considerati resistenti alle collisioni.
Anti-immagine
La proprietà antiiconica è legata al concetto di funzioni unidirezionali. Si dice che una funzione hash sia anti-immagine, presupponendo che la probabilità di trovare un input che produca un output specifico sia estremamente bassa.
Si noti che un utente malintenzionato esamina un dato output per indovinare l'input, quindi questa proprietà è diversa dalla resistenza alle collisioni. Inoltre, due input diversi che producono lo stesso output entreranno in conflitto, ma non ha molta importanza quale input venga utilizzato.
Le proprietà anti-immagine sono preziose per proteggere i dati perché un semplice hash di un messaggio può dimostrarne l'autenticità senza divulgare le informazioni. In pratica, molti fornitori di servizi e applicazioni web archiviano e utilizzano hash generati dalle password anziché dalla password in testo non crittografato.
Resistenza alla seconda preimmagine
In breve, la resistenza alle seconde preimmagini si trova a metà tra le due proprietà sopra menzionate. Un secondo attacco di preimmagine si verifica se qualcuno riesce a trovare un input specifico che produce un output uguale a un altro input noto.
In altre parole, il secondo attacco preimmagine è legato alla ricerca di conflitti, ma invece di cercare due input casuali che generano lo stesso valore hash, si cerca un altro input che genera lo stesso valore hash dato l'input specifico.
Un secondo attacco preimmagine di solito significa che c'è un conflitto. Pertanto, qualsiasi funzione hash resistente alle collisioni è anche resistente ai secondi attacchi preimmagine. Tuttavia, essere resistente alle collisioni significa che è possibile trovare un singolo input da un singolo output, quindi un utente malintenzionato può comunque lanciare un attacco preimage contro una funzione resistente alle collisioni.
Estrazione di criptovaluta
Le funzioni hash vengono utilizzate in diverse fasi del mining di Bitcoin, come il controllo dei saldi, la concatenazione di input e output delle transazioni e l'hashing delle transazioni all'interno dello stesso blocco per formare un albero Merkle. Tuttavia, uno dei motivi principali per cui la blockchain di Bitcoin è sicura è che i miner devono eseguire innumerevoli operazioni di hashing prima di poter finalmente trovare una soluzione valida per il blocco successivo.
Nello specifico, i minatori devono provare diversi input durante la creazione degli hash dei blocchi candidati. In sostanza, i minatori possono convalidare un blocco solo se l’hash di output generato inizia con un certo numero di zeri. Il numero di zeri determina la difficoltà di mining e cambia con l'hashrate dedicato alla rete.
In questo caso, l’hash rate rappresenta la quantità di potenza di calcolo impiegata nell’estrazione di Bitcoin. Se l'hash rate della rete aumenta, il protocollo Bitcoin regolerà automaticamente la difficoltà di mining in modo che il tempo medio necessario per generare un blocco rimanga vicino ai 10 minuti. Al contrario, se molti miner decidessero di interrompere il mining, provocando un calo significativo dell’hash rate, la difficoltà di mining verrà abbassata fino a quando il tempo medio di blocco non tornerà a 10 minuti.
Tieni presente che i minatori possono generare più hash come output valido (a partire da un certo numero di zeri), quindi non hanno bisogno di cercare collisioni. Esistono molteplici soluzioni possibili per un blocco, ma a seconda della soglia di difficoltà di mining, i miner devono trovare solo una delle soluzioni.
Il mining di Bitcoin è un compito ad alto costo e non è necessario che i minatori imbroglino il sistema, cosa che causerebbe invece perdite finanziarie significative. Più minatori si uniscono alla blockchain, più grande e potente diventa la blockchain.
Riassumere
Non c’è dubbio che le funzioni hash siano uno strumento essenziale nell’informatica e la loro capacità di elaborare enormi quantità di dati è particolarmente eccezionale. Combinati con la crittografia, gli algoritmi di hashing possono essere utilizzati in vari modi per fornire sicurezza e autenticazione in vari modi. Per quasi tutte le reti di criptovaluta, le funzioni di hash crittografico sono cruciali. Pertanto, se sei interessato alla tecnologia blockchain, sarà di grande vantaggio comprendere le proprietà e il meccanismo operativo delle funzioni hash crittografiche.

