El concepto de Hashing Algorithm

¿Cómo funcionan los  distintos Hashing Algorithm? .Para responder a esta pregunta hay que hacerse otra. ¿Qué es un algoritmo de hashing y para que sirven?.  Simplificando mucho , un algoritmo de hash es un algoritmo que ante un texto de entrada de tamaño cualesquiera genera otra cadena resultado con una longitud fija a la que se denomina hash.

hash algorithm

Esta es la definición muy sencilla. Ahora bien los algoritmos de hashing  suelen cumplir con algunas otras características.

Hashing Algorithm One Way

Una de las características más habituales es que son “one-way” , es decir solo tienen una dirección, a partir del texto inicial se usa una función para generar el hash , pero no hay forma de a partir del hash generar el texto inicial.  No existe función inversa.

hash algorithm inversa

 

Hashing Algorithm y la dispersion

Otra de las características que suelen cumplir los algoritmos de hash es que ante una pequeña variación del texto inicial el hash que se genera es completamente diferente. Es lo que se conoce como dispersión.

hashalgorithmdispersion

Hashing y Cryptografía

Todas estas características les hacen ideales para la gestión del almacenamiento de  contraseñas.  Si nosotros tenemos un sistema en el que los usuarios  se logean , deberemos de almacenar sus claves de alguna forma . El problema es evidente , si alguien hackea el sistema podrá acceder a las claves de todos nuestros usuarios ya que simplemente están almacenadas de forma transparente en la base de datos.

hash algorithm claves

Para solventar este problema nos apoyamos en los algoritmos de hash . En vez de almacenar la contraseña almacenaremos el hash . Recordemos que ante un mismo texto origen siempre se genera el mismo hash de resultado.

hashalgorithmok

Esto suele dejar muy tranquila a la gente ya que las contraseñas no se almacenan y no existe una función inversa que nos permite obtener la contraseña. ¿Estamos a salvo? .. parece que sí. La realidad es mucho más dura. Se pueden utilizar diccionarios de palabras para generar hash.

hashalgorithmdiccionario

 

De tal forma que si alguien ha accedido a la lista de hash ,puede usar el diccionario con las claves más comunes para generar el hash de la clave 123456 .Si este coincide con el hash almacenado para algún usuario el hacker habrá obtenido acceso a la clave del usuario. Es cierto que realizar un ataque con un diccionario lleva tiempo ya que hay que ir generando los hash. Sin embargo existen otras opciones como tener una base de datos de claves con sus hash ya generados. Con lo cual la búsqueda es mucho más inmediata.

hashalgorithmtabla

Así pues no estamos tan protegidos como pensamos. ¿Cómo podemos paliar esta situación ?

Hashing Algorithm y Salt

Para solventar este problema debemos modificar la forma en la que convertimos la clave en un hash. Para ello  añadiremos en el proceso lo que se denomina un SALT. Un SALT es información adicional que se agrega a la clave antes de generar el hash. De esta forma aunque nuestro sistema haya sido atacado y el hacker acceda a todos los hash que tenemos almacenados , no podrá acceder a las claves sino conoce la función de SALT que hemos utilizado.

hashalgorithmsalt

En el siguiente artículo abordaremos como implementar esta funcionalidad usando las APIS de Java.

Otros artículos relacionados : JAAS , Spring Security

About Cecilio Álvarez Caules

Cecilio Álvarez Caules Sun Certified Enterprise Architech (J2EE/JEE).

2 Responses to El concepto de Hashing Algorithm

  1. Betanzos 12 diciembre, 2016 at 18:14 #

    Buen artículo Cecilio, el tema de la seguridad es muy importante y a veces no lo asumimos de este modo. Otra técnica muy común es utilizar una algoritmo HASH lento junto con el SALT, ya que disminuye la cantidad de intentos por segundo que se pueden realizar en ataque por fuerza bruta.

    Saludos

    • Cecilio Álvarez Caules 12 diciembre, 2016 at 19:12 #

      gracias 🙂

Deja un comentario