Está en la página 1de 5

Algoritmos de HASH LordHASH Artculo creado para postear en http://gaussianos.

com En primer lugar, trataremos de abordar de forma sencilla este concepto para aquellos que no lo conozcan. Este es sencillo, pues un HASH no es ms que un nmero resumen. De hecho, en muchos sitios web podeis encontrar expresiones como "checksum MD5", lo que literalmete se traduce por "suma de comprobacin". As, el concepto no es complicado, pero si implementacin. Pongamos un ejemplo: supongamos que tenemos, por ejemplo, un fichero cualquiera. Pues bien, si consideramos dicho fichero como un flujo de bits y le aplicamos un algoritmo de HASH lo que obtenemos es otro conjunto de bits (de longitud fija y que depende del nmero de bits de salida del algoritmo o funcin que utilicemos) que depende bit a bit del contenido del flujo original de bits que sirvi como entrada al algoritmo. Adems, cumplen las siguientes propiedades: Todos los HASHes generados con una funcin de hash tienen el mismo tamao, sea cual sea el mensaje utilizado como entrada. Dado un mensaje, es fcil y rpido mediante un ordenador calcular su HASH. Es imposible reconstruir el mensaje original a partir de su HASH. Es imposible generar un mensaje con un HASH determinado. Es decir, un algoritmo de HASH no es un algoritmo de encriptacin, aunque s se utliza en esquemas de cifrado, como algoritmos de cifrado asimtrico (p.e: RSA). Ahora bien, tener una funcin de estas caractersticas puede tener muchas aplicaciones. Algunas de ellas pueden ser las siguientes:

Comprobacin de integridad de ficheros: Supongamos que queremos transmitir un fichero a un amigo. Si antes de realizar este envo calculamos la funcin HASH del fichero, para nuestro amigo del otro extremo es posible verificar la integridad del fichero aplicando el mismo algoritmo al archivo que recibe. Si ambos coinciden, podemos asegurar que el envio ha sido satisfactorio. Esta es una aplicacin real que se utiliza, por ejemplo, para comprobar la integridad de muchos paquetes que se descargan en distribuciones del SO GNU/Linux. Seguridad en procesos de identificacin en sistemas: Los procesos de identficacin (Login+Password) se ven reforzados por estos algorimos. Se utlizan de la siguiente forma: cuando un usuario accede a su computadora debe introducir su nombre de usuario y su password. Pues bien, si el sistema operativo no registra estos datos como texto claro si no que registra el resultado de aplicarles una funcin HASH, en el caso de que un usuario malicioso logre acceder a nuestro archivo de registros, no conseguir (a menos que el algoritmo utilizado sea malo o disponga de una supercomputadora) revertir el contenido de dicho registro, y por tanto no puede acceder a nuestro sistema. Esta misma idea se aplica en identificacin de usuarios en muchas webs, con la diferencia de que para que este esquema sea seguro debe incluir informacin adiccional y aleatoria, como marcas de tiempo y redundancias. Firma digital: Estos algoritmos se utlizan en esquemas de firma digital para verificar la integridad de la informacin enviada por el canal de comunicaciones. Algoritmos de cifrado asimtrico, como RSA por ejemplo, realizan lo siguiente: Calculan la funcin HASH del contenido del mensaje que se va a enviar y luego se firma dicho checksum

con la clave privada del emisor. As se asegura la integridad de la informacin y el no repudio. Algunos de los algoritmos de HASH ms utilizados son los siguientes: MD5 (Message-Digest Algorithm 5 o Algoritmo de Firma de Mensajes 5): Desarrollado por Ron Rivest, y ha sido hasta los ltimos ao el algoritmo hash ms usado. Procesa mensajes de una longitud arbitraria en bloques de 512 bits generando un compendio de 128 bits. Debido a la capacidad de procesamiento actual esos 128 bits son insuficientes, adems de queuna serie de ataques criptoanalticos han puesto de manifiesto algunas vulnerabilidades del algoritmo. Puede ser til para comprobar la integridad de un fichero tras una descarga, por ejemplo, pero ya no es aceptable desde el punto de vista criptoanaltico.

