En mi aplicación, me gustaría cifrar los datos del usuario de manera que no tenga acceso a ellos. Para ello seguiré los siguientes pasos:
- generar clave de 256 bits
- Cifrar datos con clave
- Derivar la segunda clave de la contraseña (PBKDF2)
- Encriptar la 1ª clave, destruir la clave de texto sin formato
- Almacene el hash + la contraseña salada y la clave cifrada
Ahora mi problema es este: todavía tengo que proporcionar una manera de restablecer la contraseña cuando se olvida.
Me doy cuenta de que seguir este esquema de estilo de confianza y nadie contradice directamente la capacidad de proporcionar una función de restablecimiento de contraseña, pero espero una solución que pueda ayudar a mantener el espíritu del esquema a través de un compromiso saludable, sin requerir un segundo secreto del usuario, como respuestas a preguntas de seguridad o un tercero confiable.
Mis ideas:
- Almacenar una copia de la clave de cifrado por usuario con una clave que mi aplicación controla como respaldo, lista para volver a cifrarla con su nueva contraseña (restablecer) para las operaciones diarias. Para ser claro, estoy de acuerdo con tener acceso a los datos yo mismo, en lugar de eso, me propongo limitar los datos potenciales a los que podría acceder un pirata informático exitoso.
- Al registrarse, envía un enlace para restablecer la contraseña a su correo electrónico que contiene una clave en el enlace utilizado para cifrar una versión de respaldo de la clave cifrada, lista para volver a cifrarla con la nueva contraseña.