Definizione
Una funzione hash crittografica è un algoritmo matematico che prende in input qualsiasi dato, indipendentemente dalla sua dimensione, e lo trasforma in un digest di lunghezza fissa. Alcune versioni moderne, chiamate eXtendable Output Functions (XOF), possono produrre output di lunghezza personalizzabile. Le funzioni hash possiedono diverse proprietà essenziali: sono deterministiche, ovvero lo stesso input produce sempre lo stesso output; sono resistenti alla preimmagine, quindi è praticamente impossibile invertire un hash per trovare l'input originale; sono resistenti alle collisioni, il che rende praticamente impossibile trovare due input diversi che producano lo stesso hash; e presentano l'effetto valanga, per cui anche una minima modifica all'input si traduce in un output completamente diverso. Bitcoin utilizza SHA-256 per il mining e l'hashing delle transazioni, mentre Ethereum utilizza Keccak-256, una variante di SHA-3. Le funzioni hash sono il fondamento di sicurezza blockchain—consentono di tutto, dalla dimostrazione del lavoro nel settore minerario alla creazione Albero di merkle bozze e firma delle transazioni.
Proprietà delle funzioni hash illustrate
Esempi di hash SHA-256: Input: “Hello” Output: 185f8db32271fe25f561a6fc938b2e26…
Input: “hello” (minuscolo) Output: 2cf24dba5fb0a30e26e83b2ac5b9e29e… → Completamente diverso (effetto valanga)
Input: file video da 10 MB Output: sempre solo 64 caratteri esadecimali (256 bit) → Dimensione di output fissa indipendentemente dalla dimensione di input
Dimostrazione della resistenza alla preimmagine: Obiettivo: trovare l'input che produce "0000abc..." Unico metodo: forza bruta (prova miliardi di input) Mining di Bitcoin: esattamente questo: trovare il nonce che produce un hash inferiore all'obiettivo A 500 exahash/secondo (rete Bitcoin): ~500,000,000,000,000,000,000 tentativi/secondo
Resistenza alle collisioni: Obiettivo: trovare due input diversi che producono lo stesso hash SHA-256: nessuna collisione trovata (2^128 operazioni per trovarne una) SHA-1 (obsoleto): collisioni trovate (Google, 2017) → Non più affidabile
Funzioni hash utilizzate nella crittografia
| Funzione hash | Dimensione dell'output | Usato in | Stato |
| SHA-256 | 256 bit, | Bitcoin (mining, transazioni) | Assicurate |
| Keccak-256 | 256 bit, | Ethereum (indirizzi, transazioni) | Assicurate |
| SHA-3-256 | 256 bit, | Alcuni protocolli più recenti | Assicurate |
| BLAKE2/BLAKE3 | Variabile (come XOF) | Zcash, alcuni protocolli | Sicuro, più veloce |
| SHA-1 | 160 bit, | Legacy (obsoleto) | ROTTO (collisione rilevata) |
| MD5 | 128 bit, | Legacy (obsoleto) | ROTTO (collisione di lieve entità) |
| RIPE®-160 | 160 bit, | derivazione dell'indirizzo Bitcoin | Sicuro (con SHA-256) |
FAQ
D: Perché non possiamo invertire un hash per trovare l'input?
Le funzioni hash implicano operazioni matematiche non invertibili: scartano deliberatamente delle informazioni. È possibile verificare che hash(input) = output, ma non è matematicamente possibile invertire hash(output) → input. L'unico attacco generale conosciuto è la forza bruta: provare molti input finché non se ne trova uno che, tramite hash, corrisponde al valore desiderato. Per output a 256 bit, ciò richiede circa 2^256 tentativi, un numero superiore al numero di atomi nell'universo osservabile. Questa irreversibilità è ciò che rende le funzioni hash utili per la memorizzazione delle password, le firme digitali e la prova di lavoro.
D: Cos'è l'"effetto valanga" e perché è importante?
L'effetto valanga significa che la modifica di un solo bit (un singolo carattere) nell'input produce un output hash completamente diverso: in genere, circa la metà dei bit nell'output cambia. Questo è importante per la sicurezza della blockchain: se l'intestazione di un blocco viene modificata anche solo leggermente (per cambiare un timestamp o una transazione), l'hash cambia completamente e diventa non valido, richiedendo di rifare l'intera prova di lavoro. Questo rende la cronologia delle transazioni della blockchain di fatto immutabile.
D: Come vengono utilizzate le funzioni hash nelle firme digitali?
Anziché firmare direttamente un documento di grandi dimensioni, si esegue prima l'hashing del documento (producendo un hash a 256 bit indipendentemente dalle dimensioni del documento), quindi si firma l'hash con la propria chiave privata. Questo metodo è efficiente (firmare un hash di dimensioni fisse è molto più veloce che firmare un file da un gigabyte) e garantisce la sicurezza (la firma dimostra che il documento specifico è stato firmato: qualsiasi modifica altera l'hash e invalida la firma). Tutte le firme delle transazioni blockchain seguono questo schema.