SHA-1 (Secure Hash Algorithm 1 o Algorimo de Hash Seguro 1): El SHA-1 tomo como entrada un mensaje de longitud mxima 264 bits (ms de dos mil millones de Gigabytes) y produce como salida un resumen de 160 bits. Este nmero es mayor que el que se utilizaba en el algoritmo SHA original, 128 bits. Ya existen nuevas versiones de SHA que trabajan con resmenes de 224,256,384 e inclusio 512 bits.

En realidad, lo seguros o inseguros que estos algoritmos sean no depende de los conocimientos informticos o telemticos que uno tenga, si no en los sus conocimientos matemticos. Nuestra intencin es demostrar por dnde cojean los algoritmos de HASH, la dificultad computacional que presentan, y que soluciones se dan los posibles ataques que puedan sufrir por parte de individuos malintencionados.

ATACANDO LOS ALGORITMOS DE HASH: MD5 Y SHA-1 Desde el ao 2004, aproximadamente, cuando saltaron las primeras noticias escandalosas sobre la ruptura de MD5, la seguridad que ofrecen los algoritmos de HASH a nuestros esquemas de cifrado ha sido una cuestin que se ha puesto en entredicho. Qu seguridad ofrecen estos algoritmos? Resulta computacionalmente complejo rompe uno de estos algoritmos? Qu r solucion se debe adoptar? Intentaremos resolver estas cuestiones. Intentemos dar una descripcin algo ms matemtica de lo que es una funcin HASH. Supongamos que tenemos un mensaje a, al que aplicamos una funcin resumen a la que llamaremos h. Decimos entonces que el resultado de esta operacin, al que llamaremos b es el HASH de a. Es decir:

h
h(a)=b

Esta funcin debe ser sencilla de realizar para un computador, pero computacionalmente imposible realizar la operacin inversa, al menos para usuarios normales. Adems, esta funcin tiene otra caracterstica, el tamao de la entrada no es de longitud fija,

puede ser de longitud variable. Esto tiene la siguiente consecuencia, que no demostraremos matemticamente, pero que asumiremos por estar razonado en otros artculos publicados en Internet (al final se indican). Esta es la siguiente: es posible que dos mensajes de entrada a produzcan el mismo mensaje de salida b. Es decir, es posible encontrar un mensaje c, tal que: h(c)=b Sin embargo, encontrar ese mensaje debe ser, al igual que la particularidad antes mencionada, muy complejo desde el punto de vista computacional. Para los algoritmos de HASH esto es lo que se conoce como colision: que dos mensajes de entrada produzcan el mismo mensaje de salida. As, a priori, pudieramos establecer dos posibles vulnerabilidades de las funciones HASH:

Que sea posible realizar la operacin: h-1(b)=a Habitualmente, a la operacin de invertir la funcin HASH comprobando todas las posiblidades para los bits de salida se le llama ataque de fuerza bruta. Esto es lo que debe ser computacionalmente impracticable. Supondra aplicar la funcin HASH 2n veces hasta encontrar la coincidencia (n es el nmero de bits de salida de la funcin).

Que se hallen colisines: h(a)=b y h(c)=b, a!=c Lo que antes hemos denominado colisin.

Estas dos posibles debilidades dan lugar a cuatro tipos de ataques:

Ataque Tipo 1. El atacante es capaz de encontrar dos mensajes al azar que colisionan pero es incapaz de hacerlo de forma sistemtica. Si es capaz de dar slo con dos mensajes de que provocan colisin, esta no es razn suficiente para tildar el algoritmo de ineficiente. ndice de peligrosidad: * Ataque Tipo 2: El atacante es capaz de generar dos mensajes distintos de forma que sus HASH colisionen, pero sin saber a priori qu hash resultar. Es decir, el atacante no podria generar queriendo el HASH que necesite para fines maliciosos. ndice de peligrosidad: ** Ataque Tipo 3: El atacante es capaz de construir un mensaje sin sentido de forma que su HASH colisione con el de un mensaje con sentido. Si este es el caso, el agente malicioso puede atacar algoritmos de encriptacin asimtricos con firma digital, haciendo que se firmen mensajes sin sentido, y que el destinatario los acepte como fidedignos. ndice de peligrosidad: *** Ataque Tipo 4: El atacante es capaz de crear un segundo mensaje falso que tiene sentido y cuyo hash colisiona con el del mensaje verdadero. En este caso, el atacante puede actuar con total impunidad, pude falsificar certificados, firmar mensajes...el resutado sera desastroso. ndice de peligrosidad: ****.

