Il mio progetto mi richiede di crittografare i dati sensibili degli utenti utilizzando la crittografia dei dati simmetrica (AES). Memorizzerò la chiave AES (DEK) in un servizio di gestione delle chiavi basato su HSM (ad es. Azure Key Vault / AWS KMS) e recupererò la chiave per crittografare / decodificare i dati sul mio server Nodejs.
Ho setacciato gli internets per le best practice, tuttavia, i dettagli e le spiegazioni sembrano arrivare al punto di decidere se le chiavi debbano essere memorizzate nel database, hardcoded o esternamente (ad esempio HSM, KMS, env var, ecc. ...).
Non sono stato in grado di trovare chiarimenti sufficienti su quanto segue:
1) Devo creare una chiave di crittografia dei dati AES diversa per ogni utente? In tal caso, qual è il ragionamento alla base di questo? Solo un altro livello di complessità?
2) Come proteggere al meglio la chiave contro gli attacchi come quando il server viene violato e tracciato / monitorato?
3) È migliore pratica recuperare la chiave all'avvio del server, quindi archiviare la chiave in memoria sul server, OPPURE recuperare la chiave ogni volta che il server deve crittografare i dati per l'utente?
Grazie in anticipo.