Bien por ti por tratar de aprender esto. Tenga en cuenta que todo lo que produzca no debe incluirse en un entorno de producción real, ni siquiera a nivel personal. Considere esto como una oportunidad de aprendizaje y no una receta para cocinar su propio administrador de contraseñas. Por lo general, harías algo en este sentido:
-
Genere una clave de 256 bits al azar . Esta es su clave maestra de encriptación.
-
Tome la contraseña maestra y ejecútela a través de PBKDF2 junto con un salt de 64 bits y obtenga un 128 tecla -bit. Esta es su clave de cifrado secundaria.
-
Use la clave de cifrado secundaria para cifrar la clave de cifrado maestra utilizando AES en modo EAX y guárdelo en algún lugar.
-
Para la base de datos, use el formato que desee. Como no estoy seguro de cuál elegir, diré XML . Cifre la base de datos utilizando la clave de cifrado maestra.
-
Cuando el usuario quiera acceder a la base de datos, cargue el archivo cifrado en la memoria, tome la contraseña maestra y ejecútela a través de PBKDF2 con salt y obtenga la clave secundaria, use la clave secundaria para descifrar la clave maestra, y finalmente use la llave maestra para descifrar la base de datos.
-
Una vez que el usuario termina de acceder; añadiendo modificando o al eliminar entradas de la base de datos, simplemente debe cifrarlas nuevamente y descartar todo de la memoria.
-
Cuando el usuario desea cambiar la contraseña, descifra la clave secundaria derivada de la contraseña anterior, descifre la clave maestra, derive una clave secundaria nueva de la nueva contraseña, use esa clave para cifrar la clave maestra. Al hacer esto, no tiene que descifrar y volver a cifrar la base de datos cuando se cambia la contraseña, ya que la clave maestra se mantiene igual.
Finalmente, le recomiendo que eche un vistazo al código fuente de KeePassX . Una gran cantidad de información puede ser recolectada desde allí.
Lo diré de nuevo, no use la aplicación real que produce . Podrías (y es muy probable que) hagas algo mal en algún momento. Diablos, mis instrucciones en sí podrían estar (y probablemente están) equivocadas.
¡Feliz aprendizaje!