El uso de una función unidireccional (por ejemplo, BCrypt) para el manejo de contraseñas en el inicio de sesión basado en contraseña es un enfoque común.
Cuando una aplicación utiliza una clave derivada de la contraseña del usuario para cifrar una clave privada, ¿es seguro confiar en un descifrado exitoso al iniciar sesión?
Ejemplo :
-
Registro (todos los pasos realizados por el cliente):
- Derive una clave (A) de la contraseña del usuario (por ejemplo, utilizando PBKDF2 con iteraciones de 100k).
- Use la clave A para cifrar la clave privada del usuario (usando cifrado autenticado; por ejemplo, AES en modo GCM).
- Almacene la información requerida en el registro de la base de datos del usuario (por ejemplo, texto cifrado, sal, ...).
-
Inicio de sesión (todos los pasos realizados en el lado del cliente):
- Cargar el registro de la base de datos del usuario por nombre de usuario.
- Derive la clave (B) de la contraseña del usuario (utilizando el mismo método utilizado en el registro).
- Intente descifrar la clave privada de los usuarios con la clave B.