Estamos planeando implementar HSM con nuestra aplicación. La solución que estamos pensando es:
- Las aplicaciones móviles se comunican con la aplicación del servidor,
- La aplicación del servidor se comunica con HSM para las autenticaciones, el cifrado y el descifrado
Los clientes son aplicaciones móviles (Android, J2ME, etc.) que se comunican con la aplicación del servidor. Todas las transacciones, desde la aplicación móvil al servidor y viceversa, deben protegerse mediante el cifrado. Actualmente, lo que hacemos es (sin HSM), en el registro del cliente generamos una clave simétrica y almacenamos permanentemente en el dispositivo móvil, el servidor y luego la conversación encriptada continúa.
Ahora, queremos emplear claves de sesión. No hay llave simétrica permanente. El flujo que hemos pensado para la generación de claves y distribuciones:
- En el registro del cliente, la aplicación móvil genera un par de claves público-privadas y envía el CSR (solicitud de certificado) al servidor
- El HSM a través del servidor firma el certificado con su clave privada raíz, envía el certificado firmado y su propio certificado al cliente. Aquí, podemos considerar el almacenamiento de claves públicas para cada cliente en HSM.
- Al comienzo de cada sesión, al cliente se le daría una clave de sesión envuelta en su clave pública. Estaríamos almacenando la clave de sesión temporal en HSM contra cada cliente para el cifrado de cifrado.
¿Se ve bien? ¿Alguien puede sugerir cuál es el estándar para este tipo de escenario?