Además de la excelente respuesta de John, hay otra cosa importante a considerar.
Al verificar una contraseña, se pasa mucho tiempo en acciones como buscar la información de la cuenta almacenada (nombre de usuario, contraseña) en una base de datos.
Si tiene un algoritmo de hash rápido, esa búsqueda ahora ocupa una parte significativa de la validación de su contraseña. Esto hace que sea relativamente fácil para un intruso realizar un ataque en el que simplemente dispara nombres y contraseñas aleatorias y determina qué nombres en lugar de contraseñas no existen al sincronizar las respuestas.
Haciendo un hash lento en la contraseña entrante antes de enviarla a la base de datos para compararla con la contraseña almacenada, está tomando la duración de la búsqueda de la base de datos y la comparación de las contraseñas del tiempo necesario para verificar las contraseñas.
El resultado es que una búsqueda fallida ahora toma el mismo tiempo (dentro del margen para la latencia de la red, etc.) como exitosa.
Por supuesto, esto supone que hash la contraseña entrante antes de intentar recuperar la información del usuario.
Si no lo hace, un error para un usuario inexistente sería mucho más rápido que un error para un usuario existente con una contraseña incorrecta, lo que le dará a la persona que ataca su sistema información potencial sobre cuál de los intentos realizó. nombres de usuario reales, incluso si no sabía que eran nombres de usuario reales, para empezar.
¿Esto sucede en la práctica? Ni idea. Pero esa fue una de las razones de los mecanismos de hash lento que nuestro equipo de pentest nos dijo hace varios años.