Estas aquiContenido / Picadillo digital

Picadillo digital


Poradmin- Publicado el28 Enero 2005

Por Manuel Lucena

Hace unos meses saltó la liebre. El rumor se propagó rápidamente por foros y listas de correo. SHA-1, junto con otras funciones "hash" criptográficas había sido roto, al menos parcialmente. Como muchos de ustedes sabrán, las funciones "hash" forman el corazón de la práctica totalidad de los esquemas de firma digital usados por el gran público. La gran pregunta estaba servida, ¿en qué medida afectará este descubrimiento a los usuarios de a pie? A la vista de la escasa repercusión posterior del asunto, parece que poco. Sin embargo, parece sensato analizar la cuestión con algo de rigor, e ir considerando posibles sustitutos para un futuro quizás no muy lejano...

Las funciones "hash" (la palabra "hash" viene a significar en inglés algo así como "picadillo", así que permítanme llamarlas a partir de ahora "funciones resumen") permiten obtener, a partir de un mensaje cualquiera, una secuencia de bits de longitud fija (habitualmente entre 128 y 256), que hace el papel de "huella digital" (o signatura) del mensaje, en el sentido de que, dado el valor de la función resumen de un mensaje, resulta muy difícil encontrar otro mensaje distinto que dé lugar al mismo valor que el primero. Estas funciones, combinadas con algoritmos de cifrado asimétricos, permiten firmar digitalmente cualquier trozo de información.

Puesto que el conjunto de posibles mensajes de longitud arbitraria es infinito, el conjunto de posibles secuencias de bits de una longitud determinada es finito, y la función resumen siempre asocia una signatura a cualquier mensaje, deberá existir al menos un valor de signatura que corresponda a infinitos posibles mensajes, aunque, en general, todos los posibles valores de la signatura tendrán esta propiedad. Si llamamos colisión a una pareja de mensajes que dan lugar a la misma signatura, podemos deducir que todas las funciones resumen tienen (infinitas) colisiones, por definición.

Lo que es realmente malo no es que las colisiones se den o no, sino que sea fácil encontrarlas. No obstante, existen diferentes grados de compromiso de una función resumen, en función del tipo de colisiones que se encuentren. Los comentaremos de menor a mayor gravedad:

  • Alguien encuentra dos mensajes que tienen la misma signatura, pero no tiene un método sistemático para encontrar más. Esta situación es difícilmente explotable, a no ser que el mensaje que queremos falsificar sea exactamente uno de los que tienen la colisión.
  • Mediante un algoritmo, se pueden generar dos mensajes tales que sus signaturas coincidan, si bien se desconoce a priori qué valor van a tener. Usualmente, los mensajes obtenidos carecerán de sentido, por lo que el compromiso, aun siendo mportante, no será demasiado grave.
  • Dado un mensaje, se puede calcular otro con la misma signatura. Esta situación es bastante más delicada, ya que podremos sustituir un mensaje determinado por otro que, aunque no tenga sentido, pase por auténtico. Esto podría usarse para, por ejemplo, intoxicar las redes p2p que usen funciones resumen para validar los archivos que se descargan, sustituyendo los mismos por basura. También podría servir para negar la autoría sobre una firma digital, alegando que lo que realmente se firmó fue el mensaje falso.
  • Dado un mensaje, se puede calcular otro con la misma signatura, y con una estructura determinada. El término estructura hace aquí alusión a la posibilidad de forzar que el mensaje falso tenga algún sentido, cosa que podríamos lograr buscando a partir de manipulaciones del original que no alteren su significado. Pensemos, por ejemplo, en un archivo html en el que añadimos o quitamos espacios, tabuladores o retornos de carro superfluos.

Una vez disipados los rumores y el revuelo inicial, parece que la verdadera noticia era, en realidad, un ataque del segundo tipo sobre los algoritmos SHA-0, MD4, MD5, HAVAL-128 y RIPEMD, y que SHA-1 permanece a salvo por ahora. Para los que no lo sepan, la NSA (Agencia Nacional de Seguridad de los EE.UU.) desarrolló inicialmente el algoritmo SHA, y al poco tiempo le introdujo una modificación para protegerlo de un posible ataque sobre el que no se dieron detalles, dando lugar así a SHA-1 (y pasando el algoritmo original a llamarse SHA-0). Teniendo en cuenta que SHA-0 data de 1993, y SHA-1 de 1995, no parece tan descabellado pensar que todavía quedan aspectos en los que los criptólogos militares llevan diez años de adelanto a los criptólogos civiles.

Manuel Lucena

Etiquetas

Comentarios

Selecciona arriba tu forma preferida de visualizar los comentarios y pulsa el botón para guardar tu elección para próximas visitas (sólo si eres usuario registrado).
mhedgal's picture

