Problemas conocidos de la biblioteca PKCS #11 en AWS CloudHSM
Los siguientes problemas afectan a la biblioteca PKCS #11 en AWS CloudHSM.
Temas
- Problema: el encapsulamiento de la clave AES de la versión 3.0.0 de la biblioteca PKCS #11 no valida los IV antes de usarlos.
- Problema: el SDK 2.0.4 de PKCS #11 y las versiones anteriores siempre usaban el IV predeterminado de 0xA6A6A6A6A6A6A6A6 para el encapsulado y desencapsulado de claves AES.
- Problema: el atributo CKA_DERIVE no se admitía y no se gestionaba.
- Problema: el atributo CKA_SENSITIVE no se admitía y no se gestionaba.
- Problema: la función hash multiparte y la firma no son compatibles.
- Problema: C_GenerateKeyPair no gestiona CKA_MODULUS_BITS ni CKA_PUBLIC_EXPONENT en la plantilla privada de una forma que cumpla con los estándares.
- Problema: los búferes para las operaciones C_Encrypt y C_Decrypt API no pueden superar los 16 KB cuando se utiliza el mecanismo CKM_AES_GCM.
- Problema: la derivación de claves Diffie-Hellman (ECDH) de curva elíptica se ejecuta parcialmente en el HSM.
- Problema: la verificación de firmas secp256k1 produce un error en las plataformas EL6 como CentOS6 y RHEL 6
- Problema: la secuencia incorrecta de las llamadas a las funciones arroja resultados indefinidos en lugar de fallar.
- Problema: la sesión de solo lectura no es compatible con el SDK 5
- Problema: el archivo de encabezado cryptoki.h es solo para Windows.
Problema: el encapsulamiento de la clave AES de la versión 3.0.0 de la biblioteca PKCS #11 no valida los IV antes de usarlos.
Si especifica un vector de inicialización menor que 8 bytes de longitud, se rellena con bytes impredecibles antes de su uso.
nota
Esto afecta a C_WrapKey
solo con el mecanismo CKM_AES_KEY_WRAP
.
Impacto: si proporciona un IV que es más corto que 8 bytes en la versión 3.0.0 de la biblioteca PKCS #11, es posible que no pueda desencapsular la clave.
Soluciones provisionales:
Le recomendamos encarecidamente que actualice a la versión 3.0.1 o superior de la biblioteca PKCS #11, que aplica correctamente la longitud IV durante el encapsulamiento de claves AES. Modifique su código de encapsulado para pasar un vector de inicialización NULO, o especifique el vector de inicialización predeterminado de
0xA6A6A6A6A6A6A6A6
. Para obtener más información, consulte IV personalizados con longitud no conforme para encapsulamiento de clave AES.Si ha envuelto alguna clave con la versión 3.0.0 de la biblioteca PKCS #11 utilizando un IV inferior a 8 bytes, póngase en contacto con nosotros para obtener ayuda
.
Estado de resolución: este problema se ha resuelto en la versión 3.0.1 de la biblioteca PKCS #11. Para ajustar claves mediante el encapsulado de claves AES, especifique un vector de inicialización que sea NULO o de 8 bytes de longitud.
Problema: el SDK 2.0.4 de PKCS #11 y las versiones anteriores siempre usaban el IV predeterminado de 0xA6A6A6A6A6A6A6A6
para el encapsulado y desencapsulado de claves AES.
Los vectores de inicialización proporcionados por el usuario se han ignorado de forma silenciosa.
nota
Esto afecta a C_WrapKey
solo con el mecanismo CKM_AES_KEY_WRAP
.
Impacto:
Si utilizó el SDK de PKCS #11 2.0.4 o una versión anterior y un vector de inicialización proporcionado por el usuario, las claves se encapsulan con el vector de inicialización predeterminado de
0xA6A6A6A6A6A6A6A6
.Si utilizó el SDK de PKCS #11 3.0.0 o posterior y un vector de inicialización proporcionado por el usuario, las claves se encapsulan con el vector de inicialización proporcionado por el usuario.
Soluciones provisionales:
Para desencapsular las claves encapsuladas con el SDK de PKCS #11 2.0.4 o anterior, utilice el vector de inicialización predeterminado de
0xA6A6A6A6A6A6A6A6
.Para desencapsular claves encapsuladas con el SDK de PKCS #11 3.0.0 o posterior, utilice el vector de inicialización proporcionado por el usuario.
Estado de resolución: le recomendamos que modifique el código de encapsulado y desencapsulado para pasar un vector de inicialización NULO o que especifique el vector de inicialización predeterminado de
0xA6A6A6A6A6A6A6A6
.
Problema: el atributo CKA_DERIVE
no se admitía y no se gestionaba.
-
Estado de resolución: hemos implementado correcciones para aceptar
CKA_DERIVE
si se ha establecido enFALSE
. No se admitirá queCKA_DERIVE
se establezca enTRUE
hasta que comencemos a añadir compatibilidad con la función de derivación de claves en AWS CloudHSM. Debe actualizar el cliente y los SDK a la versión 1.1.1 o posterior para beneficiarse de la corrección.
Problema: el atributo CKA_SENSITIVE
no se admitía y no se gestionaba.
-
Estado de resolución: hemos implementado correcciones para aceptar y procesar correctamente el atributo
CKA_SENSITIVE
. Debe actualizar el cliente y los SDK a la versión 1.1.1 o posterior para beneficiarse de la corrección.
Problema: la función hash multiparte y la firma no son compatibles.
-
Impacto:
C_DigestUpdate
yC_DigestFinal
no se implementan.C_SignFinal
tampoco se implementa y producirá un error conCKR_ARGUMENTS_BAD
en los búferes noNULL
. -
Solución: aplique la función hash a sus datos dentro de la aplicación y use AWS CloudHSM solamente para firmar el hash.
-
Estado de resolución: estamos corrigiendo el cliente y los SDK para implementar correctamente la función hash multiparte. Las actualizaciones se anunciarán en el foro de AWS CloudHSM y en la página de historial de versiones.
Problema: C_GenerateKeyPair
no gestiona CKA_MODULUS_BITS
ni CKA_PUBLIC_EXPONENT
en la plantilla privada de una forma que cumpla con los estándares.
-
Impacto:
C_GenerateKeyPair
debe devolverCKA_TEMPLATE_INCONSISTENT
cuando la plantilla privada contieneCKA_MODULUS_BITS
oCKA_PUBLIC_EXPONENT
. En cambio, genera una clave privada en la que todos los campos se establecen enFALSE
. La clave no se puede usar. -
Solución: recomendamos que su aplicación compruebe los valores del campo de uso además del código de error.
-
Estado de resolución: estamos implementado soluciones para devolver el mensaje de error correcto cuando se usa una plantilla de clave privada incorrecta. La biblioteca PKCS #11 actualizada se anunciará en la página de historial de versiones.
Problema: los búferes para las operaciones C_Encrypt
y C_Decrypt
API no pueden superar los 16 KB cuando se utiliza el mecanismo CKM_AES_GCM
.
AWS CloudHSM no admite el cifrado AES-GCM multiparte.
-
Impacto: no puede usar el mecanismo
CKM_AES_GCM
para cifrar datos mayores de 16 KB. -
Solución: puede usar un mecanismo alternativo como
CKM_AES_CBC
,CKM_AES_CBC_PAD
o puede dividir los datos en partes y cifrar cada parte usandoAES_GCM
individualmente. Si utilizasAES_GCM
, debes gestionar la división de tus datos y su posterior cifrado. AWS CloudHSM no realiza el cifrado AES-GCM multiparte por ti. Tenga en cuenta que FIPS exige que el vector de inicialización (IV) paraAES-GCM
se genere en el HSM. Por lo tanto, el IV será diferente para cada parte de sus datos con cifrado AES-GCM. -
Estado de resolución: estamos corrigiendo los SDK para que produzcan un error de forma explícita si el búfer de datos es demasiado grande. Se devuelve
CKR_MECHANISM_INVALID
para las API de operacionesC_EncryptUpdate
yC_DecryptUpdate
. Estamos evaluando alternativas para admitir búferes más grandes sin recurrir al cifrado multiparte. Las actualizaciones se anunciarán en el foro de AWS CloudHSM y en la página de historial de versiones.
Problema: la derivación de claves Diffie-Hellman (ECDH) de curva elíptica se ejecuta parcialmente en el HSM.
Su clave privada EC permanece dentro del HSM en todo momento, pero el proceso de generación de la clave se realiza en varios pasos. Como resultado, los resultados intermedios de cada paso están disponibles en el cliente.
-
Impacto: en Client SDK 3, la clave derivada del mecanismo
CKM_ECDH1_DERIVE
está disponible primero en el cliente y, a continuación, se importa al HSM. Un identificador de clave se devuelve después a su aplicación. -
Solución: si implementa una descarga de SSL/TLS en AWS CloudHSM, es posible que esta limitación no represente un problema. Si su aplicación requiere que su clave permanezca dentro de un límite FIPS en todo momento, considere el uso de un protocolo alternativo que no se base en la generación de la clave ECDH.
-
Estado de resolución: desarrollamos la opción para llevar a cabo la generación de la clave ECDH en su totalidad dentro del HSM. La implementación actualizada se anunciará en la página de historial de versiones una vez que esté disponible.
Problema: la verificación de firmas secp256k1 produce un error en las plataformas EL6 como CentOS6 y RHEL 6
Esto se debe a que la biblioteca PKCS #11 de CloudHSM impide que se realice una llamada de red durante la inicialización de la operación de verificación mediante el uso de OpenSSL para verificar los datos de la curva de EC. Como Secp256k1 no es compatible con el paquete OpenSSL en las plataformas EL6, la inicialización produce un error.
-
Impacto: la verificación de firmas Secp256k1 producirá un error en las plataformas EL6. La llamada de verificación producirá el error
CKR_HOST_MEMORY
. -
Solución: le recomendamos que utilice Amazon Linux 1 o cualquier plataforma EL7 si su aplicación PKCS # 11 necesita verificar firmas secp256k1. Otra solución consiste en actualizar a una versión del paquete OpenSSL que admita la curva secp256k1.
-
Estado de resolución: estamos implementando correcciones para revertir al HSM si la validación de curvas locales no está disponible. La biblioteca de PKCS #11 actualizada se anunciará en la página de historial de versiones.
Problema: la secuencia incorrecta de las llamadas a las funciones arroja resultados indefinidos en lugar de fallar.
-
Impacto: si llama a una secuencia de funciones incorrecta, el resultado final es incorrecto aunque las llamadas individuales a las funciones se devuelvan correctamente. Por ejemplo, es posible que los datos descifrados no coincidan con el texto no cifrado original o que las firmas no se puedan verificar. Este problema afecta tanto a las operaciones de una sola parte como a las de varias partes.
Ejemplos de secuencias de funciones incorrectas:
C_EncryptInit
/C_EncryptUpdate
seguido deC_Encrypt
C_DecryptInit
/C_DecryptUpdate
seguido deC_Decrypt
C_SignInit
/C_SignUpdate
seguido deC_Sign
C_VerifyInit
/C_VerifyUpdate
seguido deC_Verify
C_FindObjectsInit
seguido deC_FindObjectsInit
Solución alternativa: su aplicación debe, de conformidad con la especificación PKCS #11, utilizar la secuencia correcta de llamadas a funciones tanto para las operaciones de una sola parte como para las de varias partes. En estas circunstancias, su aplicación no debe confiar en la biblioteca de CloudHSM PKCS #11 para devolver un error.
Problema: la sesión de solo lectura no es compatible con el SDK 5
-
Problema: el SDK 5 no admite la apertura de sesiones de solo lectura con
C_OpenSession
. -
Impacto: si intenta llamar a
C_OpenSession
sin proporcionar unCKF_RW_SESSION
, la llamada fallará y aparecerá el errorCKR_FUNCTION_FAILED
. -
Solución alternativa: al abrir una sesión, debe pasar los marcadores de
CKF_SERIAL_SESSION | CKF_RW_SESSION
a la llamada de funciónC_OpenSession
.
Problema: el archivo de encabezado cryptoki.h
es solo para Windows.
-
Problema: en las versiones 5.0.0 a 5.4.0 del SDK 5 de cliente de AWS CloudHSM en Linux, el archivo de encabezado
/opt/cloudhsm/include/pkcs11/cryptoki.h
solo es compatible con los sistemas operativos Windows. -
Impacto: en los sistemas operativos basados en Linux, es posible que se produzcan problemas al intentar incluir este archivo de encabezado en la aplicación.
-
Estado de la resolución: actualice a la versión 5.4.1 o superior del AWS CloudHSM SDK 5 de cliente, que incluye una versión de este archivo de encabezado compatible con Linux.