Categories
Seguridad

Qué son las funciones hash y su uso en contraseñas

Quizás no lo sepas pero si estás en internet hay muchos servicios que utilizas a diario que emplean funciones hash. Una función criptográfica hash es un algoritmo matemático que transforma cualquier bloque arbitrario de datos en una nueva serie de caracteres con una longitud fija. Es la forma de obtener una huella digital de cualquier texto.

Es una palabra inglesa que viene a significar algo así como picadillo, cortar algo en trozos pequeños. Hay muchos tipos de funciones hash y en este artículo vamos a hablar de varias de ellas. Hay un detalle fundamental cuando hablamos de las funciones hash. Cuando aplicas una función hash a un texto obtenemos un resultado de una longitud fija. No importa que pongas un texto corto como “hola” como que pegues el libro del Quijote entero, el resultado en longitud va a ser el mismo.

Además si tenemos un resultado de una función hash no podemos dar marcha atrás y aplicando una fórmula obtener el mensaje original. Es decir:

  1. Un hash de contraseña es unidireccional: puedes hashear un texto pero nunca puedes deshacer el hash.
  2. El procedimiento de hash es determinista: siempre obtendrás la misma salida si utilizas el mismo texto.

Obteniendo las funciones hash de un texto

Independientemente de la longitud de los datos de entrada, el valor hash de salida tendrá siempre la misma longitud. Depende eso sí de la función hash que utilizamos. Por ejemplo, en la Fig. 1 vemos el resultado de aplicar una función hash MD5 que es un algoritmo de reducción criptográfico de 128 bits ampliamente utilizado.

Figura 1. Resultado de aplicar la función hash MD5

Por tanto, si hasheo mi nombre obtendré en algoritmo MD5 el siguiente resultado:

95c728f5c27da5fc002d3bcdd25e1d97

Obtenemos un resultado de 32 caracteres de longitud. Lo curioso es que si cambiamos una letra, pongo la letra “o” en mayúscula el resultado es totalmente diferente pero la longitud es la misma. Este sería el resultado de hash MD5 de “avelinO”: ddd580c3e9fc60223d3c8b35b7612a93.

Qué ocurre cuando se filtran tus datos de correo electrónico

Es muy importante decir que cuando se filtran tus datos como la contraseña nunca va a ser tu contraseña tal cual la escribes y conoces tu. Lo que consiguen los delincuentes es el resultado hasheado de tu contraseña. Es decir, una huella digital de tu contraseña, nunca tu contraseña en texto plano.

Si utilizamos la página haveibeenpwnd y ponemos un correo vemos si se ha filtrado en alguna ocasión. Probando esta página y viendo por ejemplo la filtración que sufrió Dropbox observamos la siguiente información:

Como puede verse se filtró el correo electrónico y la contraseña. Pero como he comentado no es la contraseña tal cual sino que ha sido tras aplicarle una función hash y además salteada, es decir, la mitad de la contraseña es SHA1 (una función criptográfica) y la otra mitad bcrypt (otra función hash).

Lo que obtienen los delincuentes es la contraseña pero codificada de forma que no pueden usar esa contraseña para acceder a tu cuenta. Como norma de seguridad es muy importante que si tu cuenta se ha visto expuesta en línea cambies la contraseña.

Cambiar la contraseña es muy importante si se filtró tu información

Si tu cuenta y contraseña se ha visto expuesta en alguna brecha de seguridad es muy importante que cambies esa contraseña debido a que:

  • La contraseña original (la que tu sabes) nunca se almacena, por lo que se mantiene en secreto incluso desde el sitio web al que se la proporcionó.
  • Al ser determinista, cuando la contraseña se hashea en el registro, lo que hace la página web que tiene almacenada la huella digital es ver si coinciden el hash de la contraseña que tu escribes con el hash almacenado en la base de datos.

Si coinciden la página confirma que eres tu, o al menos sabes cual es la contraseña. Puedes ser tu o cualquier otra persona. El problema viene cuando estás utilizando contraseñas que pueden sufrir ataques de fuerza bruta o ataques de diccionario.

  • En los ataques de fuerza bruta se prueba a lo bestia con combinaciones de números, letras, caracteres especiales. Esto a lo mejor hoy en día puede no ser un riesgo alto si tienes una contraseña complicada, pero en un futuro sí que tienes que replantearte tu contraseña.
  • Los ataques de diccionario es que los delincuentes prueban con miles de palabras (y sus hashes) en diccionarios enormes (de incluso billones de palabras) en línea o en programas que ellos mismos crean.

Encriptar no es lo mismo que codificar

Es importante resaltar que encriptar no es lo mismo que codificar. A veces se confunden ambas palabras. Encriptar sería ocultar datos mediante una clave para que no puedan ser interpretados por los que no la tienen. Cuando envías un email o envías un whatsapp la información está encriptada.

Sin embargo, codificar es aplicar un proceso de conversión de los componentes de un mensaje para que este no sea entendido. Las funciones hash se codifican, se aplica una función matemática y obtenemos un resultado.

No uses contraseñas fáciles aunque haya funciones hash

