Ottimo modo per proteggere molte chiavi private

3

Sto lavorando a un software che gestisce lotti (diversi milioni) di chiavi private RSA. Keysize è il 2048, ho intenzione di memorizzarli nel database in formato PEM.

Voglio che le chiavi siano crittografate per mitigare i rischi di accesso ostile al database. Naturalmente, viene in mente l'applicazione della passphrase con PKCS # 8.

Tuttavia, non sono sicuro che sia sicuro applicare la passphrase stessa a milioni di chiavi private. Se qualcuno ottiene il database, sarà possibile per loro decrittografare le chiavi, sapendo il fatto che la stessa passphrase è stata usata?

Se PKCS # 8 non è sicuro in questo scenario, quali sono le opzioni migliori che ho, dato che posso usare la stessa passphrase (o un numero limitato di esse) per crittografare i dati?

    
posta Serhii Yakovenko 28.02.2018 - 12:43
fonte

6 risposte

2

Comprati un HSM.

Quindi è la tua scelta:

  1. Memorizza le chiavi su HSM; o
  2. Creare una chiave di crittografia su HSM e crittografare le chiavi memorizzate nel databse utilizzando la chiave memorizzata in HSM.

Una soluzione basata su HSM di qualche descrizione è l'unico vero modo per ottenere una reale sicurezza contro gli attacchi. Gli HSM sono progettati in modo robusto per la sicurezza e progettati esplicitamente per rendere impossibile l'accesso ai dati chiave archiviati su HSM.

    
risposta data 28.02.2018 - 16:31
fonte
1

Utilizzare una passphrase diversa per ogni chiave significa che hai il problema di capire dove tenere i passphrase. È un po 'meglio in quanto la passphrase può essere memorizzata separatamente - e realizzando (compromettendo?) L'asset richiede compromessi sia della passphrase che della chiave protetta.

Il numero di voci che descrivi implica piuttosto che avrai bisogno di un po 'di automazione per portare insieme la chiave e la passphrase (ad esempio un'applicazione html5 che si collega a 2 diversi servizi con autenticazione separata). Questo è il link debole nell'applicazione. Ma non ci hai detto niente riguardo al front-end del sistema.

    
risposta data 28.02.2018 - 16:39
fonte
1

I'm working on a software which deals with lots (several millions) of RSA private keys. ... apply same passphrase to millions of private keys

Stai assolutamente facendo qualcosa di fondamentalmente sbagliato, non esiste un buon modo per proteggere milioni di chiavi in un singolo server. Suggerirei di trovare un altro design in cui non avrai bisogno di milioni di chiavi private. Quale problema pensi di poter risolvere avendo un milione di chiavi? Cosa c'è che non va con l'avere una sola chiave RSA che ti rappresenta?

what better options I have

Basta usare una crittografia completa del disco e non c'è bisogno di crittografia per record. Avrai effettivamente lo stesso livello di sicurezza, e sarà molto più facile da gestire, il che significa meno probabilità di commettere errori che potrebbero compromettere la sicurezza.

Se vuoi un suggerimento che migliori la sicurezza, dovrai descrivere un po 'di più quello che stai costruendo, altrimenti qualsiasi consiglio qui non andrà da nessuna parte.

Probabilmente, probabilmente si può fare qualcosa come il sistema CA in cui si hanno solo alcune chiavi CA root con air gap che vengono utilizzate solo per emettere certificati CA intermedi. Sono i certificati CA intermedi che vengono utilizzati per le emissioni giornaliere di certificati di accesso. Non si dovrebbe avere un singolo server con milioni di chiavi private, ma il proprio server singolo dovrebbe invece memorizzare i certificati (il certificato è chiave pubblica + attributi + data di scadenza + firma crittografica effettuata dalla CA). Hai solo bisogno di una chiave privata per ogni persona, ma puoi creare più certificati da una singola chiave, asserendo vari attributi (attestazioni) sul proprietario della chiave privata. Il proprietario della chiave privata può inviare queste attestazioni alla parte relying, che verifica se il proprietario della chiave è autorizzato o meno.

    
risposta data 28.02.2018 - 22:28
fonte
0

Ho uno schema disponibile che può essere usato per PKI incluso impegno che potrebbe aiutare. Fa parte di un progetto più ampio che si occupa della complessità delle durate della chiave di crittografia.

    
risposta data 28.02.2018 - 14:51
fonte
0

In passato ho creato qualcosa di simile e abbiamo deciso di aggiungere un campo alla tabella che contiene le chiavi in un token. Quel token era la chiave di un'altra tabella, che era in un database diverso, che contiene i passphares dell'altro. Probabilmente c'è un modo migliore ma questo è stato sufficiente per noi.

    
risposta data 28.02.2018 - 13:12
fonte
0

Primo: Sì, usa PKCS # 8. È lo standard e ampiamente usato. Un'implementazione di crittografia personalizzata sarà probabilmente imperfetta, meno comoda e avrà meno strumenti.

Per quanto riguarda la condivisione delle password tra le chiavi:

Dipende tutto , ma alla fine, ti consigliamo di limitare adeguatamente l'accesso alle chiavi in modo che un'operazione possa accedere solo alle chiavi di cui ha bisogno.

Se queste chiavi sono tutte utilizzate simultaneamente dalla stessa persona / processo, non c'è molto altro da crittografare con password diverse, dal momento che le password dovranno comunque essere lette tutte insieme.

D'altra parte, se si memorizza una chiave per dipendente (ad esempio), ciascun dipendente può ottenere la password solo sulla propria chiave e sulla propria chiave. In questo modo, una password compromessa non mette a rischio tutte le chiavi private.

Certo, puoi passare da una all'altra, raggruppando i tasti insieme, ecc., a seconda di ciò che è più appropriato per la tua situazione.

    
risposta data 28.02.2018 - 18:52
fonte

Leggi altre domande sui tag