2011-12-02 6 views
16

Possiedo un oggetto proprietà java con le informazioni di autenticazione per un servizio Web. Ho bisogno di crittografare quei dati, ma non so dove ho bisogno di conservare la chiave di crittografia affinché rimanga sicura.Come archiviare in modo sicuro le chiavi di crittografia in java?

Quali sono le migliori pratiche in merito alla crittografia di questi dati e al loro recupero in modo sicuro?

C'è qualche vantaggio nell'utilizzo di un keystore?

ws_user=username 
ws_password=password 
ws_url=https://www.whatever.com/myservice 
+0

Sembra che se la mia applicazione deve avere accesso alla chiave, non c'è un modo per "proteggerla". Se lo memorizzo in un keystore sarebbe più oscuro, ma non sembra più sicuro. Spero di sbagliarmi :) – ScArcher2

+0

Sembra in definitiva un problema di bootstrap. Ad un certo punto della catena devi avere una chiave con cui decrittografare qualcosa. Anche se si utilizza un keystore, è necessaria una password per quel keystore. Non c'è modo di cambiare lo schema di autenticazione? Inoltre, potresti ottenere delle risposte piuttosto informate su http://security.stackexchange.com/ se lo chiedi lì. – mcfinnigan

+0

@mcfinnigan è quello che pensavo. Volevo solo vedere se c'erano dei modi per aggirare il problema. – ScArcher2

risposta

5

Il tuo problema è comune. In Linux, le password dell'utente sono memorizzate in un file di testo normale. Sebbene vengano memorizzati solo gli hash delle password, se un utente malintenzionato accede a tale file, non impiegherà molto tempo a scoprire alcune password utilizzando un attacco di dizionario offline. In questo caso, il sistema operativo si basa sulle autorizzazioni dei file per negare l'accesso agli utenti non autorizzati. Nel tuo caso, non è molto diverso. È necessario configurare correttamente le autorizzazioni del file di password e garantire la sicurezza fisica del server.

+0

Mi sono imbattuto in una situazione in cui la politica di sicurezza del cliente richiedeva la crittografia di nome utente/password nei file di configurazione. Sembrava sciocco, ma pensavo di controllare qui per vedere se mi mancava qualcosa. – ScArcher2

4

Questo è un problema uovo di gallina.
Sarà quindi necessario per trovare dove memorizzare la password per l'archivio di chiavi e e così via .....

A seconda delle esigenze di sicurezza e le esigenze, si potrebbe enrypt i dati utilizzando la crittografia simmetrica e recuperare la password tramite un server remoto (il tuo server) utilizzando l'autenticazione del certificato lato client.

Oppure puoi crittografare i dati utilizzando la crittografia simmetrica e avere la password codificata nel tuo contenitore, che non è sicuro ma richiede un certo sforzo per trovarlo e potresti delegare la responsabilità alle autorizzazioni del file system su chi può accedere ai tuoi file.

0

Ho avuto successo utilizzando 's StringEncrytor per crittografare le informazioni sensibili nei file di proprietà e alcune procedure interne per la generazione di sali e il recupero della password. Dal momento che stai utilizzando un servizio web, puoi utilizzare Jasypt Web PBE Configuration per inserire manualmente la password al momento della distribuzione o persino eseguire il rollover della tua soluzione simile.

+0

Ciao Dan, hai usato la configurazione Web PBE? Penso che possa risolvere il problema dell'uovo di gallina (sempre bisogno di una chiave master per crittografare il testo). Come deve essere impostato? Sono un po 'perplesso. Grazie per l'aiuto! V. – Viktor

4

La linea di fondo è che da qualche parte è necessario avere la password "root-of-the-chain" in una forma non criptata. Un file locale protetto dal sistema operativo, un file remoto protetto dal sistema operativo, hardcoded nella sorgente, ecc.

L'unico modo per aggirare è quello di richiedere a un essere umano di digitare la password iniziale all'avvio dell'applicazione, che ovviamente non è possibile per le applicazioni che devono essere avviate automaticamente.