MD5 è noto per essere rotto per gli attacchi di collisione. È possibile generare una coppia di documenti m1
e m2
, tali che MD5(m1) = MD5(m2)
.
Ciò rende MD5 problematico da utilizzare come hash nei certificati, dove è possibile pre-generare una coppia di CSR m1 e m2 con un hash identico e quindi quando un'autorità di certificazione firma m1 (per un dominio che controlli), è possibile aggiungere il valore valido firma da M1 su m2 per creare un certificato valido.
Sebbene MD5 abbia noti punti deboli, al momento non è suscettibile di alcun attacco pre-immagine computazionalmente pratico. Cioè se ti do un hash MD5 valido h = ee83225a0d03ad3fb5273d17cdff9927
che ho generato cancellando qualche messaggio m
che tengo segreto, non esiste un modo computazionalmente fattibile per trovare un m
valido tale che MD5(m) = h
.
Aggiungerò che ingenuamente gli attacchi di collisione su un hash a 128 bit dovrebbero richiedere il lavoro di O (2 64 ) a causa del problema di compleanno . (Ovvero se si generano circa 2 ^ 64 hash e si confrontano ciascuno degli hash con gli altri 2 ^ 64 - 1 altri hash, è probabile che ci sarà una coppia di hash corrispondenti.) Tuttavia, a causa di vari problemi dovuti a le specifiche di MD5, le collisioni possono essere generate con molto meno lavoro O (2 24.1 ).
Per la resistenza pre-immagine, un hash a 128 bit dovrebbe impiegare O (2 128 ) per trovare un messaggio che corrisponda all'hash. Ci sono degli attacchi pre-immagine pubblicati contro MD5, ma questi attacchi lo accelera solo di un fattore di ~ 25, e richiedono ancora il lavoro O (2 123.4 ) (che è ben al di fuori del regno degli attacchi pratici ; in cui si ritiene che il bordo sia in genere compreso tra 2 ^ 80 e 2 ^ 100).
PS: Se trovi una stringa che corrisponde all'hash in alto entro un anno da questo post, donerò volentieri $ 1000 a un'organizzazione benefica di tua scelta.