¿Cómo autentica una aplicación la contraseña de un usuario si cada vez que proporciona su contraseña para acceder a su cuenta, la contraseña proporciona un salt diferente?
La premisa de tu pregunta es incorrecta. No se utiliza una sal diferente cada vez que se proporciona la contraseña.
Así es como funciona la autenticación basada en contraseña:
Podría aclararse si separa el proceso de registro del proceso de autenticación.
En el momento de la inscripción:
El usuario proporciona credenciales. La mayoría de las veces esto incluye UserID + Password. Tenga en cuenta que el usuario (o el agente de usuario) no proporciona sal en esta etapa.
El servidor genera una sal única para ese usuario y la usa en un algoritmo de hashing de una sola vía para generar un resumen de contraseña.
La sal se almacena en la base de datos junto con el resumen de la contraseña.
En el momento de la autenticación (cuando el usuario vuelve a iniciar sesión), cada vez:
El usuario proporciona la ID de usuario + contraseña. Tenga en cuenta que el usuario no proporciona ninguna sal.
El servidor utiliza el UserID como clave de búsqueda y recupera el salt y el resumen de contraseña almacenado para ese usuario
El servidor luego combina la contraseña suministrada por el usuario + el sal recuperado de la misma manera que antes: para generar un resumen basado en la contraseña proporcionada por el usuario. Tenga en cuenta que la sal se recupera de la base de datos, no se genera recientemente.
El servidor luego compara el resumen de contraseña almacenada con el resumen basado en contraseña suministrada por el usuario para decidir si la autenticación es exitosa o no.