Qualsiasi funzione di hash crittografica ininterrotta n -bit ha una resistenza di collisione di 2 n / 2 . Ciò significa che, se si desidera avere una resistenza di collisione 2 128 , è necessario utilizzare, come minimo, una funzione hash a 256 bit. Dato che 2 operazioni 64 sono raggiungibili, non si vorrebbe usare un hash a 128 bit. Un hash a 160 bit (ovvero un livello di sicurezza 2 80 ) è borderline. L'uso di un hash a 256 bit ti fornirà un livello di sicurezza 2 128 , che dovrebbe essere perfetto per il prossimo futuro. A volte, i punti deboli nella funzione di hash stessa risultano più facili da interrompere rispetto a quanto suggerito dal digest output. La famiglia di hash SHA-2 è un esempio attualmente ininterrotto. SHA-1 d'altra parte è rotto . Ha un output a 160 bit ma "solo" un 2 63 livello di sicurezza contro le collisioni, piuttosto che 2 80 .
Sospetto che tu possa confondere gli attacchi di collisione con altri tipi di attacchi. Un attacco di collisione non consentirà a un utente malintenzionato di trovare un input che ha un valore arbitrario. Le definizioni formali:
-
Attacco preimage - Dato h dove f (m) = h , trova qualsiasi m ' tale che f (m ') = h .
"Trova l'input che hash su un valore arbitrario."
-
2 ° attacco preimage - Dato f (m) = h , trova qualsiasi m ' tale che m ≠ m ' e f (m') = h .
"Modifica un input senza modificare l'hash risultante."
-
Attacco collisione : trova qualsiasi coppia di m e m ' tale che m ≠ m' e f (m) = f (m ') .
"Trova due input con lo stesso hash."
Ogni attacco ha implicazioni diverse. Un attacco di collisione è problematico per i certificati, in quanto possono essere utilizzati in firme valide sia per versioni benigne che malevoli dello stesso software. Un attacco preimage è problematico per la verifica. Immaginate se un utente malintenzionato possa modificare un eseguibile senza cambiarne l'hash. Chiaramente, un attacco preimage è molto più grave di un attacco di collisione, ma è anche fortunatamente molto più difficile da attuare. L'algoritmo MD4, infame e insicuro, ad esempio, è così dannoso per la resistenza di collisione che è più economico trovare una collisione piuttosto che eseguire la stessa funzione hash due volte. Tuttavia, per quanto sia rotto, gli attacchi preimage contro di esso sono altamente teorici.
Se, d'altra parte, si vuole semplicemente controllare la corruzione accidentale e non si intende proteggere contro un attaccante attivo, allora un CRC con un polinomio opportunamente selezionato sarebbe l'ideale. Un CRC può effettivamente garantire il rilevamento degli errori fino a un punto.