¿Cómo almacenar las contraseñas en la base de datos para poder recuperarlas?

6

Estoy desarrollando una aplicación web de administrador de contraseñas. Es solo por diversión: no estoy exponiendo las contraseñas de nadie.

Mi idea fue usar hashing + salting, y eso es lo que hice con la contraseña maestra. Pero luego me di cuenta de que tengo que recuperar las contraseñas de las cuentas para usarlas (y me sentí un poco estúpido), por lo que el hashing no es una opción.

Obviamente, el cifrado simétrico es inútil en este caso porque tenemos el mismo problema con la clave de descifrado. Y el cifrado asimétrico podría ser una opción pero no muy práctico (el usuario tiene la clave privada y debe usarla cada vez que quiera obtener una contraseña: no es práctico).

No sé cómo puedo usar estas herramientas criptográficas (u otras) para resolver este problema.

Resumen : tengo que almacenar contraseñas en una base de datos pero tengo que poder recuperarlas en texto sin formato.

    
pregunta Julen 29.07.2015 - 20:26
fuente

2 respuestas

10

El mecanismo normal para un administrador de contraseñas es tener algún tipo de "clave maestra" y cifrar los datos (simétricamente) con esa clave. La clave maestra, en su caso, se deriva de la contraseña maestra a través de adecuada hash de contraseña (por lo que se convierte, en este caso, derivación de clave basada en contraseña ). Así que use bcrypt o PBKDF2 para convertir la contraseña maestra del usuario en una clave K , y mantenga todos los datos de ese usuario encriptados con K .

Hacer eso como una aplicación Web es de una sabiduría cuestionable. Incluso si lo hace todo en el lado del cliente en JavaScript, ese JavaScript sigue siendo el código enviado por el servidor y el código que ve todas las contraseñas para todos los usuarios, por lo que el servidor se convierte en un objetivo muy sensible y jugoso (si el servidor se encuentra bajo control hostil , que se convertiría en una orgía de robo de contraseña).

    
respondido por el Tom Leek 29.07.2015 - 21:03
fuente
0

Puede ver cómo los bancos probablemente lo hagan , pero la seguridad realmente depende del enlace más débil y personalmente prestaría mucha más atención a la seguridad web (XSS, CSRF, etc.).

Será mucho mejor si el front-end es responsable de descifrar, por lo que tanto la clave maestra como las contraseñas de texto sin cifrar nunca existen en la memoria del servidor o en la red. Sin embargo, esto limita la cantidad de trucos que puede poner en la base de datos backend.

    
respondido por el billc.cn 05.08.2015 - 17:23
fuente

Lea otras preguntas en las etiquetas