Al usar un HSM basado en (PKCS # 11) (para S / Mime o PGP), el HSM realiza las operaciones de clave pública para firmar o descifrar, de modo que la clave nunca debe abandonar el entorno protegido. La parte masiva de esas operaciones (para firmar esto es la creación del resumen y para el cifrado, este es el cifrado simétrico) puede ser realizada por el host.
Sin embargo, me di cuenta de que la mayoría de las implementaciones de PKCS # 11 (incluso las tarjetas inteligentes lentas) también ofrecen cifrados simétricos e incluso hash. Puedo ver razones para eso:
- utilizando la interfaz criptográfica y la implementación del hardware, se puede reclamar (endurecido) el cumplimiento de FIPS
- al enviar todos los byes en lugar de un resumen sin formato basado en el atacante al componente, reduce los ataques con textos cifrados conocidos (para RSA)
- al permitir que el HSM genere o derive la clave de sesión, nunca se expone (¿realmente se admite?)
- aprovechando las fuentes de números aleatorios de hardware para la generación de claves
Sin embargo, hay algunas cosas que realmente no tienen sentido, así que me pregunto qué es la mejor práctica (principalmente para definir qué configurabilidad debería ofrecer):
- No he visto una operación de "cifrar clave de sesión aleatoria con RSA y usarla para AES" en PKCS # 11, por lo que esta protección esperada no existe. ¿O me estoy perdiendo algo?
- Creo que para firmar el hash se puede descargar, pero parece que la mayoría de los HSM no me permiten cerrar el ataque del "resumen sin formato" y no tengo forma de restringir una clave de firma a una operación segura de RSA (relleno).
- mientras que los HSM afirman que el rendimiento mejorado del hardware, especialmente para las operaciones masivas, no puede mantenerse al día con las CPU modernas de uso general (especialmente si los datos deben transferirse a través de la interfaz de red con mensajes seguros al HSM, solo los coprocesadores o soluciones PCI puede ser más rápido). Así que rara vez hay una ventaja de velocidad.
Así que me pregunto, con los HSM, ¿es común permitir especificar dos proveedores o hacer que sea configurable para recurrir a las operaciones masivas locales? Revisé algunas herramientas y la mayoría de ellas me permiten configurar el motor criptográfico para toda la aplicación u operación (como "hash + signo"). Casi nunca he visto un archivo de configuración donde pueda decir "para RSA use X y para SHA use y". ¿Sospecho que la mayoría volverá al hash predeterminado (local) si se selecciona un mecanismo sin hash? ¿La gente está feliz con eso?