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.

MERKLE–DAMGÅRD · a catena blocchi del file IV f f f digest MD5 · SHA-1 · SHA-2 · RIPEMD-160 Ogni blocco aggiorna uno stato che scorre in avanti. SPUGNA · assorbi e strizza stato interno ampio assorbimento → spremitura digest SHA3-224/256/384/512 (Keccak) Struttura completamente diversa da SHA-2. ALBERO DI MERKLE · parallelizzabile digest f f b1 b2 b3 b4 BLAKE3 · BLAKE2b/2s I blocchi si calcolano in parallelo su più core b1…b4 = blocchi del file e si fondono a coppie: da qui la velocità.
La costruzione conta più della lunghezza: SHA-256 e SHA3-256 producono entrambi 256 bit, ma per romperli servirebbero attacchi completamente diversi.

I 18 algoritmi di Probatio

AlgoritmoBitFamigliaQuando usarlo
MD5128Merkle–DamgårdCompatibilità con E01, hashset e verbali storici. Mai da solo su file di provenienza avversa.
SHA-1160Merkle–DamgårdCome MD5: interoperabilità, non garanzia primaria.
SHA-224224SHA-2Raro. SHA-256 troncato, per vincoli di spazio.
SHA-256256SHA-2Il predefinito. Standard di fatto della forensica e di BagIt.
SHA-384384SHA-2Quando un capitolato impone margini superiori a 256 bit.
SHA-512512SHA-2Su CPU a 64 bit è spesso più veloce di SHA-256. Ottimo secondo hash.
SHA-512/224224SHA-2SHA-512 troncato, con IV diverso: immune all'estensione di lunghezza.
SHA-512/256256SHA-2256 bit con la velocità di SHA-512. Sottovalutato.
SHA3-224224Spugna (Keccak)Diversificazione rispetto a SHA-2.
SHA3-256256Spugna (Keccak)Il miglior compagno di SHA-256: struttura interna indipendente.
SHA3-384384Spugna (Keccak)Requisiti normativi elevati.
SHA3-512512Spugna (Keccak)Margine massimo, costo maggiore.
RIPEMD-160160Merkle–DamgårdEcosistema Bitcoin e vecchie PKI europee.
BLAKE2b-512512HAIFAVeloce su CPU a 64 bit, robusto, usato da BagIt.
BLAKE2s-256256HAIFAVariante per architetture a 32 bit e sistemi embedded.
BLAKE3256Albero di MerkleIl più rapido su file molto grandi: sfrutta tutti i core.
CRC3232non crittograficoErrori di trasmissione. Falsificabile in millisecondi.
XXH364non crittograficoDeduplicazione 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

Che cosa devi ottenere? Nuova acquisizione reperto che devo difendere Verifica di un hash noto E01, verbale, catalogo Controllo di trasferimento copia, download, backup SHA-256 + SHA3-256 famiglie indipendenti + MD5 se serve dialogo lo stesso del riferimento più SHA-256 per il futuro confronto, non fede BLAKE3 o XXH3 velocità, nessun avversario non finisce in relazione In caso di dubbio: SHA-256. È la risposta giusta nel 90% dei casi.
Tre domande, tre risposte. La quarta domanda — «quanti ne calcolo?» — ha una risposta sola: tutti quelli che ti servono, tanto costano quanto uno.

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

  1. 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.
  2. 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.
  3. 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.