Dove memorizzare la password del keystore Java?

6

Avremo un Java Key Store che memorizzerà certificati e amp; chiavi pubbliche / private. Questo keystore sarà protetto con la password. Tuttavia, l'accesso al keystore è solo dal programma. Non è possibile fornire input poiché si basa solo sull'accesso api.

Qual è il posto migliore dove archiviare la password e il codice del keystore Java? in quale formato deve essere memorizzato?

    
posta Deepesh M 17.02.2013 - 19:53
fonte

2 risposte

6

Se speri di tenere le chiavi private fuori dalla portata di chiunque esegua il tuo programma, allora non funzionerà. I segreti incorporati nel codice non resistono a reverse engineering (specialmente quando si utilizza Java, che è abbastanza facile da decodificare).

Anche se non fornisci alcun dettaglio sulla tua situazione (dici solo "Java" e "il programma"), posso dare il seguente consiglio generico: organizzare la tua chiave privata in modo che sia specifica dell'utente e in modo tale che è il miglior interesse dell'utente che la chiave privata rimanga privata. In tal caso, l'utente collaborerà alla sicurezza della chiave. È quindi possibile memorizzare la chiave privata (o una password che sblocca la chiave privata) in Preferenze Java .

    
risposta data 17.02.2013 - 20:37
fonte
3

Questa è davvero una bella domanda e mi piacerebbe vedere più buone risposte. Ecco quelli di cui sono a conoscenza:

  1. Hardcode la / e password / i nell'applicazione.
  2. Mantieni le password in un file.
  3. Salva la password in un sistema esterno e recuperala all'avvio.

Di questi il primo è il più comune e spesso la password è 'password' o 'changeit' ecc. La prima opzione potrebbe sembrare migliore a prima vista, ma è difficile spiegare come esattamente. L'ultima opzione è probabilmente l'unica che ha la speranza di fare qualcosa di significativo. Conosco soluzioni di venditori che fanno questo genere di cose e pretendono di migliorare la sicurezza.

Il problema fondamentale qui è che se un utente malintenzionato si trova sull'host con sufficiente accesso per visualizzare lo spazio dell'applicazione, non c'è davvero nulla che tu possa fare per impedirgli di ottenere questa password. Ad un certo punto deve essere in memoria in chiaro.

Come si vede, la password sul keystore lo protegge principalmente nella situazione in cui il keystore stesso è stato recuperato dalla macchina senza effettivamente avere accesso direttamente a quella macchina. Con quel file, un aggressore può martellarlo a piacimento per ricavarne i segreti. Se non hai una password sicura, game over. Se l'utente malintenzionato può estrarre quel file, è probabile che possa estrarre altri file in cui la password potrebbe essere archiviata. Ciò pone le opzioni 1 e 2 in dubbio.

Per quanto riguarda la terza opzione, il problema ora si sposta su come autenticare i client per recuperare la password. So che ci sono un certo numero di schemi per fare ciò, a seconda dell'host / rete e usando le firme sui binari. Potresti avere un'intera discussione solo su come farlo e su quale livello di protezione porta.

    
risposta data 06.06.2017 - 17:41
fonte

Leggi altre domande sui tag