| Kriptópolis alojado en |
| Zilos-Veloxia Network |
| Tu mejor defensa: |
| Bufet Almeida |
Explotando las colisiones de MD5
Eduardo Díaz ha escrito un excelente artículo [1] para Codeproject, del que podemos encontrar una versión reducida [2] -pero en español- en su weblog [3].
El artículo describe la realización de un programa en C# para demostrar cómo se pueden explotar las colisiones encontradas en MD5 para crear dos archivos con el mismo valor de hash...
Primero se generan dos archivos binarios para distribuir, usando un programa inofensivo (good.exe) y otro programa peligroso (evil.exe). El valor MD5 para ambos archivos es el mismo.
Posteriormente, un programa extractor saca distintas versiones del programa, dependiendo del archivo de distribución que se le entrega. En el primer caso vemos como se extrae del archivo good.bin el programa inofensivo y se ejecuta sin problemas.
En el segundo caso, el usuario extrae del archivo evil.bin nuestro programa dañino. Como el usuario está confiado de que el archivo no ha sido alterado (debido a que su hash MD5 es el correcto), ejecuta un programa, que en este caso puede hacer mucho daño, como formatear el disco.
Se incluyen código fuente y demo compilada.
- Exploiting MD5 collisions [CodeProject]
- Explotando las colisiones de MD5 [La Naturaleza del Software]
- La Naturaleza del Software




Las colisiones MD5 en el mundo real
Se está hablando mucho de explotar las colisiones del algoritmo hash MD5 y me pregunto, pero en la realidad, es factible crear el mismo valor hash, para un texto con sentido, y no para un texto arbitrario y carente de sentido en la realidad.
En principio todo algoritmo hash de longitud finita, tiene colisiones, por ejemplo si el algoritmo (A) crea un valor hash de longitud (K), el valor hash para el texto (K+1), será un valor que colisionará con algún texto <= (K).
Lo importante de estos algoritmos es si producen el mismo valor hash para textos parecidos que es lo que importa, o suplantar código que funcione.
Por ejemplo sería facil crear el mismo valor hash para el siguiente texto:
GOMÉZ GARCÍA, JUAN - NIF 0666555D por otro como
FRICH, HENRI -NIF 0666555D no serviría algo como
@Dsew#€rcvbhKIU/$ YYq$&&8
Si se ha encontrado una función (F) tal que dado un valor hash (VH) nos permita efectuar en un texto (T1) tal que F[T1] = T2 con sentido no un texto cualquiera con el mismo valor hash (VH), entonces se puede afirmar que se ha roto el algoritmo, si no creo que el algoritmo es valido y seguro y que sus colisiones son las implicitas a todo algoritmo.
The Story of Alice and her Boss
Te recomiendo la lectura de la siguiente página:
Y, concretamente, del siguiente documento:
Confío en que esto despejará tus dudas.
Menuda chapuza de función Hash
Si he entendido bien el PDF, el ataque se basa en que la función hash elegida se comporta bien por concatenación. Eso es un pedazo de agujero de seguridad.
Qué funciones hash usuales tienen ese problema?.
Se me ocurren opciones más practicas...
Desgraciadamente el MD5 se usa con profusión y lo peor de todo es que el 90% de las funciones de hash son variaciones de una misma idea, lo que reduce las posibilidades y permite heredar debilidades.
Como pongo en el título, una vez rota la función de HASH o conocido el método de generar mensajes con una firma válida, la cosa está chupada, desde defraudar al banco en operaciones por Internet, hasta falsear la declaración de la renta del vecino, pasando por mandar comprometedores mensajes firmados a nombre de otro, acceder a redes informáticas "seguras", todo es posible. No en vano, el MD5 es varios órdenes de magnitud menos seguro que cuando se diseñó y va de camino a serlo mucho menos.
Recomiendo.... mi artículo:
No es un buen momento para la firma electrónica y el voto electrónico
"Copyleft 2005 Fernando Acero Martín. Verbatim copying, translation and distribution of this entire article is permitted in any digital medium, provided this notice is preserved".
Igual no es para tanto...
Vale, se han encontrado colisiones en MD5, y vamos también a suponer que son explotables (incluso lo que comentaba Lucas Pot, construir dos textos con sentido). Tampoco tenemos que tirarlo todo a la basura, aunque quizá pudiera ser algo más engorroso que lo actual, siempre será más difícil (muchísimo, a mi modo de ver) conseguir estos logros si las identificaciones se realizan mediante MD5 y además otro (SHA, por ejemplo). Constuir dos ejecutables (o lo que sea) que tengan los dos hash idénticos es bastante más difícil.... o corregidme si me equivoco. Es una idea.
(Por lo menos mientras se encuentra un sustituto digno...)
Opinar