Si tu contraseña es 123456 ya ha sido revelada en línea. Lo ha sido porque se sabe cual es la huella digital de esa contraseña y si la has usado o la estás utilizando es el momento de cambiarla. El hash de 123456 es: e10adc3949ba59abbe56e057f20f883e

Este hash se creó con el algoritmo de hash MD5 y tiene 32 caracteres. Cualquier contraseña utilizando hash MD5 siempre tiene 32 caracteres. Esto ayuda a demostrar la diferencia fundamental entre codificar (hash) y encriptar. Un hash es una representación de datos, mientras que encriptar son datos protegidos.

La encriptación se puede revertir si tienes la clave, por lo que se usa para todo, desde proteger los archivos en su dispositivo hasta el número de su tarjeta de crédito si lo guarda en un sitio web que usas hasta el contenido de esta página cuando se envía a través de Internet. En cada uno de estos casos, los datos que se protegen deben recuperarse en su formato original en algún momento en el futuro, de ahí la necesidad de encriptar.

Google sabe que estás utilizando una contraseña fácil

Esa es la diferencia fundamental con las contraseñas: nunca necesitas recuperar la contraseña que proporcionaste a un sitio web al registrarte, solo debes asegurarse de que coincida con la que proporcionaste al iniciar sesión, por lo tanto, que sea el mismo hash. Entonces, ¿por qué están mal algunos hashes y por qué los sitios web todavía te piden que cambies tu contraseña cuando se exponen los hash?.

El motivo es que si usas una contraseña poco segura se puede llegar a ella de muchas formas. Su hash ya se conoce, se sabe su resultado digerido.

Demostración de la vulnerabilidad de contraseñas poco seguras

Aquí hay una demostración sencilla. Busquemos en Google el hash de arriba que viene de la contraseña 123456:

Hay un montón de sitios web que coinciden con la contraseña original con la versión hash. Aquí es donde la naturaleza determinista de los hash se convierte en una debilidad en lugar de una fortaleza porque una vez que el hash y la versión de texto sin formato coinciden, puede saberse tu contraseña.

Si los delincuentes han obtenido una base de datos con contraseñas codificadas con una función hash, prueban ese resultado en una aplicación o en páginas web para descodificar esa contraseña. La página web https://md5online.es/ permite un descifrado MD5 gratuito por diccionario.

Obtenemos este resultado:

¿Como es posible que haya encontrado la contraseña?. Es debido a que esta página web tiene un diccionario de más de 1 billón de palabras. En ese billón de palabras estaba el hash que sometimos a prueba y su contraseña descifrada. Os animo a que empleéis vuestra propia contraseña para saber si está en ese diccionario en línea.

Agregando aleatoridad a la fórmula

Por tanto, podemos llegar a pensar que los hash de contraseña son demasiado predecibles, entonces, ¿qué hacemos? Agregar aleatoriedad, lo que nos lleva a la “sal”. Imagínese que si en lugar de simplemente aplicar el hash a la palabra “123456”, primero le agregamos otra docena de caracteres, caracteres totalmente aleatorios, y luego lo agregamos.

Por tanto se añade un punto de seguridad más añadiendo esta sal. Lo que significa su propia colección de caracteres totalmente aleatorios que se agrega a la contraseña y luego se procesa. Incluso con la misma contraseña, cuando se combina con una sal única, el hash resultante también será único.

Siempre que la misma sal utilizada en el registro se agregue a su contraseña al iniciar sesión (y sí, esto significa almacenar la sal junto con el hash en una base de datos en algún lugar), el proceso se puede repetir y el sitio web puede confirmar si la contraseña es correcta.

En el fondo lo que se hace es comparar la contraseña que has puesto con la huella digital resultante de aplicar una función hash. Se compara tras convertir esa contraseña a la misma función hash, si la que se ha calculado y la que está almacenada en la base de datos hacen un match, tienes acceso a tu cuenta.

Resumen

Las funciones criptográficas hash se emplean muchísimo hoy en día. Se obtienen al aplicar una fórmula matemática a un texto. Dando lugar a un resultado único y con una longitud fija. Cuando existe una filtración en línea jamás se va a filtrar tu contraseña. Se filtra una huella digital de tu contraseña. Esa huella se ha obtenido tras aplicar una función hash.

Cuando tu cuenta de correo y tu contraseña se ven expuestas en línea debes cambiar la contraseña. Se hace porque los delincuentes van a probar las huellas que han obtenido con diccionarios en línea. También pueden crear sus propios programas de descifrado. Si tienes una contraseña poco robusta se puede llegar a ella. Por tanto, si sigues usando la página que filtró tu contraseña, cambiala ahora mismo.

Hoy en día se utiliza “sal” para hacer más difícil la tarea de descifrar una contraseña. Son caracteres aleatorios que se añade a tu contraseña. Tras ese añadido se codifica el texto resultado y se obtiene una huella digital. Esa huella digital es la que se almacena en la base de datos. Si los delincuentes acceden a esa huella nunca llegarán a saber tu contraseña.

One reply on “Qué son las funciones hash y su uso en contraseñas”

Leave a Reply