Hash: qué son y cómo funcionan

10 Abr 2014

Una función hash criptográfica, muchas veces se llamada simplemente hash, es un algoritmo matemático que transforma un bloque de datos en una línea de caracteres de una longitud fija. No importa cuántos datos se insertan, se tendrá siempre como resultado un hash de la misma longitud.

Funciones hash

Según un generador de hash SHA1 que he encontrado en la Red (SHA-1 es una de las funciones hash más utilizadas, junto a MD5 Y SHA-2), el hash para mi nombre, Brian, sería: 75c450c3f963befb912ee79f0b63e563652780f0. Me pasa muy a menudo que se equivoquen en escribir mi nombre y lo cambian a Brain que, como sabéis muy bien, en inglés significa “cerebro”. De hecho, en mi carné de conducir me llamo “Brain Donohue”, pero es otra historia. El hash SHA-1 para “brain”, según mi generador online de SHA-1, es 8b9248a4e0b64bbccf82e7723a3734279bf9bbc4.

Se nota a primera vista que se trata de dos resultados totalmente diferentes, aunque en realidad solo se hayan intercambiado las vocales. Vamos a hacer otra prueba: si pongo mi nombre sin la mayúscula, el generador SHA-1 me da otro resultado diferente, o sea 760e7dab2836853c63805033e514668301fa9c47.

Todos los hash son de 40 caracteres, y sorprende obtener un resultado de este tipo para una palabra de 5 letras como Brian, Brain o lo que sea. Pero las sorpresas no acaban aquí: si insertamos el texto entero de este artículo, vamos a obtener este hash: db8471259c92193d6072c51ce61dacfdda0ac3d7. O sea 6.162caracteres (espacios incluidos) condensados en una línea de 40 caracteres, la misma longitud que hemos obtenido con mi nombre de 5 letras. Podríamos subir todas las obras de William Shakespeare y siempre obtendríamos como resultado los 40 caracteres. Además, nunca  vamos a tener 2 hash iguales.

Aquí va una imagen de Wikimedia Commons que lo explica todo; a veces, las imágenes son más eficaces:

HASH

¿Para qué sirven los hash?

Buena pregunta. Es que las funciones hash criptográficas sirven para muchas cosas.

Las funciones hash criptográficas se utilizan en muchas ocasiones, desde el almacenamiento de contraseñas a la detección de softwares maliciosos, pasando por la protección de archivos.

Para mí y para vosotros que leéis este blog, los hash tienen que ver sobre todo con contraseñas. Por ejemplo, si habéis olvidado la clave para acceder a  un servicio online, muy probablemente tenéis que restablecer la contraseña. En situaciones de este tipo, normalmente no recibís un mail con la contraseña directamente; eso pasa porque el servicio online que estáis utilizando no guarda las claves en formato de texto simple, sino protegidas por un hash. De hecho, ellos no tienen la menor idea de cuál sea vuestra clave (a menos que no estéis utilizando una contraseña extremadamente sencilla que en consecuencia tiene un hash bastante reconocible).

Por cierto, si para restablecer la contraseña os llega un mail con la clave en texto simple, significa que el servicio online no utiliza hash y es algo muy lamentable.

Podéis hacer una prueba con un generador inverso de hash online. Si creáis un hash para una contraseña débil (como la palabra “contraseña” o “123456”) y luego lo insertáis en un generador inverso de hash online, es posible que el generador reconozca el hash y revele la contraseña. En mi caso, el generador inverso ha reconocido los hash de ‘brain’ y ‘Brian’ pero no el que he creado para el texto de este artículo. Así que la integridad de los hash depende enteramente de los datos que se insertan, que pueden ser de cualquier tipo.

Según un informe de la revista TechCrunch del mes pasado, el popular servicio de almacenamiento de datos en la nube, Dropbox, bloqueó uno de sus usuarios porque compartía contenido protegido por el Digital Millennium Copyright Act, la ley estadounidense sobre los derechos de autor. Este usuario luego escribió en Twitter que le habían bloqueado por haber compartido algunos contenidos; poco a poco se empezó a hablar de la noticia en la red social y mucha gente se quejó indignada de que Dropbox había tenido acceso a las cuentas de los usuarios aunque se declara contrario en la política de privacidad.

Dropbox, claramente, no accedió a los contenidos del usuario. Como se lee en el artículo de TechCrunch, probablemente lo que ha pasado es esto: los que tenían los derechos de autor del archivo (probablemente la versión digital de una canción o de una película) crearon una función hash para el archivo. Luego agregaron el hash de 40 caracteres en una especie de “lista negra” de los materiales protegidos por derechos de autor. Cuando el usuario intentó compartir el archivo protegido por los derechos de autor, los sistemas de análisis de Dropbox detectaron automáticamente que el hash estaba incluido en este listado y bloqueó el intento de compartir el contenido.

Pues, se pueden crear hash para contraseñas y archivos multimedia, ¿pero para qué sirven las funciones hash criptográficas? Como hemos dicho, las funciones hash sirven para muchas más cosas de las que sepa o entienda yo. De todas formas, hay sobre todo un uso de los hash que nos interesa: las empresas de productos antivirus como Kaspersky Lab, utilizan las funciones hash criptográficas para detectar los programas maliciosos.

Así como las casas discográficas y cinematográficas crean listas negras de hash para proteger sus datos, también existen listas de hash de malware, y muchas de ellas son públicas. Las listas de hash de malware, o firmas de malware, se componen de los valores hash de las piezas de malware o de algunas partes pequeñas y reconocibles. Por un lado, si un usuario detecta una archivo sospechoso,  puede insertar el hash correspondiente en las bases de datos públicas de hash de malware, y el usuario sabrá si se trata o no de un archivo malicioso. Por el otro, los productos antivirus detectan y al final bloquean un malware comparando los hash con sus propias bases de datos y con las públicas.

Las funciones hash criptográficas se utilizan también para la llamada “integridad de los mensajes”. En pocas palabras, para estar seguros  de que algunas comunicaciones o archivos no hayan sido manipulados de alguna forma, se pueden examinar los hash creados antes y después de la transmisión de los datos. Si los dos hash son idénticos, significa que no ha habido ninguna manipulación.