El problema, entonces es el siguiente: cmo de difcil es encontrar una solucin? Qu ataques reales son practicables? Qu se gana incrementando el nmero de bits de salida del algoritmo?

En primer lugar, responderemos a la ltima pregunta. Si aumentamos el nmero de bits de salida del algorimo, el ataque de fuerza bruta ser ms impracticable y tambin lo ser encontrar los mensajes que colisionen, pues tericamente se cumple que para confiar en que podemos encontrar dos mensajes que colisionen no hay que realizar 2n operaciones, si no slo 2n/2. Realicemos algunos clculos para realizar ataques de fuerza bruta:

Para una clave de 12 dgitos, escrita con un teclado con 97 caracteres (base 97), habra que realizar (esto no tiene nada que ver con los algoritmos de HASH): 9712 = 693.842.360.995.438.000.29 5.041 comprobaciones. Para MD5, la salida es de 128 bits, sera necesario realizar: 2128=3,402823669 * 1038 operaciones. Supongamoslo impracticable

Es necesario realizar el clculo para SHA 1? Curiosos...

Trabajemos ahora con los ataques basados en bsqueda de colisiones:

Para MD5, la salida es de 128 bits, luego hay que operar sobre la mitad de bits, y sera necesario realizar: 264=18.446.744.073.709.551.616 operaciones. Para el algoritmo SHA 1, cuya salida es de 160 bits: 280=1.208.925.819.614.629.17 4.706.176 operaciones. Curiosidad: 1.000.000 de ordenadores capaces de procesar en 1 s cada operacin tardaran ms de 38.000 aos en las 280 operaciones.

Y...para los ms desconfiados e incluso paranoicos...qu hay de las supercomputadoras y de la gente que s dispone de los medios necesarios? Cuando saltaron las primeras alarmas sobre estos algoritmos, hace unos dos aos, las cifras eran las siguientes:

Para romper el SHA-0 completo se ha requerido un supercomputador de BULL de 256 procesadores durante unos 9 aos de proceso, pero al supercomputador que est instalando IBM en la UPC (Barcelona) slo le costara del orden de 1 ao. Otro grupo de investigadores, Wang, Feng, Lai, and Yu han reportado haberlo conseguido con una complejidad aproximadamente 2000 veces menor (240 en vez de 251). Esta reduccin equivaldra a una necesidad de clculo de algo menos de 1 da, si la relacin fuese lineal, pero los mismos investigadores han reportado necesitar slo 1 da con un IBM P690 en cluster, para romper el MD5, que tiene una complejidad equivalente.

Por tanto, lo habitual no es que nos ataque desde uno de estos grandes usuarios (tienen cosas ms interesantes que hacer, dira yo...) si no que nos ataque un cracker o similares (ACLARACIN: No incluyamos a los seores programadores en esto, los hackers. Gracias a Richard Stallman [Link sobre RichardStallman a htttp://maracay.velug.org.ve/docs/free_software.pdf])

Lo habitual es que este tipo de usuarios realicen ataques basados en diccionarios, como la aplicacin para u/Linux John the Ripper [link a http://www.openwall.com/john/] Este tipo de aplicaciones tiene una base de datos con claves comunes, que prueban sobre los sistmas a los que queremos acceder. (p.e Sistemas basados en UNIX donde se almacenan los resumentes HASH de el nombre de usuario y su clave para autenticar). Ante esto slo hay una solucin: EVITAR LAS PASSWORDS ABSURDAS. No sirve (marta tkm ni maria secreto) ok?? Concluyendo, dependiendo de su nivel de paranoia crptica y de la aplicacin que estn utilizando...escojan su algitmo de HASH, pero no acepten menos de SHA 1. Cuando un algoritmo empieza a presentar vulnerabilidades, no tarda mucho en ser aniquilado, as que a algunos de estos les queda poco tiempo de vida. Links: Uno - http://www.infosec.sdu.edu.cn/paper/md5-attack.pdf Dos - http://www.md5database.net/ Tres - http://www.eumed.net/cursecon/ecoinet/seguridad/resumenes.htm Incluir link a http://lordhash.blogspot.com

También podría gustarte