Mi proyecto requiere que cifre los datos confidenciales del usuario mediante el cifrado de datos simétricos (AES). Guardaré la clave AES (DEK) en un servicio de administración de claves basado en HSM (es decir, Azure Key Vault / AWS KMS) y recuperaré la clave para cifrar / descifrar datos en mi servidor Nodejs.
He buscado en las redes internas las mejores prácticas, sin embargo, los detalles y las explicaciones parecen ir tan lejos en cuanto a si las claves deben almacenarse en la base de datos, de forma rígida o externa (es decir, HSM, KMS, env var, etc. ...).
No he podido encontrar una aclaración suficiente sobre lo siguiente:
1) ¿Debo crear una clave de cifrado de datos AES diferente para cada usuario? Si es así, ¿cuál es el razonamiento detrás de esto? ¿Otra capa más de complejidad?
2) ¿Cuál es la mejor manera de proteger la clave contra ataques, como cuando el servidor es hackeado y rastreado / monitoreado?
3) ¿Es una mejor práctica recuperar la clave al iniciar el servidor, luego almacenar la clave en la memoria del servidor, O recuperar la clave cada vez que el servidor necesita cifrar datos para el usuario?
Gracias de antemano.