Hash

Difficoltà: base

Argomento: tecnologia


DEFINIZIONE

Un hash è una funzione matematica crittografica che converte un dato di lunghezza arbitraria in una stringa di lunghezza fissa.

È una funzione fondamentale per i Bitcoin, e per la crittografia in generale. Gli hash sono usati ampiamente in Bitcoin: dalle strutture dati al mining, agli ID delle transazioni e gli indirizzi, e altro ancora.

Può essere considerata come una tecnica di crittografia in cui i messaggi vengono trasformati matematicamente in una sequenza di numeri e lettere di lunghezza fissa. Gli output hanno lunghezze impostate per rendere impossibile determinare la dimensione dell'input. Ad esempio, l'hash di una singola parola ha la stessa lunghezza dell'hash del testo di un intero libro.

Queste funzioni hash sono irreversibili, operano in una sola direzione, il che significa avendo l'input si otterrà sempre lo stesso hash, ma dall'hash è impossibile determinare quale sia il testo in input che genera quell'hash.

Ogni codice generato può essere considerato unico, il che significa che la possibilità che si possa avere lo stesso hash con due input diversi è infinitesimale e quindi trascurabile.

A cosa serve un codice segreto che non può essere decodificato? Innanzitutto, è un modo per verificare. Se vi viene inviato l'hash di un messaggio, non vi fornisce le informazioni necessarie per ricreare il messaggio. Ma quando ricevete il messaggio, potete inserirlo in un programma che genera l'hash, e se corrisponde esattamente all'hash ricevuto, si ha la certezza che il messaggio è quello originale e non è stato sostituito o alterato. È impossibile utilizzarlo per decodificare l'hash, ma è facile da utilzzare per effettuare la verifica.

Esistono numerosi algoritmi che realizzano funzioni hash con particolari proprietà che dipendono dall'applicazione. Nel caso di Bitcoin, la blockchain utilizza SHA 256 per generare un output lungo 256 bit (o 64 caratteri esadecimali), indipendentemente dalla dimensione dell'input. Nel mining di Bitcoin, questo input della funzione di hash corrisponde ad un numero da inserire in un insieme di dati, ovvero l’header del blocco (potremmo dire la sua “intestazione”), in modo tale che una doppia esecuzione dell’hash SHA256 di tali dati sia un numero inferiore ad un target hash (valore espresso in nBits e proporzionale alla difficoltà della rete).


aggiornato il 2022-07-04