Puede usar una función de derivación de clave para convertir la contraseña del usuario en una clave de cifrado. Luego, usaría un generador de números pseudoaleatorios criptográficamente seguro para generar una clave separada que cifraría los datos del usuario. Luego usaría la clave derivada para cifrar la clave generada. El texto cifrado resultante de la clave de cifrado de datos podría almacenarse de forma segura en la tabla de usuario de su base de datos (llame al campo "clave cifrada" si lo desea). De esta manera, la contraseña del usuario se convertirá en el medio para descifrar la clave cifrada del usuario. La clave que en realidad encripta los datos solo se desencripta el tiempo suficiente para desencriptar los datos encriptados. Tendrá que almacenar esa clave en la sesión para evitar la necesidad de pedirle al usuario su contraseña en cada descifrado.
Como alternativa, puede almacenar la clave de cifrado de clave en un Servicio de administración de claves como el que ofrece Amazon AWS. De esta manera, recuperaría la clave de Amazon a través de TLS utilizando solo una referencia a la clave. Por supuesto, en este caso, aún necesitará almacenar las credenciales de autenticación para el KMS en algún lugar de su arquitectura, posiblemente en un archivo de configuración altamente seguro recuperado de forma remota.
Generador de números aleatorios ⟶ Ayuda a crear la clave # 1.
Esta clave encripta sus datos. Se mantiene constante en el tiempo. Debe generar esta clave cuando el usuario se registra por primera vez. Utilice un CSPRNG (generador de números pseudoaleatorios seguro criptográficamente) para garantizar la aleatoriedad y la imprevisibilidad suficientes.
Contraseña ⟶ Convertida en clave # 2 con PBKDF2.
Esta clave, Clave # 2, se usa para cifrar la Clave # 1. Usted querrá persistir la clave # 2 en la sesión del usuario. Almacene la forma cifrada de la Clave n. ° 1 en la tabla de usuarios, en un campo llamado (tal vez) "clave cifrada".
Cambiar contraseñas
Cuando el usuario cambia su contraseña, solo tiene que ejecutar el paso # 2 de nuevo, en lugar de cifrar todos sus datos, una vez más. Simplemente convierta la nueva contraseña en una clave (Clave n. ° 2), vuelva a cifrar la Llave n. ° 1 y sobrescriba el valor anterior de la forma cifrada de la Llave n. ° 1.
Cifrado / descifrado de datos
Cuando el usuario haya iniciado sesión, ejecute el paso # 2. Una vez que haya convertido la contraseña en una clave, simplemente descifre la Clave # 1. Ahora que ha descifrado la Clave n. ° 1, puede usar la Llave n. ° 1 para cifrar y descifrar sus datos.