Come proteggere la comunicazione tra l'applicazione server e l'applicazione mobile client tramite HSM

0

Stiamo pianificando di implementare HSM con la nostra applicazione. La soluzione che stiamo pensando è:

  • Le applicazioni mobili dialogano con l'applicazione server,
  • L'applicazione server parla con HSM per l'autenticazione, la crittografia, la decrittografia

I client sono applicazioni mobili (Android, J2ME ecc.) che comunicano con l'applicazione server. Ogni transazione dall'applicazione mobile al server e viceversa deve essere protetta tramite crittografia. Attualmente ciò che facciamo è (senza HSM), nella registrazione del client generiamo una chiave simmetrica e memorizziamo permanentemente sul dispositivo mobile, sul server e la conversazione criptata continua.

Ora, vogliamo utilizzare le chiavi di sessione. Nessuna chiave simmetrica permanente. Il flusso che abbiamo pensato per la generazione e distribuzione di chiavi:

  1. Durante la registrazione del client, l'app mobile genera una coppia di chiavi pubblica-privata e invia CSR (Richiesta di certificato) al server
  2. HSM attraverso Server firma il certificato con la sua chiave privata di root, invia il certificato firmato e il proprio certificato al client. Qui, potremmo considerare l'archiviazione di chiavi pubbliche per ogni cliente in HSM.
  3. All'inizio di ogni sessione, al client viene fornita una chiave di sessione racchiusa nella sua chiave pubblica. Memorizzeremo temporaneamente la chiave di sessione su HSM contro ogni client per la decifrazione della crittografia.

Sta andando bene? Qualcuno può suggerire cosa è standard per questo tipo di scenario?

    
posta Ravi Khakhkhar 08.03.2014 - 12:42
fonte

2 risposte

2

Non capisco il vantaggio dell'utilizzo dei certificati qui. Penso che una soluzione per il tuo problema sia consegnare la tua app mobile con la chiave pubblica del tuo server. Il client e il server possono quindi stabilire una chiave di sessione come segue:

  1. Il client crittografa un nonce casuale con la chiave pubblica del server.
  2. Il server può decodificare questo nonce con la sua chiave privata.
  3. Client e server ora possono derivare una chiave di sessione dal nonce.

Non dimenticare di usare qualcosa come un MAC per garantire l'integrità dei testi cifrati. Senza di esso un aggressore potrebbe manipolare il testo cifrato che potrebbe essere decodificato in un testo in chiaro plausibile.

    
risposta data 12.03.2014 - 22:39
fonte
2

Non è chiaro cosa effettivamente vuoi proteggere usando HSM. Non limitarti a usarli per il gusto di usarli.

Generare certificati client su richiesta non fornisce alcuna sicurezza nel flusso. Se si desidera garantire l'affidabilità di un client, è necessario disporre di certificati preinstallati sui client che è possibile verificare su una connessione.

In uno scenario tipico, generalmente ti piacerebbe usare HSM per proteggere le chiavi private del server. Penso che per le tue esigenze, qualsiasi connessione SSL tra il client e il server, con le chiavi private del server memorizzate su HSM servirà allo scopo. Puoi aggiungere l'autenticazione client e cosa no in base alle tue esigenze.

Non c'è alcun vantaggio in termini di sicurezza nell'archiviazione di chiavi pubbliche su HSM, sono chiavi PUBLIC . Non c'è enorme vantaggio nel tentativo di proteggere le chiavi di sessione su HSM. Esistono solo per una sessione.

    
risposta data 18.02.2015 - 22:11
fonte

Leggi altre domande sui tag