Che cos'è un hash e a che cosa serve

Una funzione di hash trasforma dati di qualsiasi lunghezza in un'impronta di lunghezza fissa: 128 bit per MD5, 256 per SHA-256. Basta cambiare una sola lettera perché l'impronta cambi completamente, ed è impossibile risalire ai dati partendo dall'impronta.

Per questo gli hash servono a verificare che un file scaricato sia integro, a identificare dati senza conservarli, a firmare documenti e, con algoritmi lenti e sale, a memorizzare le password. Git identifica ogni versione con uno SHA-1, Bitcoin si basa su SHA-256.

MD5 e SHA-1 non sono più sicuri: si sanno costruire due file diversi con la stessa impronta. Restano utili per controllare errori di trasmissione, ma per la sicurezza servono SHA-256 o superiori.

Errori frequenti

  • Confrontare un hash calcolato su un testo con a capo o spazi in più: basta un carattere invisibile per cambiare tutto.
  • Usare MD5 o SHA-256 da soli per salvare password: sono troppo veloci da provare in massa. Servono algoritmi lenti come bcrypt o Argon2.
  • Pensare che l'hash si possa decifrare: non è una cifratura. I siti che lo invertono usano solo tabelle di hash già calcolati.

Domande frequenti

Posso risalire al testo partendo dall'hash?

No. Una buona funzione di hash non si inverte; si può solo provare a indovinare il testo e confrontare. Per questo password brevi o comuni vengono trovate comunque.

Come verifico un file scaricato?

Calcola l'hash del file con uno strumento del sistema (sha256sum su Linux, Get-FileHash su Windows) e confrontalo con quello pubblicato. Se anche un solo carattere differisce, il file è diverso.

Perché lo stesso testo dà hash diversi in programmi diversi?

Di solito per la codifica o per i caratteri di fine riga: un testo salvato con CRLF o in Latin-1 ha byte diversi da quello in UTF-8 con LF, e quindi un hash diverso.

Come funziona questo calcolo

Il testo viene prima trasformato in byte con UTF-8. SHA-1, SHA-256, SHA-384 e SHA-512 sono calcolati con l'API Web Crypto del browser, secondo lo standard FIPS 180-4. MD5 segue la RFC 1321: i dati vengono completati fino a un multiplo di 512 bit con la loro lunghezza, poi ogni blocco passa per 64 passaggi di somme, rotazioni e funzioni logiche su quattro parole da 32 bit.