Funciones Resumen o Hash

1. Que son y como funcionan



Una función Hash toma como entrada un mensaje de cualquier tamaño y, aplicando una serie de operaciones ariteméticas y lógicas consigue otro mensaje, siempre de igual tamaño y por lo general muy reducido, 128 o 160 bits por ejemplo. Para que la función hash sea buena, una mínimo cambio en el mensaje de entrada, debe producir un notable cambio en el de salida y, por supuesto, debe ser imposible conocer el mensaje original a partir del mensaje resumen.

Esto nos puede servir si por ejemplo enviamos un correo electrónico y queremos estar seguros de que nadie modifica su contenido. Si cuando hemos escrito el correo, le aplicamos una función hash, producirá un resumen que adjuntaremos con el correo. Cuando éste sea recibido por los destinatarios, volverán a aplicar la misma función hash al correo y comprobarán si coincide con el resumen adjuntado por nosotros. Si coinciden, el mensaje no ha sido modificado en absoluto. Si no lo hacen, es porque el correo que les ha llegado no es exactamente igual al que nosotros hemos mandado. Sea cual sea el cambio (un carácter, unas palabras, la omisión/adición de un texto) el resumen producido variará enormemente del que había producido el original. Y igual que lo aplicamos a un correo lo podemos aplicar a cualquier tipo de documento.

Por otra parte, se puede pensar que si cualquier mensaje se resume en unos ridículos 128 bits, como algunas funciones lo consiguen, es muy grande la posibilidad de que dos mensajes distintos produzcan el mismo mensaje. Con 128 bits (16 bytes, 16 caracteres) se consiguen 2^128 mensajes distintos: 3.40e+38,  38 dígitos, no es poco. Pero 16 caracteres para un mensaje si es poco, estos suelen ser bastante más grandes, imaginemos uno de 200 bytes, 1600 bits. Se pueden escribir 4.44e481 mensajes distintos. 481 dígitos. Estadísticamente, el número de mensajes que obtienen el mismo resumen tambiénm es enorme. Sin embargo, pensemos que pocos mesajes de los tantos posibles escritos con 200 bytes, tendrían sentido. En principio porque en un mensaje no suelen aparecer todos los caracteres posibles con 1 byte, 256, ni cualquier combinación de éstos tiene sentido para una persona si se trata de un texto o para el computador si el mensaje original era un objeto tratado por éste. Las posibilidades se reducen de tal forma, que la probabilidad de que dos mensajes con sentido obtengan un mismo hash se vuelve prácticamente nula. De hecho, es principalmente esta improbabilidad lo que da calidad a la función resumen.

El otro objetivo que debe cumplir una buena función hash es la imposibilidad de obtener el mensaje original a partir del resumen. Habrán veces que el resumen no se envíe con el original para comprobar si ha variado su contenido, sino que se enviará solo para cumplir otras funciones. Por ejemplo, imaginemos el acceso a un servidor por web. Para que el acceso sea seguro decidimos encriptar el password que el usuario escribe para entrar. Un buen método consiste en que el servidor envíe un dato aleatorio, al cliente (al proceso que pide la password al usuario), y a este dato junto a la contraseña escrita por el usuario se les aplica un resumen que se enviará al servidor. Puesto que éste conoce tanto el password correcto como el dato aleatorio previamente enviado, comprobará el hash de ambos con el que le llega desde el cliente. Si coinciden, el usuario escribió correctamente la password. El dato aleatorio tiene su importancia ya que sinó el método para acceder al servidor sería proporcionarle el hash de una password válida. Si cada vez se usa un dato diferente, el resumen conseguido nunca será igual, haciendo imposible que alguien que lo haya leido consiga posteriormente acceder al servidor con ese resumen.



2. Ejemplos de funciones HASH

De entre las funciones hash más conocidas se encuentran la MD5 o Message Diggest nº5, consiguiendo un resumen de tan solo 128 bits y, el SHA1 y SHA2 Standard Hash Algorithm nº 1 y 2 que generan un resumen de 160 bits.

Veamos a continuación un ejemplo de como funcionan el MD5 y el SHA1. Lo que escribamos en la área de texto será "resumido" en los respectivos cuadors inferiores. Proponemos hacer varias pruebas, cambiando en cada una un caracter respecto a la anterior y se observará así el cambio producido en el resultado.


Escriba algo aqui:
Resumen MD5:
Resumen SHA1:


Agradecimientos.

Los scripts de las funciones hash MD5 y SHA1 han sido tomados de la página http://pajhome.org.uk/crypt/md5


<< Volver al índice
Certificados >>