Archiviazione di "segreti", keystore, HSM e il resto

8

Sto scavando da qualche giorno nella conservazione dei dati sensibili. Se memorizzo questi dati in un database, ritengo che la pratica generalmente accettata sia quella di archiviare i dati sensibili crittografati, per varie ragioni al di fuori dello scopo di questa domanda.

La crittografia dei dati, tuttavia, significa che devo gestire i "segreti" per questi dati. Ho visto 2 percorsi principali per questo (nel mondo Java), KeyStores o HSM. La mia prima domanda è: ci sono altre valide alternative (nel mondo java)?

Ci sono diversi formati di keystore che posso usare in java, per citarne alcuni:

  • JKS
  • JCEKS
  • pkcs12
  • BKS
  • uber

Ho visto pochissime informazioni sulla sicurezza di un keystore. Ho pensato che, se avessi accesso a un keystore, e quando guardo all'API java poiché tutti i keystore sono protetti da una password, potrei semplicemente forzare il keystore, per quanto sicuro sia. La seconda domanda diventa quindi, è prassi generalmente accettata che dal momento che i keystore si trovano su sistemi diversi dai dati crittografati e dal momento che sono protetti da password, allora questo è "abbastanza sicuro" per le condizioni di vita reale? Che dire della memorizzazione della password sul keystore? Ci sono pratiche accettate lì? Ad esempio, memorizzandolo in un altro sistema? Avendolo inserito manualmente all'avvio dell'applicazione? Avendolo in un file os-protetto in cui solo l'applicazione ha accesso in lettura ad esso?

La prossima domanda riguarda gli HSM. Dal momento che posso forzare i keystore della forza, cosa mi impedisce di fare esattamente la stessa cosa con un HSM? Tempo? Deve essere effettuato il login al sistema remoto poiché non esiste un file per me da copiare e utilizzare in remoto?

L'ultima domanda è: qualcuno ha idea di cosa sia considerato abbastanza sicuro in termini di gestione segreta? Supporrei che varia a seconda del tipo di informazioni crittografate con il segreto. Da quanto ho letto altrove, i keystore sembrano abbastanza buoni per la maggior parte degli scenari tipici e gli HSM sono necessari in scenari molto di nicchia, per CA, governi e simili.

È stato apprezzato qualsiasi approfondimento.

    
posta François Lamarre 08.02.2012 - 15:37
fonte

1 risposta

10

In generale, i keystore sono solo "formati" diversi per la memorizzazione di chiavi e metadati. Per quanto ne so, non ci sono grosse differenze di sicurezza tra loro. Pensa a qualcosa di simile alla codifica di un'immagine come Jpeg o PNG o GIF. Sottili differenze, ma alla fine memorizzano le immagini.

Hai giustamente preso in considerazione parti del problema della gestione delle chiavi in generale, e spero che inizi ad apprezzare il motivo per cui potrebbe complicarsi. Quindi hai dati crittografati con una chiave, la chiave memorizzata nel keystore, protetta con una passphrase, la passphrase memorizzata ... vedi dove sta andando? Alla fine di questa catena, c'è un'informazione relativamente piccola che se la ottieni, puoi praticamente rompere l'intera catena. Questo probabilmente ti darà accesso a tutti i dati. Allo stesso modo, anche se hai risolto questo particolare problema, la chiave per la crittografia / decrittografia / firma deve essere usata . cioè caricato in un programma che lo utilizza per gestire i dati. Quando viene caricato in memoria, è in qualche modo accessibile alla CPU e potenzialmente ad altri programmi in esecuzione sugli stessi sistemi. Se uno di questi è compromesso, la tua chiave può essere estratta dalla memoria. Anche se è archiviato in forma crittografata.

Questo è più o meno quando gli HSM entrano. Senza HSM, si è limitati nella capacità di memorizzare le chiavi in modo sicuro, e anche limitato nella possibilità di eseguire operazioni crittografiche in memoria senza esporre la chiave. Gli HSM nascondono la chiave in una memoria (solitamente protetta fisicamente) e eseguono operazioni di crittografia all'interno di questa area protetta. Funzionano in modo tale da impedire l'accesso da altri programmi o dal sistema operativo. Tutti quelli che vedono è l'input / output di questo HSM. Gli HSM variano anche in termini di livello di affidabilità che forniscono. FIPS-140 è uno degli standard che coprono diversi livelli di affidabilità / resilienza. Alcuni HSM offrono anche un certo grado di gestione / autorizzazione delle chiavi. Ad esempio, possono "concedere" la crittografia solo a determinati utenti, ma anche altri utenti saranno in grado di decrittografare i dati. Possono limitare il numero di operazioni crittografiche per utente / gruppo e possono essere configurati per bloccarsi dopo diversi tentativi falliti. Questo è qualcosa che nessun keystore è in grado di fare.

Quindi, mentre è corretto notare che i keystore (e le operazioni di crittografia in memoria) sono in genere "abbastanza buoni". In alcune circostanze, potrebbe essere preferibile utilizzare qualcosa di ancora più sicuro. Tutto dipende dal valore dei dati, dal livello percepito della protezione corrente, dal costo di protezione aggiuntiva utilizzando solo software, utilizzando HSM o altri strumenti e dal profilo delle minacce per questi dati (chi lo desidera, quanto sono capaci, quanto investiranno per farlo ecc.).

    
risposta data 08.02.2012 - 17:58
fonte

Leggi altre domande sui tag