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.

  1. Exploiting MD5 collisions [CodeProject]
  2. Explotando las colisiones de MD5 [La Naturaleza del Software]
  3. La Naturaleza del Software

Comentarios

Selecciona arriba tu forma preferida de visualizar
los comentarios y pulsa el botón para guardar tus
preferencias. Éstas sólo se recordarán para tus
próximas visitas si eres usuario registrado.

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

Los comentarios publicados en este sitio expresan sólo la opinión de su autor, quien será el único responsable de los mismos. La publicación de cualquier comentario no supone en absoluto la conformidad del responsable de este sitio con su contenido.

Como norma general, en este sitio no se publican comentarios que incluyan datos personales, ni direcciones de correo, ni ninguna otra forma de establecer contactos privados o comerciales, así como comentarios que no aportan nada, fuera de tema o que no se ajustan a la netiqueta, la ortografía o la educación.

Para poder enviar tus comentarios has de permitir las cookies del sitio.

Por favor, escribe arriba el resultado de la operación planteada. Gracias.
  • Etiquetas HTML permitidas: <a> <em> <strong> <ul> <ol> <li> <p> <u> <br><strike> <blockquote> <div>

Más información sobre las opciones de formato...