aunque mis conocimientos en el tema de las firmas digitales no es demasiado amplia, creo que es bastante improbabel que un particular o un grupo formado por particulares, consiga quebrar SHA-1. El equipo y los costes del proceso son totalmente inasequibles para un usuario particular, con lo cual, cuando SHA-1 se pueda romper por un usuario civil, los criptólogos militares haran avanzado, habiendo creado un "SHA-2" o algun otro mecanismo, por lo tanto, me sigo fiando de la seguridad de este algoritmo.

Dem's picture

Las interceptaciones civiles no son las únicas que deben preocuparte ;)

Dr Juzam's picture

Existe un parche ya que no una solución que me parece que ya usan ciertas redes P2P como la de Emule. Se trata de usar varios Hash para un mismo archivo (digamos, por ejemplo, SHA-1 y Haval 128). Si un archivo va doblemente identificado sí que resulta realmente difícil colar un archivo falso (a ver quien es el que diseña un algoritmo que dado un archivo con dos Hash diferentes crea otro con esos mismos hashes).

__
Me interesa el futuro porque es el sitio donde voy a pasar el resto de mi vida.
- Woody Allen

Me interesa el futuro porque es el sitio donde voy a pasar el resto de mi vida.
- Woody Allen

Envite's picture

Una de las reglas de la criptografía es "nunca cifres lo mismo dos veces con distintas claves", aunque no sé si aquí es aplicable...

No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a decirlo.
- Voltaire -

No estoy de acuerdo con lo que dices, pero defendería con mi vida tu derecho a decirlo.
- Voltaire -

Enriquez's picture

Este es uno de los errores mas comunes cuando se habla de funciones resumen. Creo que Manuel Lucena lo explica bien claro. Un hash no es un algoritmo de cifrado, ni siquiera hay claves.

Enriquez's picture

Una pequeña aportación.

En ocasiones las funciones resumen se usan para aumentar artificialmente las longitudes de claves simétricas de los usuarios, por ejemplo, si un usuario a creado una clave de 4 caracteres "pepe", y tiene que utilizarse para autenticación ante un servidor o programa, se sustituye por su hash: 265392DC2782778664CC9D56C8E3CD9956661BB0 (SHA 160 bits). Esto evita un ataque por fuerza bruta que sería muy sencillo para la clave "pepe". El servidor o programa destino genera a su vez el hash SHA de "pepe" y lo compara con el hash mandado por el usuario. Si son iguales, quiere decir que ambos han generado los hash a partir del mismo original, la clave, y da por buena la autenticación.

Vamos a ver como podríamos encontrar claves a partir de hash:
Nos podemos crear una pequeña rutina que genere hash (SHA o MD5 por ejemplo) de claves que vamos generando por orden alfabético (por ejemplo) y que guarde en bbdd las parejas Hash-Clave. Transcurrido un tiempo tendremos una bbdd con los hash de todas las claves de longitud 6, 7, 8, 9,... etc dependiendo de nuestra paciencia. Si ordenamos esta tabla por hash y la guardamos en 1,2, etc DVD's podremos consultar a que original pertenece un hash en cuestión de segundos siempre que queramos.

Pero claro, podríamos usar los hash generados anteriormente para hacer el ataque por fuerza bruta, por lo que no habríamos aumentado mucho la seguridad, ya que habría el mismo numero de hash que de claves con longitud 4. Sin embargo se puede aumentar la clave mediante un valor conocido por ambos, por ejemplo, a "pepe" le podemos agregar el valor de la ID de sesión, la fecha, el login, el propio hash de "pepe", etc, para aumentar la longitud de la clave a "pepe28/1/2005" con hash 09BA88ADFC9D56679A6A2FBAB8867047979EB42E (SHA 160 bits), evitando así la identificación del original por el método anterior (13 caracteres ya serían muchos DVD,s).

mhedgal's picture

La verdad, es que son las unicas que de verdad me preocupan.

anónimo's picture

Saludos

Necesito saber si alguien conoce el algoritmo que usa SHA1 para generar las firmas (huellas) digitales de algun documento.

anónimo's picture

http://en.wikipedia.org/wiki/SHA_hash_functions

Tiempo invertido en la búsqueda: 5 segundos.

anónimo's picture

Saludos nuevamente
Me disculpo por no hacerme entender, en realidad quiero saber si alguien conoce algúna función (código de programa) en ASP con la cual le pueda enviar la data a firmar, la llave privada y signature y me genere una firma (huella) digital para un documento.

Se les agradece su apoyo.

Patrocinadores

Cómo patrocinar

Kriptópolis alojado en:
Zilos-Veloxia Network 

Tu mejor defensa:
Bufet Almeida

Test de Intrusión Online:
Security Guardian