Múltiples contraseñas con hashing

1

Para proteger las contraseñas, un sitio web utiliza una función de hash antes de almacenar la contraseña (este es solo un ejemplo de una función hash muy simple):

f (x) = x mod 10

Las contraseñas se incluyen con hash antes de que se almacenen en la base de datos y luego, cuando un usuario inicia sesión, el campo de entrada de contraseña está en hash y se compara con el de la base de datos.

Si la contraseña del usuario es 17, entonces 17 mod 10 = 7 es lo que está almacenado en la base de datos. Si el usuario escribe 17 en el inicio de sesión, el hash a 7 y funcionará correctamente. Sin embargo, ¿no podrían 27, 37, 47 ... no habría muchas contraseñas también hash a 7 para que se autentiquen correctamente?

    
pregunta Melkor 03.12.2016 - 23:38
fuente

1 respuesta

3

Todas las funciones hash, excepto las funciones hash perfectas, tienen colisiones, porque el hash normalmente asigna un conjunto más grande de entradas a un conjunto más pequeño de salidas.

Dicho esto, el mod 10 es una función horrible para las contraseñas de hash ya que la cantidad de colisiones es inaceptable en la práctica.

Aparte de eso, también es inaceptable porque es demasiado rápido y porque es increíblemente fácil encontrar una entrada que coincida (porque solo puedes usar el hash como contraseña, siempre coincidirá). Tampoco puedes realmente reducir las colisiones aumentando el divisor. Si, por ejemplo, lo configurara en 1000, todas las entradas de menos de 1000 no cambiarían realmente.

Este es un buen ejemplo de que no todas las funciones hash son aceptables como funciones hash criptográficas.

Las funciones criptográficas de hash tienen que ser la resistencia de preimagen, la segunda resistencia de preimagen y la resistencia a la colisión.

mod no es ninguno de esos:

  • Resistencia previa a la imagen: dado un hash h, debería ser difícil encontrar una contraseña p tal que h = h (p). No es. p = h siempre funcionará.
  • Segunda resistencia de pre-imagen: dada una contraseña p1, debería ser difícil encontrar otra contraseña p2 tal que h (p1) = h (p2). No es. p2 = p1 + el divisor funcionará.
  • Resistencia a la colisión: debería ser difícil encontrar dos contraseñas p1 y p2, de manera que h (p1) = h (p2). Obviamente no, dados los dos puntos anteriores.

Para conocer las funciones aceptables, consulte ¿Cómo hacer hash de forma segura las contraseñas? .

    
respondido por el tim 04.12.2016 - 00:05
fuente

Lea otras preguntas en las etiquetas