Resistenza alle Collisioni nelle Funzioni Hash
Una collisione hash si verifica quando due input diversi producono lo stesso valore hash. Comprendere perché questo è importante e come gli algoritmi differiscono è fondamentale per un uso corretto degli hash.
Cosa Sono le Collisioni?
Poiché le funzioni hash mappano input arbitrari su output di dimensione fissa, le collisioni esistono matematicamente per qualsiasi funzione hash. Input possibili infiniti, ma solo 2^n output possibili (dove n è la lunghezza in bit dell'hash) significa che più input condivideranno inevitabilmente lo stesso hash. La domanda non è se esistono collisioni, ma se gli attaccanti possono trovarle. Una funzione hash sicura rende computazionalmente impossibile trovare collisioni, anche se esistono teoricamente. Ci sono due tipi di attacchi di collisione. Attacco di collisione: trova due input qualsiasi con lo stesso hash. Attacco di preimmagine: dato un hash, trova un input che lo produce. Gli attacchi di collisione sono più facili e spesso sufficienti per compromettere i sistemi. Il paradosso del compleanno spiega perché le collisioni sono più facili da trovare di quanto previsto. A causa della matematica della probabilità, trovare una collisione in un hash a n bit richiede circa 2^(n/2) tentativi, non 2^n. Un hash a 128 bit (MD5) richiede circa 2^64 tentativi per una collisione—difficile, ma fattibile.
Perché le Collisioni Sono Importanti
Le collisioni rompono assunzioni di sicurezza fondamentali. Se firmi digitalmente un contratto, lo hashi e firmi l'hash. Se qualcuno può creare un documento diverso con lo stesso hash, la tua firma è valida su entrambi. Questo non è solo teorico—è stato usato in attacchi reali. Il malware Flame (2012) ha sfruttato una collisione MD5 per impersonare una firma Microsoft. Gli attaccanti hanno trovato una collisione che ha permesso di generare un certificato malevolo con lo stesso hash di un certificato Microsoft reale. Git usa SHA-1 per identificatori di commit. Una collisione SHA-1 potrebbe teoricamente permettere di creare commit malevoli con gli stessi hash di commit legittimi. Git sta migrando a SHA-256 a causa di questo rischio. L'integrità dei file è compromessa. Se verifichi un checksum software contro un checksum MD5, un attaccante potrebbe creare software malevolo con lo stesso hash MD5. Ecco perché fonti affidabili usano SHA-256 per la verifica dei download.
Algoritmi Forti vs Compromessi
MD5 è completamente compromesso per resistenza alle collisioni. Con hardware moderno, le collisioni possono essere trovate in secondi. I ricercatori hanno dimostrato dieci file PDF con lo stesso hash MD5 ma contenuto diverso. Non usare mai MD5 dove la resistenza alle collisioni è importante. SHA-1 è praticamente compromesso. La collisione di Google del 2017 ha richiesto uno sforzo computazionale massiccio, ma i costi diminuiscono annualmente. L'attacco che costava $110.000 nel 2017 ora è sostanzialmente più economico. Considera SHA-1 insicuro per nuove applicazioni. SHA-256 rimane sicuro. Il miglior attacco noto è solo marginalmente migliore della forza bruta. Con output a 256 bit, anche raggiungere 2^128 tentativi per una collisione richiederebbe più energia di quanto contenga il sistema solare. SHA-512 offre margine di sicurezza maggiore. Con output a 512 bit, le collisioni sono ancora più impraticabili. Fornisce sicurezza futura contro scoperte crittoanalitiche impreviste. Conclusione: usa SHA-256 o SHA-512 per applicazioni critiche per la sicurezza. Usa MD5/SHA-1 solo quando non hai esplicitamente bisogno di resistenza alle collisioni (es. tabelle hash, checksum non critici).
Prova lo Strumento
Generatore di Hash