¿Cuáles son los problemas resueltos por los algoritmos hash?

3 razones principales por las que se utilizan las funciones hash:

  1. Búsqueda rápida: el hash de algún valor en un número significa que un valor se puede asignar a una posición. Por lo tanto, en lugar de tener que buscar un valor en una lista grande, se puede encontrar de una vez. Este tipo de colecciones de datos se denomina hashmaps / hashtables / hashsets / dictionary / etc.
  2. Guardar / comparar contraseñas: utilizando un hash unidireccional (es decir, no se puede revertir) un servidor puede almacenar el valor hash en lugar de la contraseña. Luego, cuando un usuario inicia sesión nuevamente, su contraseña ingresada se convierte al valor hash que se envía al servidor para su comparación. Por lo tanto, la contraseña real nunca se envía a través de la red, el servidor nunca ve la contraseña, solo un valor derivado de dicha contraseña. Protege las credenciales del usuario de muchas formas de espionaje.
  3. Verificaciones de integridad de datos: cosas como el hash CRC significa que incluso si los datos son solo ligeramente diferentes, el hash varía mucho. Esto significa que verificar los datos enviados a través de alguna forma de comunicación contra un hash puede mostrar si ha habido algún daño. Casi todas las formas de redes dividen los datos en paquetes, cada uno con un hash para que el receptor pueda verificar si recibieron los datos según lo previsto, comparando el hash calculado de los datos recibidos con el hash recibido.

Entonces, los “problemas” resueltos por hashing:

  1. Encontrar algo en una lista grande sin buscarlo.
  2. Almacenar “contraseñas” y credenciales de inicio de sesión sin enviar o almacenar dicha contraseña / credencial directamente.
  3. Comprobar que los datos enviados no están dañados cuando se reciben.

Los algoritmos de hash son ampliamente utilizados en seguridad informática.

Básicamente, podemos decir que se utiliza una función hash para verificar si dos datos son iguales.

El ejemplo más simple es un inicio de sesión en el sitio web.

La mayoría de los sitios no almacenan contraseñas en texto sin formato (texto claro); en cambio, lo criptan con una función hash.

Si su contraseña es 123mycoolpassword , después de haber sido cifrada , podría convertirse en algo así como a4b5ccac06620d2b08d03448e3bcb171 (ejemplo MD5).

¡Tenga en cuenta que las funciones de hash son unidireccionales !

Esto significa que el proceso inverso (tomar la cadena hash, descifrarla y obtener la cadena original) no es posible.

Entonces, ¿para qué se usan?

Simple: para darle acceso si escribe correctamente su nombre de usuario y contraseña, sin siquiera saber su contraseña (magia, ¿no?)

Por ejemplo, cuando desea iniciar sesión en un sitio web, el sitio podría hacer esto (olvidemos el nombre de usuario y concéntrese en la parte de la contraseña):

  1. Tome la contraseña ingresada por el usuario;
  2. Hash it → obtener una cadena hash ;
  3. Compare la cadena hash con la almacenada en la base de datos.

Si coinciden, significa que escribió la contraseña correcta y puede iniciar sesión.

Este ejemplo solo se refiere a un inicio de sesión genérico del sitio web, pero puede reescribirse para cualquier cosa que necesite comparación.

De hecho, las funciones de hash se utilizan para garantizar una propiedad llamada integridad de datos .

Las principales aplicaciones son la distribución uniforme de datos binarios y la seguridad.

El primero típicamente se manifiesta como hash-maps. Las claves de entrada se codifican para distribuirlas de manera uniforme, luego ese valor se usa para indexar una matriz (módulo del tamaño de la matriz). Funciona mejor si la matriz tiene bastante espacio libre, por lo que no es muy eficiente en cuanto al espacio, pero (salvo la resolución de conflictos hash), hace que la búsqueda de matriz asociativa tome tiempo constante. Se prefieren funciones hash rápidas y uniformemente distribuidas.

La otra aplicación es contraseñas hash. Cuando se autentica a un usuario, le envían un intento de contraseña (con suerte a través de un canal encriptado), que usted corta. Usted compara el valor hash con la contraseña hash almacenada en su base de datos. De esta manera, no necesita almacenar la contraseña verdadera en texto sin formato. En este caso, se prefieren las funciones hash más lentas y difíciles de calcular para disuadir los intentos de craqueo por fuerza bruta.

Los sistemas reales aplican el hash una y otra vez y también agregan un valor secreto llamado “sal” a los resultados parciales. Esto ayuda a que el hashing sea más lento y agrega una capa adicional de seguridad, ya que un atacante potencial no conoce la sal o el procedimiento exacto de hashing.