Hablemos de: hash y seguridad
El otro día estabamos hablando del pwned que le hicieron a la web de Hello Kitty. En este ataque lo que hicieron fué tomar control de la web en cuestión y volcar la base de datos. Por suerte, no todas las contraseñas estaban en texto plano sino que lo que se veía era el hash.
Ahora, si no controláis del tema os estaréis preguntando: ¿De qué cojones me está hablando este hombre? Y para los que controléis del tema pues espero haber aportado algo por ínfimo que sea a vuestro bagaje de conocimientos.
¿Qué es el hash?
Solemos denominar hash al resultado que nos devuelve una función hash. ¿Qué tiene de especial esta función que la diferencia de los típicos polinomios (ej: x + 3 ) o funciones trigonométricas (ej: cos( x ) )? Os podría soltar todo el rollo algebraíco o os lo puedo resumir rapidamente, mejor la segunda opción. Sencillamente, a una función hash le introduces una cadena de carácteres ( ¡Ojo! Puedes introducirle cualquier otro elemento algebraíco. ) la función hace su trabajito y te devuelve un pupurri de números y letras a primera vista sin sentido. Hay que tener en cuenta que la función es unidireccional, lo que nos lleva al hecho que teniendo sólo la salida, no podremos sacarnos la entrada.
![]()
Mmm… vale, pero ¿para qué sirve?
Las funciones hash tienen numerosas aplicaciones gracias a sus propiedades. Una de ellas es que, independientemente de la longitud de carácteres de entrada, la longitud de la salida será siempre la misma, esta propiedad es muy útil a la hora de comprimir información.
Pero desde luego, el campo en el que más se utilizan los hash es en la seguridad informática. Dentro de la seguridad infórmatica nos podemos encontrar diversos casos en las que se utilizan las funciones hash.
Firmas digitales
Si sois asiduos en el blog, esto os sonará del desastre de Lenovo y Dell. Las firmas digitales sirven para ver la entidad que originó ese archivo o mensaje y así poder saber si el paquete fue modificado. Estas firmas suelen firmar el resultado de la función hash en lugar de todo el contenido, aumentando así la velocidad de firmado y siendo más útil para ciertos algoritmos.
Checksum
Cuando envías o descargas algún archivo vía Internet es posible que ocurran fallos y pérdida de datos a la hora de transmitir o guardar los archivos, para ello se acompaña el archivo junto a un hash para verificar la integridad de los datos. Aunque no es sólo a la hora de intercambiar archivos en internet, cualquier conexión internet (también en red local, obviamente) utiliza el checksum con cada pequeño paquete del protocolo tcp/ip para comprobar que el paquete no fue modificado. En este caso la función hash utilizada tendrá unas propiedades específicas que fortalecen la seguridad, estas funciones son las utilizadas en todos los ámbitos de criptografía.

Hash criptográfico
La criptografía tiene muchos ambitos, pero en seguridad infórmatica, encontramos dos bloques principales.
Código de detección de modificaciones: Como bien indica su nombre, en este ambito el interés es crear un hash inquebrantable para verificar si el mensaje fue modificado o no.
Código de autenticación de mensajes: La verdad no sé que hago explicando esto si sus nombres lo indican todo…. Aquí el quid de la cuestión es verificar la autenticidad del origen del mensaje, además de mantenerlo íntegro y ocultar la fuente y llegada del mensaje.
La propiedades de las funciones hash utilizadas en criptografía son distintas dependiendo de lo que quieras proteger, pero generalmente suelen ser deterministas (dada una cadena de entrada siempre obtendremos la misma salida), que ocurra el efecto avalancha (que al cambiar un carácter de entrada te cambie casi todos los valores alfanuméricos de la salida), y obviamente, que sean de bajo coste computacional.
Como en el post nos interesa revisar las funciones hash criptográficas, dejaremos de lado las demás aplicaciones de los hash (que son prácticamente infinitas) y pasaremos a ver los algoritmos mas conocidos que utilizan las funciones hash criptográficas.
MD5
Un precioso día del 1991 en el MIT un tal Ronald Rivest (autor de MDE2, MD4 , MD5 , MD6) estaba publicando la quinta revisión del algoritmo de resumen del mensaje. El MD5 es una de las funcines hash criptográficas más utilizadas en los ambitos mencionados. En 2012 su autor declaró el cesamiento de apoyo al algoritmo, y entonces dejó de ser seguro (hay muuuuchos encriptadores y desencriptadores de hash md5 por la web) pero aún así mucha tecnología sigue utilizando este algoritmo (a pesar de que hayan revisiones más nuevas como md6 o alternativas como SHA. Es cuestión de que la persona/empresa que utilizza dicho algoritmo, decicda cambiar o no.
SHA
SHA es otro algoritmo de función hash basado en MD4 y MD5 (al menos sus primeras revisiones, la última versión SHA-3 publicada en 2012 difiere bastante de sus predecesoras). El algoritmo fue creado en 1993 y sus siglas corresponden a Secure Hash Algoritmo (Algoritmo hash seguro), aunque a pesar de su significado en 1998 se encontró una vulnerabilidad y después de parchearla en 2004 se encontró otra.
Hoy en día la mayoría de productos (menos gigantes como pueden ser facebook o google) utilizan estos dos algoritmos para la encriptación, los cuales estan ya anticuados y petados. ¿No os ánima eso a crear vuestro propio algoritmo de encriptación y distribuirlo por la red? Almenos a mi sí. 😛
Y esto es todo por esta entrada Hablemos de. Espero que no haya sido demasiado pesado y ya que estamos os deseo una feliz navidad a todos. Espero que hayais disfrutado de un descanso merecido, de las fiestas, la felicidad junto la familia, y ese ritual consumista de regalarse regalos.