Estoy construyendo una aplicación web. La aplicación necesita mantener ciertos datos dentro de la base de datos muy seguros.
Supongamos por un momento que no tengo un HSM o una instalación de administración de claves y no puedo costear la implementación de uno.
Al almacenar los datos de un usuario, quiero generar una clave aleatoria y proporcionarla al usuario. Esto no será almacenado en ningún lugar de mi servidor. Esta clave se utilizará para cifrar los datos.
No me siento cómodo porque el usuario tiene la única clave necesaria para decodificar el texto cifrado, ya que no sé cómo lo van a almacenar, si van a enviarlo por correo electrónico, etc.
Como tal, pretendía aplicar alguna otra forma de cifrado en el lado del servidor.
Entonces, primero, cifraría los datos usando la clave aleatoria provista al usuario, y luego la cifraría nuevamente, usando una clave estática o una segunda clave aleatoria que almacenaré en el servidor / db.
Al no almacenar la clave aleatoria proporcionada al usuario, los datos permanecen protegidos si el servidor está comprometido, ya que no hay ningún lugar dentro del servidor o componentes asociados que un pirata informático pueda obtener todas las claves necesarias para descifrar los datos. Pueden obtener acceso a la clave estática o segunda clave aleatoria, pero esto no será suficiente.
Estaba pensando en usar AES para el primer y segundo cifrado.
- ¿Es esta una mala idea?
- ¿Debería crear una clave de cifrado que sea una fórmula de la clave aleatoria del usuario y la clave almacenada en el servidor, y luego cifrar solo una vez?
- ¿Debo hacer algo completamente diferente?