Immagina di poter prendere qualsiasi dato — una singola parola, un romanzo, un video da 4 GB — e ridurlo a una breve stringa di caratteri di lunghezza fissa che lo identifica univocamente. Modifica una singola virgola nell'originale e la stringa diventa completamente diversa. E non c'è modo di invertire il processo per recuperare i dati originali.
È esattamente ciò che fa una funzione hash crittografica. È uno dei mattoni fondamentali della sicurezza moderna, e protegge silenziosamente quasi tutto ciò che fai online.
La metafora dell'impronta digitale
Un hash funziona come un'impronta digitale. La tua impronta digitale ti identifica in modo univoco, ma nessuno può ricostruire il tuo volto a partire da essa. Allo stesso modo, un hash crittografico identifica univocamente un dato senza rivelare quale sia quel dato.
Fornisci qualsiasi input a una funzione hash e otterrai un digest (chiamato anche valore hash o checksum) — una stringa di lunghezza fissa di caratteri esadecimali. SHA-256, uno degli algoritmi più comuni, produce sempre un output di 64 caratteri indipendentemente dalla dimensione dell'input.
| Input | Digest SHA-256 (primi 16 caratteri) |
|---|---|
Hello |
185f8db32271fe25... |
hello |
2cf24dba5fb0a30e... |
| Intero dump di Wikipedia | (sempre 64 caratteri) |
Le quattro proprietà essenziali
Una funzione si qualifica come hash crittografico solo se soddisfa queste proprietà:
- Deterministica. Lo stesso input produce sempre lo stesso output, su qualsiasi macchina, in qualsiasi momento.
- Unidirezionale (resistenza alla pre-immagine). Dato un hash, è computazionalmente impossibile trovare l'input originale. Non puoi "de-hashare" i dati.
- Resistente alle collisioni. È praticamente impossibile trovare due input diversi che producono lo stesso digest. Per SHA-256, le probabilità di una collisione accidentale sono circa 1 su 2^128 — un numero più grande degli atomi nell'universo osservabile.
- Effetto valanga. Modificare un singolo bit nell'input inverte circa la metà dei bit nell'output. Non esiste uno schema o una relazione rilevabile tra input simili.
Distinzione fondamentale: L'hashing non è la crittografia. La crittografia è reversibile con una chiave; l'hashing è deliberatamente irreversibile. Si crittografa un dato per proteggerlo durante il transito. Si esegue l'hash di un dato per verificarne l'integrità o memorizzare una prova senza conservare l'originale.
Algoritmi hash comuni
MD5 (1991)
- Output: 128 bit (32 caratteri esadecimali)
- Stato: Crittograficamente compromesso. I ricercatori possono generare collisioni in pochi secondi su un portatile.
- Ancora usato per: Checksum non di sicurezza per download di file e sistemi legacy.
SHA-1 (1995)
- Output: 160 bit (40 caratteri esadecimali)
- Stato: Deprecato per la sicurezza. Google ha dimostrato una collisione pratica nel 2017 (l'attacco "SHAttered").
- Ancora usato per: Repository Git più vecchi, alcuni certificati legacy.
SHA-256 (2001)
- Output: 256 bit (64 caratteri esadecimali)
- Stato: Standard attuale. Nessun attacco pratico noto.
- Usato per: Certificati TLS, Bitcoin, hashing delle password, firme digitali, verifica dell'integrità dei file.
SHA-3 (2015)
- Output: Variabile (comunemente 256 bit)
- Stato: Standard più recente, basato su un design interno completamente diverso (costruzione a spugna Keccak) rispetto alla famiglia SHA-2.
- Usato per: Sistemi orientati al futuro, Ethereum, situazioni che richiedono diversità degli algoritmi.
| Algoritmo | Dimensione output | Sicuro? | Velocità |
|---|---|---|---|
| MD5 | 128 bit | No | Molto veloce |
| SHA-1 | 160 bit | No | Veloce |
| SHA-256 | 256 bit | Sì | Moderata |
| SHA-3-256 | 256 bit | Sì | Moderata |
Dove viene usato l'hashing crittografico
Memorizzazione delle password
Quando crei un account, un sistema ben progettato non memorizza mai la tua password in chiaro. Memorizza l'hash. Quando accedi, il sistema esegue l'hash di ciò che digiti e lo confronta con il valore memorizzato. Anche se il database viene violato, gli aggressori ottengono gli hash — non le password.
I sistemi moderni vanno oltre aggiungendo un salt casuale (dati extra aggiunti prima dell'hashing) e usando algoritmi intenzionalmente lenti come bcrypt, scrypt o Argon2 per rendere impraticabile la decrittazione a forza bruta.
Verifica dell'integrità dei file
I distributori di software pubblicano checksum SHA-256 insieme ai loro download. Dopo il download, calcoli l'hash del file sulla tua macchina e confronti. Una corrispondenza dimostra che il file non è stato corrotto o manomesso durante il transito.
Firme digitali
Quando firmi digitalmente un documento, il sistema esegue prima l'hash del documento, poi crittografa l'hash con la tua chiave privata. Il destinatario lo decripta con la tua chiave pubblica e lo confronta con il proprio hash del documento. Questo è molto più efficiente della crittografia dell'intero documento e dimostra sia la paternità che l'integrità.
Blockchain
Ogni blocco in una blockchain contiene l'hash del blocco precedente, creando una catena immutabile. Alterare qualsiasi transazione passata modifica l'hash del suo blocco, il che interrompe la catena da quel punto in avanti, rendendo la manomissione immediatamente visibile.
Perché MD5 e SHA-1 sono considerati compromessi
Un algoritmo hash è "compromesso" quando qualcuno può deliberatamente creare due input diversi che producono lo stesso hash (una collisione). Questo mina ogni caso d'uso che si basa sull'unicità.
- MD5: Le collisioni possono essere generate in pochi secondi. I ricercatori hanno creato due file PDF diversi con hash MD5 identici.
- SHA-1: L'attacco SHAttered del 2017 ha prodotto due PDF diversi con lo stesso hash SHA-1, richiedendo circa 6.500 anni di calcolo su una singola CPU (fattibile con risorse cloud).
Regola pratica: Non usare mai MD5 o SHA-1 per qualcosa legato alla sicurezza — password, certificati, firme digitali o verifiche di integrità dove potrebbe essere coinvolto un avversario. Usa invece SHA-256 o SHA-3.
Per approfondire
L'hashing è uno di quei concetti che diventa intuitivo una volta che ci si sperimenta. Prova a eseguire l'hash di una frase, poi cambia un carattere e osserva l'effetto valanga in prima persona.
- Come generare e verificare hash — tutorial passo dopo passo
- Generatore di hash — calcola SHA-256, MD5, SHA-512 e altro istantaneamente nel tuo browser
- Identificatore di hash — incolla un hash sconosciuto e identifica il suo algoritmo
