Se sabe que MD5 está roto por los ataques de colisión. Es posible generar un par de documentos m1
y m2
, de manera que MD5(m1) = MD5(m2)
.
Esto hace que MD5 sea problemático para su uso como hash en los certificados, donde puede generar previamente un par de CSR m1 y m2 con un hash idéntico y luego, cuando una autoridad de certificación firma m1 (para un dominio que usted controla), puede agregar la firma de m1 en m2 para crear un certificado válido.
Si bien MD5 tiene debilidades conocidas, actualmente no es susceptible a ningún ataque de imagen previa computacionalmente práctico. Es decir, si le doy un hash MD5 válido h = ee83225a0d03ad3fb5273d17cdff9927
que he generado al escribir un poco del mensaje m
que mantengo en secreto, no hay una forma computacionalmente viable de encontrar un m
válido tal que MD5(m) = h
.
Añadiré que los ataques ingenuos de colisión en un hash de 128 bits deberían funcionar con O (2 64 ) debido al problema de cumpleaños . (Eso es si genera alrededor de 2 ^ 64 hashes y compara cada uno de los hashes con los 2 ^ 64 - 1 hashes más, es probable que haya un par de hashes coincidentes). Sin embargo, debido a varios problemas debido a Los detalles de MD5, las colisiones se pueden generar en mucho menos trabajo O (2 24.1 ).
Para la resistencia previa a la imagen, un hash de 128 bits debe tomar el trabajo O (2 128 ) para encontrar un mensaje que coincida con el hash. Se publican ataques previos a la imagen contra MD5, pero estos ataques solo lo aceleran en un factor de ~ 25, y aún requieren trabajo O (2 123.4 ) (que está muy lejos del alcance de los ataques prácticos ; donde se suele pensar que el borde está en algún lugar entre 2 ^ 80 y 2 ^ 100).
PS: Si encuentras una cadena que coincida con el hash de más de un año de esta publicación, con mucho gusto donaré $ 1000 a una organización benéfica de tu elección.