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:
- Durante la registrazione del client, l'app mobile genera una coppia di chiavi pubblica-privata e invia CSR (Richiesta di certificato) al server
- 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.
- 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?