Como una especie de seguimiento a esto pregunta sobre el manejo de la funcionalidad de restablecimiento de contraseña al tratar con datos de usuario cifrados, ¿existe algún método bueno para restablecer la contraseña de un usuario en una aplicación web cifrada sin utilizando preguntas de seguridad?
Desde un punto de vista de seguridad, el problema se reduce a la necesidad de una segunda clave para desbloquear los datos en caso de que la primera (la contraseña) se pierda, dejando:
-
Preguntas de seguridad
-
Preferiría no implementar esto debido a inquietudes de seguridad y de experiencia del usuario (según mi experiencia, las preguntas serán tan oscuras que el usuario probablemente no las recordará, o las respuestas serán públicas) información disponible, derrotando todo el propósito)
-
Este es ciertamente el enfoque con el que la mayoría de los usuarios estarán familiarizados, y será el que implemento si no puedo encontrar ninguna otra buena solución
-
-
Una clave de copia de seguridad
-
Un ejemplo es la "clave de recuperación" de Apple, que se supone que debe imprimir cuando habilite la autenticación de dos factores para su ID de Apple
-
Este es un paso adicional que los usuarios no tomarán, o tomarán y luego perderán su clave de recuperación, lo que generará confusión y una mala experiencia para el usuario
-
Otras posibilidades incluyen una aplicación en el dispositivo móvil del usuario que almacena una segunda clave hasta que sea necesaria, pero eso me parece una exageración, y probablemente un paso que los usuarios olvidarán, lo que hace que la aplicación no se vuelva a ejecutar. -instalado cuando obtienen un teléfono nuevo, por ejemplo
-
-
Alguna forma de custodia de claves
- Mi primer pensamiento aquí fue permitir a los usuarios conectar una cuenta externa con OpenID Connect, pero ninguno de los proveedores comunes (Google o Facebook, por ejemplo) devuelve ningún tipo de valor único, estable y secreto que pueda ser útil como una segunda clave en la cuenta (lo más cercano de Google es un identificador de cuenta único, que cada sitio que solicite acceso a su cuenta de Google recibirá)
¿Hay alguna opción que haya pasado por alto aquí o alguna solución inteligente que alguien pueda imaginar que no implique preguntas de seguridad?
EDITAR: para aclarar, para esta aplicación específica, es un requisito que yo (o cualquier otro desarrollador o administrador del sistema) no tenga acceso a ninguno de los datos sin cifrar, en ningún momento. Esto significa que métodos como enviar un código de una sola vez no serán suficientes, ya que requiere que, en algún momento, tenga acceso a la clave para descifrar los datos. (Esta restricción excluye la breve cantidad de tiempo que la clave está en la memoria cuando el usuario la envía para descifrar sus datos. Me preocupa más el descifrado fuera de línea de un volcado de datos que la propia aplicación que se está comprometiendo a filtrar / almacenar teclas)