Se me ocurrió un procedimiento de almacenamiento de detalles de usuario que, al principio, se basaba en la literatura de seguridad real, pero luego seguí escribiendo sin hacer todas las comprobaciones cruzadas que debería haber hecho.
-
Se ingresaron el nombre de usuario, la contraseña y los datos personales.
-
Se genera una clave simétrica aleatoria de 128 bits.
-
Se generan dos vectores de inicialización aleatorios.
-
La matriz en la que se almacenan los datos personales (nombre, correo electrónico, etc.) se encripta AES-128 con la clave recién generada y el primer vector de inicialización.
-
La propia clave simétrica se encripta con AES-128, utilizando la contraseña del usuario en texto sin formato como la clave y el segundo vector de inicialización.
-
La clave recién cifrada, vector de inicialización 1 & 2 y el conjunto cifrado de datos personales se almacena en un objeto que luego se serializa en un archivo con una ID, un hash del nombre de usuario del usuario.
-
Cuando el programa recupera los detalles: contiene el nombre de usuario del usuario actual, busca ese hash en el archivo "usuarios" (la ID), recupera el objeto asociado con él, descifra la clave y utiliza la clave descifrada para descifrar los datos de usuario.
¿Es grotescamente inseguro? ¿Me estoy perdiendo algo obvio?