Crittografia e fiducia digitale

Ogni volta che si visita un sito sicuro, si installa un aggiornamento software o si firma un documento elettronico, lavora dietro le quinte una primitiva crittografica che quasi nessuno nota: la funzione hash. È un mattone silenzioso ma essenziale, perché trasforma una qualsiasi quantità di dati in una breve impronta di lunghezza fissa che permette di verificare integrità e autenticità senza dover trasmettere o confrontare i dati originali per intero.

Questa sezione raccoglie articoli tecnici dedicati alle funzioni hash crittografiche, con particolare attenzione alla famiglia SHA e a uno degli eventi più importanti della loro storia recente: la prima collisione pratica di SHA-1, dimostrata nel 2017 dal progetto SHAttered. L’obiettivo è spiegare in modo chiaro e accurato come questi strumenti funzionano, perché contano e cosa succede quando uno di essi viene infranto.

Che cos’è una funzione hash crittografica

Una funzione hash crittografica prende un input di lunghezza arbitraria, che si tratti di una parola, di un file PDF o dell’intero contenuto di un disco, e produce un output di lunghezza fissa, detto digest o impronta. Lo stesso input genera sempre lo stesso digest, mentre input diversi dovrebbero produrre digest diversi.

Tre proprietà rendono una funzione hash adatta a usi di sicurezza. La prima è la resistenza alla preimmagine: dato un digest, deve essere praticamente impossibile risalire a un input che lo produca. La seconda è la resistenza alla seconda preimmagine: dato un input, deve essere irrealizzabile trovarne un secondo, diverso, con lo stesso digest. La terza è la resistenza alle collisioni: deve essere irrealizzabile trovare due input qualsiasi che condividano lo stesso digest.

A queste si aggiunge l’effetto valanga. Cambiare anche un solo bit dell’input modifica il digest in modo radicale e imprevedibile, di solito alterando circa metà dei bit in uscita. Grazie a questa proprietà non esiste alcuna somiglianza riconoscibile tra l’impronta di due file quasi identici, e questo è proprio ciò che serve per individuare manomissioni anche minime.

La famiglia SHA in breve

SHA sta per Secure Hash Algorithm, ed è una serie di standard pubblicati dal NIST, l’ente statunitense per la standardizzazione. Le generazioni principali sono tre.

SHA-1 produce un digest di 160 bit. È stato per anni lo standard di fatto per certificati, firme e sistemi di controllo versione. Oggi è considerato insicuro per gli usi che richiedono resistenza alle collisioni, proprio a causa del risultato ottenuto da SHAttered nel 2017.

SHA-2 è una famiglia che comprende varianti come SHA-224, SHA-256, SHA-384 e SHA-512, dove il numero indica la lunghezza in bit del digest. SHA-256, con la sua impronta da 256 bit, è oggi tra gli algoritmi più diffusi al mondo: protegge il traffico TLS, firma il software e regola la prova di lavoro di Bitcoin. Nonostante condivida una struttura concettuale con SHA-1, le sue dimensioni e i margini di sicurezza lo rendono tuttora solido.

SHA-3 è una generazione più recente, basata su un disegno interno completamente diverso (la costruzione a spugna di Keccak). Non nasce perché SHA-2 fosse compromesso, ma come alternativa progettata in modo indipendente, utile a diversificare il rischio.

Perché l’hashing è alla base della fiducia online

La fiducia online si regge sulla capacità di rispondere a due domande: i dati che ricevo sono integri e provengono davvero da chi dichiara di averli inviati. Le funzioni hash sono lo strumento che rende entrambe le risposte possibili.

Per l’integrità, basta calcolare il digest di un file e confrontarlo con un valore di riferimento pubblicato dall’autore. Se le due impronte coincidono, il file non è stato alterato durante il trasferimento o l’archiviazione. Se differiscono anche per un solo bit, qualcosa è cambiato.

Per l’autenticità entrano in gioco le firme digitali. Una firma non viene applicata all’intero messaggio, che potrebbe essere enorme, ma al suo digest. Questo significa che la sicurezza dell’intero schema di firma dipende dalla solidità della funzione hash sottostante. Se diventa possibile costruire due documenti con lo stesso digest, una firma valida per uno vale anche per l’altro, e la garanzia di autenticità crolla. È esattamente questo lo scenario che SHAttered ha reso concreto per SHA-1.

Lo stesso principio sorregge le blockchain. Ogni blocco contiene il digest del blocco precedente, formando una catena in cui modificare un dato passato richiederebbe di ricalcolare tutte le impronte successive. È l’hashing a rendere il registro praticamente immutabile.

Cosa copre questa sezione

Gli articoli che seguono approfondiscono i temi appena introdotti, ciascuno in modo autonomo e con un taglio tecnico.

La collisione SHA-1 di SHAttered racconta in dettaglio l’attacco annunciato nel febbraio 2017 da CWI Amsterdam e Google: due file PDF diversi con la stessa impronta SHA-1, l’enorme sforzo di calcolo richiesto e le conseguenze sulla dismissione di SHA-1.

L’articolo dedicato a SHA-256 spiega dove si colloca questo algoritmo dentro SHA-2, come si comporta e dove viene usato concretamente, dai certificati TLS alla prova di lavoro di Bitcoin.

La pagina sulle funzioni hash crittografiche tratta le proprietà generali che ogni buona funzione hash deve possedere, la differenza rispetto agli hash non crittografici e gli usi più comuni, dalla conservazione delle password con salt ai controlli di integrità.

Infine, l’articolo sulle firme digitali descrive il funzionamento della firma elettronica, il ruolo combinato di hash e chiavi asimmetriche e il motivo per cui una collisione come quella di SHAttered minaccia direttamente la sicurezza delle firme.

Letti insieme, questi testi compongono un quadro coerente: dalle proprietà teoriche delle funzioni hash fino al giorno in cui una di esse, SHA-1, è stata infranta nella pratica, con tutto ciò che ne è seguito per la sicurezza di Internet.