Problemas conocidos de la biblioteca PKCS #11 en AWS CloudHSM - AWS CloudHSM

Problemas conocidos de la biblioteca PKCS #11 en AWS CloudHSM

Los siguientes problemas afectan a la biblioteca PKCS #11 en AWS CloudHSM.

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 en FALSE. No se admitirá que CKA_DERIVE se establezca en TRUE 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 y C_DigestFinal no se implementan. C_SignFinal tampoco se implementa y producirá un error con CKR_ARGUMENTS_BAD en los búferes no NULL.

  • 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 devolver CKA_TEMPLATE_INCONSISTENT cuando la plantilla privada contiene CKA_MODULUS_BITS o CKA_PUBLIC_EXPONENT. En cambio, genera una clave privada en la que todos los campos se establecen en FALSE. 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 usando AES_GCM individualmente. Si utilizas AES_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) para AES-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 operaciones C_EncryptUpdate y C_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 de C_Encrypt

    • C_DecryptInit/C_DecryptUpdate seguido de C_Decrypt

    • C_SignInit/C_SignUpdate seguido de C_Sign

    • C_VerifyInit/C_VerifyUpdate seguido de C_Verify

    • C_FindObjectsInit seguido de C_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 un CKF_RW_SESSION, la llamada fallará y aparecerá el error CKR_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ón C_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.