De lo que estás hablando se conoce como el principio del casillero : si tienes n posibles contraseñas y una función de hash con m posibles salidas, donde n > m , siempre habrá algunos valores de entrada que producen los mismos hashes de salida.
La pregunta entonces es: ¿esto importa? Con un espacio de salida de hash de 2 160 valores posibles, una colisión accidental tiene una probabilidad de alrededor de 6.842 × 10 -49 . No mucho. Esto se vuelve más interesante cuando te fijas en los ataques de cumpleaños , porque las probabilidades son mucho más altas, pero en general aún se considera inviable. Colisiones de 160 bits que utilizan métodos ingenuos como la fuerza bruta.
En realidad, es más probable que un atacante inteligente se centre en vulnerabilidades dentro de la función hash que reducen El cálculo necesario para encontrar una colisión. Pero, en la arena del almacenamiento de contraseñas, esto debe ser en su mayor parte discutible: las contraseñas son fáciles de descifrar si solo las hash con SHA1, ya que las GPU pueden ejercer fuerza bruta a una tasa de miles de millones de hashes por segundo debido a su naturaleza masivamente paralela.
Si desea almacenar contraseñas de manera segura, no use un hash. Utilice un algoritmo de derivación de claves diseñado para el almacenamiento de contraseñas, como PBKDF2 o crypt . También deberías echar un vistazo a una respuesta relacionada que escribí sobre hashes salados, que dice en la historia de cómo progresamos de hashes, a hashes salados, a KDF modernos, y las razones detrás de cada paso de defensa y ataque.