Duda sobre md5 y sha-1
Hola, a todos, bueno este es mi primer post en este portal que mola mucho.
Bueno mi pregunta es un poco... no se, pero bueno la lanzo.
A ver; de todos es sabido que tanto el md5 como el sha-1 son algoritmos de tipo mesage digest y secure hash algorithm, bueno conclusion que lo que hacen es un resumen de un numero de bytes en función del tipo de algoritmo.
Bien en el caso del MD5 es de 32 caractereres hexadecimales, o 128 bits, es decir 2 elevado a 128, entonces es un numero finito algo mas de 3.4*10(38) jajaja, bueno entonces cabe la infima posibilidad de que existan 2 archivos con igual MD5 pero distinto contenido. Entonces mi pregunta ahora es, bien imaginemos que tenemos tan mala suerte que tenemos esos 2 archivos, si se aplicase el sha-1 tendrian tambien el mismo resultado, o cambiaría?.
Bueno es que ya llevo mucho tiempo intentando resolverlo y ahora que tengo un rato libre he aprovechado en escribirlo aqui.
Muchas gracias de antemano.
Yago

- 646 lecturas
Twitter

Colisión
Hola yago83, lo que comentas se llama colisión Hash y no hay ninguna función hash inmune por definición. Es decir, si intentamos resumir un fichero en x bits, tendremos 2^x valores distintos, pero desgraciadamente el número de ficheros distintos que pueden existir no tiene una cota superior, así que sea cual sea la función hash, va a haber posibilidad de colisiones...
Lo que debe garantizar una buena función hash es que los valores se distribuyan uniformemente, es decir, que haya la misma probabilidad de que un fichero aleatorio tenga el resumen 0x0000 que el 0x0001 (por poner un pequeño ejemplo), de esta forma, sabemos que la probabilidad de encontrar dos ficheros con el mismo resumen es 1/N, donde N es el número de valores que puede tomar el resumen (2^128 como bien apuntabas).
Así que, en principio (*), parece que si con una probabilidad de 2^(-128), tienes la mala suerte de encontrar dos ficheros con el mismo resumen, yo tendría cuidado al salir a la calle, porqué es más probable morir atropellado.
(*) Digo en principio, porqué no sería necesario probar más de 2^128 = 3,4 * 10^38 ficheros para encontrar una colisión, gracias a la paradoja del cumpleaños, "sólo" tendrías que probar unos 1,12 * Sqrt (2^128) = 2,2 * 10^19 (http://es.wikipedia.org/wiki/Ataque_de_cumplea%C3%B1os).
PS: Si crees que eres un hombre con mala suerte, siempre puedes usar una función hash de 256 bits como la SHA-256 o superior ;-)