Quale algoritmo di hash scegliere
Diciotto algoritmi in un menu a tendina sono una promessa o un'ansia, a seconda di quanto sai. La buona notizia è che non sono diciotto scelte indipendenti: sono tre famiglie con costruzioni interne diverse, più due checksum che non c'entrano niente con la crittografia e che è bene non confondere.
Tre famiglie, non diciotto decisioni
Quello che distingue davvero un algoritmo di hash da un altro non è la lunghezza del digest: è come mastica i dati. E di modi di masticarli, in produzione, ce ne sono tre.
I 18 algoritmi di Probatio
| Algoritmo | Bit | Famiglia | Quando usarlo |
|---|---|---|---|
| MD5 | 128 | Merkle–Damgård | Compatibilità con E01, hashset e verbali storici. Mai da solo su file di provenienza avversa. |
| SHA-1 | 160 | Merkle–Damgård | Come MD5: interoperabilità, non garanzia primaria. |
| SHA-224 | 224 | SHA-2 | Raro. SHA-256 troncato, per vincoli di spazio. |
| SHA-256 | 256 | SHA-2 | Il predefinito. Standard di fatto della forensica e di BagIt. |
| SHA-384 | 384 | SHA-2 | Quando un capitolato impone margini superiori a 256 bit. |
| SHA-512 | 512 | SHA-2 | Su CPU a 64 bit è spesso più veloce di SHA-256. Ottimo secondo hash. |
| SHA-512/224 | 224 | SHA-2 | SHA-512 troncato, con IV diverso: immune all'estensione di lunghezza. |
| SHA-512/256 | 256 | SHA-2 | 256 bit con la velocità di SHA-512. Sottovalutato. |
| SHA3-224 | 224 | Spugna (Keccak) | Diversificazione rispetto a SHA-2. |
| SHA3-256 | 256 | Spugna (Keccak) | Il miglior compagno di SHA-256: struttura interna indipendente. |
| SHA3-384 | 384 | Spugna (Keccak) | Requisiti normativi elevati. |
| SHA3-512 | 512 | Spugna (Keccak) | Margine massimo, costo maggiore. |
| RIPEMD-160 | 160 | Merkle–Damgård | Ecosistema Bitcoin e vecchie PKI europee. |
| BLAKE2b-512 | 512 | HAIFA | Veloce su CPU a 64 bit, robusto, usato da BagIt. |
| BLAKE2s-256 | 256 | HAIFA | Variante per architetture a 32 bit e sistemi embedded. |
| BLAKE3 | 256 | Albero di Merkle | Il più rapido su file molto grandi: sfrutta tutti i core. |
| CRC32 | 32 | non crittografico | Errori di trasmissione. Falsificabile in millisecondi. |
| XXH3 | 64 | non crittografico | Deduplicazione e cache. Mai come prova. |
CRC32 e XXH3 non sono hash crittografici
Vanno trattati a parte, e Probatio li marca esplicitamente come non crittografici. Un CRC32 è progettato per accorgersi che un cavo ha corrotto qualche bit durante una trasmissione. Non è progettato per resistere a un essere umano che vuole ingannarlo: dato un CRC32 qualsiasi, costruire un file che lo produca è un esercizio di algebra lineare che si risolve istantaneamente.
Un CRC32 in una relazione tecnica, presentato come garanzia di integrità, è un errore che si nota. Va bene per verificare che un download non si sia corrotto; non va bene per nient'altro.
Come scegliere
Il costo di calcolarne tanti: praticamente zero
L'intuizione dice che sei algoritmi costino sei volte uno. Sbagliato, e per un motivo che riguarda il disco più della matematica.
Probatio legge il file una volta sola, in blocchi da 1 MiB, e passa ogni blocco a tutti gli algoritmi selezionati prima di leggere il successivo. Su un disco meccanico, o su un file da decine di gigabyte, il tempo è dominato dalla lettura: la CPU aggiorna sei stati interni mentre aspetta il blocco dopo. Il risultato pratico è che calcolare MD5, SHA-1, SHA-256, SHA-512 e BLAKE3 insieme costa quasi come calcolarne uno.
Detto altrimenti: non c'è nessuna ragione di risparmiare. Seleziona quelli che ti servono oggi, più quello che ti servirà quando il fascicolo verrà riaperto.
Tre errori ricorrenti
- Credere che più bit significhino più sicurezza. SHA-512 non è «il doppio più sicuro» di SHA-256: entrambi sono, oggi, inattaccabili. Il margine in più conta per la longevità, non per la resistenza attuale.
- Scegliere due algoritmi della stessa famiglia. SHA-256 e SHA-384 condividono la costruzione: un attacco strutturale a SHA-2 li toccherebbe entrambi. SHA-256 e SHA3-256 no.
- Mettere un CRC32 in relazione. Vedi sopra.
Diciotto voci in un menu non sono diciotto decisioni: sono un archivio. Ne userai due o tre, sempre le stesse — ma il giorno in cui ti arriva un E01 del 2009 con dentro solo un MD5, sarai contento che ci sia.