Definizione
L'hashing è un processo crittografico che prende un input di qualsiasi dimensione (testo, file, dati di transazione, ecc.) e lo converte in una stringa di output di lunghezza fissa chiamata hash, digest o checksum, utilizzando una funzione matematica chiamata funzione hash. L'hashing è un processo unidirezionale e deterministico: lo stesso input produce sempre lo stesso hash, ma è computazionalmente impossibile ricostruire l'input originale a partire dal suo hash. La tecnologia blockchain si basa fondamentalmente sull'hashing: ogni blocco contiene l'hash del blocco precedente (creando la "catena"), tutte le transazioni in un blocco vengono sottoposte ad hashing per ottenere una radice di Merkle e il mining Proof of Work è essenzialmente una ricerca a forza bruta per trovare input che producono hash inferiori a una determinata soglia. La funzione hash più importante in Bitcoin è SHA-256 (Secure Hash Algorithm 256-bit), che produce un output esadecimale di 64 caratteri. Ethereum utilizza Keccak-256, mentre diverse altre applicazioni utilizzano MD5, SHA-1 (ora deprecato per motivi di sicurezza), bcrypt (per le password) e altri ancora.
Origine e storia
| Data | Event |
| 1953 | Hans Peter Luhn (IBM) sviluppa i primi concetti di hashing per il recupero dei dati |
| 1970 secondi | Formalizzazione delle funzioni hash crittografiche; utilizzate nella sicurezza informatica |
| 1993 | SHA-0 (SHA originale) pubblicato da NSA/NIST |
| 2001 | SHA-256 (parte della famiglia SHA-2) pubblicato dal NIST; fondamento di Bitcoin |
| 2008 | Satoshi Nakamoto utilizza SHA-256 due volte (SHA-256d) nella prova di lavoro di Bitcoin. |
| 2005 | Scoperta vulnerabilità di collisione in SHA-1; accelerata la migrazione a SHA-256. |
| 2017 | Google dimostra l'attacco di collisione SHA-1 (SHAttered); SHA-256 rimane inviolato |
| 2024 | SHA-256 è tuttora considerato crittograficamente sicuro; non sono noti attacchi di collisione pratici |
"Una funzione hash è una macchina per impronte digitali digitali: basta inserire un documento qualsiasi e si ottiene un'impronta digitale univoca di dimensioni fisse che cambia completamente anche con una sola differenza di carattere."
Come funziona
| Funzione hash | Dimensione dell'output | Uso comune | Stato della sicurezza |
| SHA-256 | 256 bit (64 esadecimali) | Bitcoin PoW, hashing dei blocchi | Assicurate |
| Keccak-256 | 256 bit (64 esadecimali) | Indirizzi Ethereum, transazioni | Assicurate |
| SHA-3 | 256/512 bit | Crittografia generale | Assicurate |
| MD5 | 128 bit (32 esadecimali) | Integrità dei file (legacy) | Rotto |
| SHA-1 | 160 bit (40 esadecimali) | Sistemi legacy | Rotto |
In parole semplici
- Impronta digitaleUn hash è come un'impronta digitale per i dati: unico, di dimensioni fisse e generato dai dati originali. Anche una minima modifica all'input altera completamente l'hash.
- Funzione unidirezionaleÈ possibile eseguire l'hashing di qualsiasi cosa all'istante, ma non è possibile "dehashare" i dati: non c'è modo di ricostruire i dati originali a partire dal solo hash.
- Colla blockchainOgni blocco Bitcoin contiene l'hash del blocco precedente: se modifichi una transazione precedente, l'hash del blocco corrispondente cambia, invalidando tutti i blocchi successivi. Questo è ciò che rende le blockchain immutabili.
- Puzzle minerarioIl mining di Bitcoin consiste nella ricerca di un hash specifico: i minatori provano miliardi di input (modificando un nonce) finché non trovano un hash che inizia con un numero sufficiente di zeri.
- Generazione di indirizziIl tuo indirizzo di portafoglio Ethereum è un hash Keccak-256 troncato della tua chiave pubblica: l'hashing converte chiavi crittografiche complesse in un indirizzo utilizzabile di 42 caratteri.
Esempi del mondo reale
| Scenario | Implementazione/Attuazione | Risultato |
| ID della transazione (TXID) | L'hash dei dati di transazione di Bitcoin (SHA-256d) → TXID di 64 caratteri | Identificativo univoco; ricerca su qualsiasi esploratore di blocchi |
| Collegamento a catena di blocchi | Ogni blocco include l'hash SHA-256 del blocco precedente | La modifica di un blocco invalida tutti i blocchi successivi. |
| indirizzo dello smart contract | Indirizzo del contratto Ethereum = Keccak-256 dell'indirizzo del deployer + nonce | Indirizzamento contrattuale deterministico e riproducibile |
| Integrità dei file | Hash SHA-256 del software scaricato rispetto all'hash pubblicato | Verifica che il download non sia stato manomesso |
| Memorizzazione password | Hash bcrypt/Argon2 + salt memorizzati al posto del testo in chiaro | La violazione del database non espone le password effettive |
Vantaggi
| Vantaggio | Descrizione |
| Integrità dei dati | Qualsiasi modifica all'input produce un hash completamente diverso – rilevamento manomissioni |
| EFFICIENZA | Uscita a dimensione fissa indipendentemente dalla dimensione dell'input: standardizza il riferimento dei dati |
| sicurezza a senso unico | Impossibile ricavare i dati originali dall'hash; password e chiavi sono al sicuro da accessi non autorizzati. |
| Deterministico | Lo stesso input produce sempre lo stesso hash; la verifica è istantanea ed economica. |
| Collegamento a catena | La concatenazione di hash crittografici crea l'immutabilità della blockchain |
Svantaggi e rischi
| Svantaggio | Descrizione |
| Obsolescenza della funzione hash | MD5 e SHA-1 sono vulnerabili; persino SHA-256 potrebbe alla fine trovarsi ad affrontare minacce quantistiche. |
| Attacchi al tavolo arcobaleno | Le tabelle di ricerca hash precalcolate possono decifrare hash di password deboli e non salati |
| Nessuna crittografia | Hashing ≠ crittografia; i dati sottoposti ad hashing non possono essere "decrittografati": si tratta di una sintesi unidirezionale. |
| Rischio di collisione | Teoricamente possibile, ma praticamente irrealizzabile con le funzioni moderne |
| Vulnerabilità quantistica | I computer quantistici di grandi dimensioni potrebbero potenzialmente decifrare SHA-256 (tra qualche decennio). |
Suggerimenti per la gestione del rischio:
- Utilizzare sempre il moderno funzioni hash (SHA-256, SHA-3, Keccak-256) – mai MD5 o SHA-1 per motivi di sicurezza
- Per le password, utilizzare funzioni specializzate (bcrypt, Argon2, scrypt) con salting, non SHA-256 grezzo.
- Verifica i download del software confrontando i checksum SHA-256 provenienti da fonti ufficiali.
- Monitorare gli standard crittografici del NIST per future linee guida sulle funzioni hash post-quantistiche.
FAQ
Cos'è un hash in parole semplici?
Un hash è un'impronta digitale di dimensioni fisse di qualsiasi dato. Inserendo "Hello World" in SHA-256 si ottiene sempre lo stesso risultato di 64 caratteri, ma cambiando una sola lettera il risultato è completamente diverso.
È possibile invertire gli hash?
No. Le funzioni hash crittografiche sono progettate per essere unidirezionali, ovvero computazionalmente impossibili da invertire. Per questo motivo vengono utilizzate per l'immutabilità della blockchain e per la memorizzazione delle password.
Perché Bitcoin utilizza SHA-256 due volte (SHA-256d)?
Il Double-SHA-256 fornisce una protezione aggiuntiva contro alcuni attacchi di estensione della lunghezza che potrebbero teoricamente colpire le applicazioni a singolo hash. Satoshi lo ha incluso come ulteriore livello di sicurezza.
Cosa rende una blockchain immutabile tramite hashing?
Ogni blocco contiene l'hash del blocco precedente. Se si modifica una transazione storica, l'hash del blocco corrispondente cambia, invalidando il blocco successivo (che fa riferimento al vecchio hash) e interrompendo l'intera catena.
Gli hash sono unici?
In teoria, due input diversi potrebbero produrre lo stesso hash (collisione). In pratica, per SHA-256, trovare una collisione è computazionalmente impossibile con le tecnologie attuali e future, il che lo rende più sicuro che fisicamente impossibile.









