Estoy diseñando una interfaz de base de datos para un sistema que podría almacenar PII. Mi primer enfoque es asegurarse de que todos los datos estén seguros, para hacer esto, he diseñado el sistema de la siguiente manera.
Estoy ejecutando tres servidores separados con tres roles separados. El servidor 1, la interfaz web (a la que me referiré como El Jefe), toma las solicitudes de los usuarios y las procesa, y devuelve la información apropiada según sea necesario.
Servidor 2, la interfaz criptográfica (a la que me referiré como Bagman) recibe información a través de SSL de El Jefe y la cifra (utilizando la interfaz Halite de Paragon Initiative Enterprises), luego la pasa al servidor 3.
Servidor 3, la base de datos (a la que me referiré como el Stash) almacena la información cifrada que recibe del Bagman. No tiene las claves de cifrado de Bagman ni nada de eso.
En este momento, los datos en reposo son seguros. Si el Stash se rompe de alguna manera, ninguno de los archivos significa nada y ninguna de las entradas en la base de datos significa nada porque todos están encriptados, y ninguna de las claves se almacena en ese servidor.
Sin embargo, si el Bagman se rompe, toda la información que se pasa a través de él puede ser robada.
Además, si El Jefe se ve comprometido, puede enviar instrucciones al Bagman para recuperar, descifrar y devolver cualquier cosa que se encuentre en el Stash.
Para mitigar esto, tenía el siguiente plan: para minimizar cualquier daño causado por una violación de El Jefe o de Bagman, iba a saltear la clave de cifrado con un hash SHA2 de la contraseña del usuario, por lo que incluso si alguien rompe En el Bagman, las claves no tienen valor sin el hash adicional de la contraseña del usuario. Sin embargo, siento que esto cae en el ámbito de "Rodar tu propio cripto", que se basa en mis lecturas de las últimas 2 semanas y es un No-Go. Además, me encontraría con el problema de que si un usuario olvida su contraseña, no hay forma de recuperar sus archivos. O si deciden cambiar su contraseña, tendré que descifrarlos y luego volver a cifrar todos sus archivos.
Me disculpo por los nombres cursis de los servidores, por cierto. Me ayuda a recordar sus roles y visualizar lo que están haciendo en mi mente. Si puede señalarme la dirección de cualquier recurso o lecturas adicionales o informes sobre el diseño de un sistema seguro como este, sería muy apreciado.