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? .