Protezione delle chiavi di crittografia dei dati simmetriche archiviate in HSM (AES) in memoria sul server

7

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.

    
posta ryd3r 25.01.2016 - 13:55
fonte

2 risposte

7

Hai posto diverse domande qui, quindi fornirò diverse risposte e un paio di chiarimenti.

I will be storing the AES key (DEK) in a HSM-based key management service (ie. Azure Key Vault / AWS KMS) and will retrieve the key to encrypt/decrypt data on my Nodejs server.

Questo non è generalmente ciò che vuoi fare. Se stai usando un HSM, l'obiettivo è che la chiave rimanga dentro HSM e non se ne vada mai. Un modo comune per farlo è archiviare una chiave-chiave di crittografia (KEK) nell'HSM e chiavi / chiavi di crittografia dei dati crittografate (DEK) altrove. Nel caso di Azure Key Vault, questi potrebbero essere segreti recuperabili. Sono sicuro che Amazon ha qualcosa di simile. Quindi, quando è necessario utilizzare un DEK, lo si passa all'HSM, dove viene decifrato utilizzando il KEK e quindi restituito all'utente.

1) Should I create a different AES data encryption key for each user? If so, what is the reasoning behind this? Just another layer of complexity?

Sì. Il motivo è che se una chiave è compromessa, tutti i dati non sono, solo i dati crittografati con questa chiave. (I dati per un cliente, in altre parole.) Inoltre, elimina la capacità di molti difetti applicativi (al di fuori di difetti specificamente correlati al recupero dei codici) per consentire ad un cliente di accedere accidentalmente ai dati di un altro cliente.

2) How best to secure the key against attacked like when the server is hacked and traced / monitored?

Proteggi i tuoi server. E segui il resto del consiglio qui, come se esponessi solo le chiavi quando necessario.

3) Is it better practice to retrieve the key at startup of the server, then store the key in memory on the server, OR retrieve the key each time the server needs to encrypt data for the user?

È meglio esporre le chiavi per il tempo minimo necessario per eseguire le operazioni di crittografia o decrittografia che devono eseguire. Recuperarli ogni volta che il server si avvia è certamente eccessivo. Se è più sensato per te recuperarli, quando un utente effettua l'accesso o aspetta fino a quando non è necessario eseguire un'operazione di criptazione effettiva è a tuo giudizio. Di nuovo, più piccola è la finestra, meglio è, a ragione.

    
risposta data 26.01.2016 - 02:30
fonte
0

quando la chiave è su un HSM tecnicamente non dovresti essere in grado di farla uscire così velocemente, in primo luogo.

se possibile, richiede all'HSM di richiedere un'autenticazione speciale per lanciare esplicitamente le chiavi.

un HSM non è solo per l'archiviazione sicura delle chiavi, ma in genere possono anche eseguire operazioni crittografiche come la firma, la de / crittografia ecc.

quindi, a seconda che l'HSM ti permetta di farlo, imposta un "livello utente di base" che può funzionare solo con la chiave e un "livello amministrativo", che in realtà ha accesso alla chiave.

In questo modo il server non sarà in grado di vedere la chiave in primo luogo e l'HSM agirà come una scatola nera.

    
risposta data 25.01.2016 - 14:02
fonte

Leggi altre domande sui tag