Para el inicio de sesión activo de un usuario, claramente es mejor usar el algoritmo más lento posible con las menores colisiones posibles para evitar que un atacante inicie sesión como otro usuario.
Cuando se trata de almacenar el historial de contraseñas, la principal preocupación es proteger el texto simple de la contraseña anterior del usuario porque aún pueden usarla en otros lugares o usar una contraseña similar a la actual.
Estoy pensando que un hash MD5 o CRC truncado permitiría al sistema verificar el historial de contraseñas, aunque con falsos positivos ocasionales (el usuario solo puede pensar en otra cosa), pero hacerlos imposibles de revertir *. Cuando digo "imposible", quiero decir que habrían colisión plaintexts por diseño y que serían indiscernibles del texto simple de la contraseña original elegida por el usuario.
Si se debe mantener el historial de contraseñas, ¿es este un enfoque práctico?
Un atacante podría buscar en esas colisiones buscando qué contraseña era más probable la entrada humana, tal vez buscando palabras del diccionario o sufijos del tipo "1234".
¿Con colisiones lo suficientemente altas, ese tipo de estrechamiento sería poco práctico? Tal vez hash la mitad de su contraseña?
¿Demasiadas colisiones del historial de contraseñas no permitirían demasiadas contraseñas nuevas?