¿Cuál es la forma más adecuada de cifrar y descifrar datos confidenciales en un disco de servidor de nube pública sin almacenar la clave de descifrado en texto sin formato?
REQUIREMENTS
En nuestra aplicación web / móvil SaaS, después del inicio de sesión del usuario, un usuario puede cargar archivos PDF que contengan datos confidenciales de clientes en un servidor de nube pública alojado físicamente por un proveedor externo (por ejemplo, Amazon / Rackspace). Me gustaría proteger los datos en el disco cifrándolos antes de escribirlos en el disco y descifrarlos cuando se lean del disco.
Una solución común es utilizar el cifrado simétrico, p. ej. AES y para almacenar la clave de descifrado en el sistema de archivos del servidor. Quiero evitar almacenar la clave de descifrado de texto simple junto con los datos para proteger el acceso a los datos en el disco donde sea que se encuentre dentro de la infraestructura de la tercera parte, por ejemplo. potencialmente a través de múltiples servidores y discos físicos (discos de servidor, sin cifrar en las matrices de discos de copia de seguridad de imágenes diarias) etc.
Condiciones: Un usuario debe poder descargar los archivos PDF que ha cargado previamente. Un usuario administrador debe poder ver los archivos PDF subidos por cualquier usuario.
Estoy considerando usar la contraseña de inicio de sesión de un usuario para proteger la (s) clave (s) de descifrado.
SOLUCIÓN POTENCIAL
Durante cada registro de usuario, un par de llaves públicas / privadas RSA se generaría y almacenaría en el disco del servidor. La clave privada se almacenaría en AES cifrada con la contraseña del usuario (en realidad, la clave derivada de PBKDF2 se basa en la contraseña del usuario).
Encriptación:
- Plaintext PDF se carga en el servidor (a través de SSL)
- El servidor genera una cadena aleatoria (R) para el cifrado AES.
- RSA encrypt R usando la clave pública del usuario. RSA cifra R utilizando la clave pública del usuario administrador. # Permite al usuario administrador descifrar cualquier cosa que AES cifre PDF con R y
- Almacene estas tres partes cifradas en el sistema de archivos.
Descifrado:
- Descifre la clave privada del usuario usando su contraseña de inicio de sesión (a través de PBKDF2)
- RSA Decrypt R usando la clave privada del usuario.
- AES Descifra PDF usando R y devuélvelo al usuario
De esta manera, si alguien tiene acceso completo a los datos completos del sistema de archivos, no podrá descifrar los archivos PDF a menos que también conozcan una contraseña.
P: ¿Es esta una solución segura? ¿Ves fallas en esto? ¿Hay alternativas adecuadas que debería considerar?