Cómo implementar la contraseña de restablecimiento para un administrador de contraseñas

7

¿Cómo podría implementar mejor una función de restablecimiento de contraseña para un administrador de contraseñas? Actualmente estoy guardando una contraseña maestra con hash + salted, que se oculta con PBKDF2, y cifrando las contraseñas con la propia contraseña maestra, sin embargo, si un usuario ha perdido su contraseña maestra, esto significa que las contraseñas no se pueden descifrar.

Pensé en guardar una versión de las contraseñas cifradas con la contraseña maestra y una versión cifrada con el correo electrónico de los usuarios + algún token aleatorio generado cuando el usuario crea su cuenta, pero ¿sería seguro? ¿Hay alguna mejor práctica al hacer esto?

El correo electrónico del usuario también se almacena como un hash.

Entonces, para aclarar mi pregunta, ¿existen prácticas recomendadas para recuperar datos cifrados con una contraseña si esa contraseña se pierde?

EDIT

Mi idea actual es generar una segunda clave para cifrar todas las contraseñas, y cifrar esta clave en una imagen a través de la esteganografía que el usuario puede almacenar en un usb, pero todas las contraseñas se guardarán dos veces en la base de datos (cifradas ambas veces), así que no sé si eso es un riesgo o no.

EDIT 2

Versión final, con la ayuda de la respuesta de @ A.Hersean.

Voy a generar una clave con la que se cifrarán todas las contraseñas, y esta clave se puede cifrar con una contraseña y una contraseña de respaldo (que se guarda dentro de una imagen) y esos dos cifrados de la clave se guardarán a la base de datos.

    
pregunta Dennis van Gils 07.03.2017 - 17:28
fuente

3 respuestas

6

Para responder a su pregunta "Entonces, para aclarar mi pregunta, ¿existen prácticas recomendadas para recuperar datos encriptados con una contraseña si esa contraseña se pierde?", la mejor práctica es que no recupere datos encriptados cuando pierda su contraseña . Debido a que el punto de cifrado es no poder descifrar sin la contraseña, ser capaz de hacerlo de otra manera debilitará su esquema de cifrado. Por lo tanto, debe asegurarse de no perder la contraseña en primer lugar, por ejemplo, escribiéndola y colocándola en una caja fuerte.

Para su pregunta "una versión encriptada con el correo electrónico de los usuarios + algún token aleatorio generado cuando el usuario crea su cuenta, pero ¿sería seguro?", la respuesta es no, eso no sería seguro. Debido a que tendrá que guardar el token (y la dirección de correo electrónico o su hash), es lo mismo que guardar la contraseña en texto simple.

Si necesita flexibilidad, no cifre los datos con una contraseña. Cifre sus datos con una clave de cifrado generada aleatoriamente, luego cifre esta clave con una contraseña y guárdela en su forma cifrada. Luego puede cifrar la clave con otras contraseñas y guardarla también, tal vez en otro lugar (en una bóveda). Tenga en cuenta que la fortaleza resultante del cifrado será la de la contraseña más débil utilizada.

    
respondido por el A. Hersean 09.03.2017 - 09:38
fuente
2

Cuando obtiene una clave a partir de la contraseña del usuario, no existe una forma sencilla de restablecer la funcionalidad de la contraseña. Consulte this y this para un ejemplo de una implementación bien conocida y cómo se resuelve el restablecimiento de una contraseña.

Muchas implementaciones tienen funcionalidad de clave de recuperación en caso de que la clave maestra se pierda (o se olvide en su caso). BitLocker es un ejemplo.

Puede considerar la creación de una clave de restablecimiento de contraseña y enviarla al correo electrónico del usuario al registrarse. Esto puede ser comprometido si el correo electrónico del usuario es hackeado sin embargo.

Otra opción es tener una clave de recuperación compartida (por ejemplo, mediante el algoritmo Shamir's Secret Sharing ) entre dos o más usuarios / administradores, por lo tanto, en caso de restablecimiento, se necesitan múltiples partes para restablecer la contraseña para un usuario determinado. Algo similar se hace en Vault .

Creo que no existe una mejor práctica específica, solo algunas implementaciones bien conocidas. Todo depende de sus necesidades de diseño.

    
respondido por el Marko Vodopija 08.03.2017 - 11:01
fuente
2

Esto es esencialmente un seguimiento de la respuesta de @MarkoVodopija. La razón detrás de recuperación de contraseña para encriptación es simplemente almacenar la contraseña o la clave en un lugar seguro , porque solo una puerta trasera o una falla importante en el software de cifrado puede permitir leer los datos sin la clave

Dependiendo de lo que aceptes como seguro conducirás a diferentes soluciones. Además de los propuestos por Marko tienes:

  • escríbalo en un papel y guárdelo en un sobre sellado en una caja de seguridad física. Solía ser una buena práctica para las contraseñas de administrador, y es una forma realmente a prueba de balas ... si puedes confiar en todos los propietarios de la clave segura.
  • compártelo con alguien en quien confíes, y confía en que él / ella no lo olvide ... Pero esto es más apropiado para los secretos compartidos, y si crees que puedes olvidarlo, ¿por qué la otra persona no podría olvidarlo también?
  • en una red corporativa de Microsoft, es común que la clave utilizada para las carpetas cifradas se cifre una vez con la clave privada del propietario y una vez con una clave de acceso de administrador de red para permitir que el administrador del sistema desbloquee las carpetas si el empleado tuviera que váyase sin antes dar todo a otra persona, por ejemplo, en caso de accidente.
respondido por el Serge Ballesta 09.03.2017 - 10:07
fuente

Lea otras preguntas en las etiquetas