IV personalizados con una longitud no compatible con el empaquetamiento de claves AES en AWS CloudHSM - AWS CloudHSM

IV personalizados con una longitud no compatible con el empaquetamiento de claves AES en AWS CloudHSM

En este tema de solución de problemas aprenderá a detectar si su aplicación genera claves encapsuladas irrecuperables. Si se ve afectado por este problema, utilice este tema para solucionar el problema.

Determine si el código genera claves encapsuladas irrecuperables.

Solo se verás afectado si se dan todas las condiciones que se indican a continuación:

Condición ¿Cómo lo sé?

Su aplicación utiliza la biblioteca PKCS #11.

La biblioteca PKCS #11 se instala como el archivo libpkcs11.so en su carpeta /opt/cloudhsm/lib. Las aplicaciones escritas en lenguaje C suelen utilizar la biblioteca PKCS #11 directamente, mientras que las aplicaciones escritas en Java pueden utilizar la biblioteca indirectamente mediante una capa de abstracción de Java. Si utiliza Windows, esto NO le afecta, ya que la biblioteca PKCS #11 no está disponible actualmente para Windows.

Su aplicación usa específicamente la versión 3.0.0 de la biblioteca PKCS #11.

Si ha recibido un correo electrónico del equipo de AWS CloudHSM, es probable que esté utilizando la versión 3.0.0 de la biblioteca PKCS #11.

Para comprobar la versión del software en las instancias de su aplicación, utilice este comando:

rpm -qa | grep ^cloudhsm

Las claves se encapsulan mediante el encapsulamiento de claves AES.

El encapsulamiento de claves AES significa que se utiliza una clave AES para encapsular alguna otra clave. El nombre del mecanismo correspondiente es CKM_AES_KEY_WRAP. Se usa con la función C_WrapKey. Otros mecanismos de encapsulamiento basados en AES que utilizan vectores de inicialización (IV), como CKM_AES_GCM y CKM_CLOUDHSM_AES_GCM, no se ven afectados por este problema. Obtenga más información sobre funciones y mecanismos.

Se especifica un IV personalizado al solicitar el encapsulamiento de claves AES, y la longitud de este IV es inferior a 8

El encapsulamiento de claves AES generalmente se inicializa con una estructura de CK_MECHANISM como la siguiente:

CK_MECHANISM mech = {CKM_AES_KEY_WRAP, IV_POINTER, IV_LENGTH};

Esta cuestión solo le afecta a usted si:

  • IV_POINTER no es NULL

  • IV_LENGTH tiene menos de 8 bytes

Si no se dan todas las condiciones anteriores, puede dejar de leer. Las claves encapsuladas se pueden desencapsular correctamente y este problema no le afecta. De lo contrario, consulte Acciones que debe adoptar si su código genera claves encapsuladas irrecuperables.

Acciones que debe adoptar si su código genera claves encapsuladas irrecuperables

Debe seguir los tres pasos siguientes:

  1. Actualice inmediatamente su biblioteca PKCS #11 a una versión más reciente.

  2. Actualice su software para usar un IV que cumpla con los estándares

    Le recomendamos encarecidamente que siga nuestro ejemplo de código y simplemente especifique un IV NULO, lo que provocará que el HSM utilice el IV predeterminado que cumple con los estándares. Como alternativa, puede especificar explícitamente el IV como 0xA6A6A6A6A6A6A6A6 con una longitud de IV correspondiente de 8. No recomendamos utilizar ningún otro IV para el encapsulamiento de claves AES y deshabilitaremos explícitamente los IV personalizados para el encapsulamiento de claves AES en una futura versión de la biblioteca PKCS #11.

    El código de muestra para especificar correctamente el IV aparece en aes_wrapping.c en GitHub.

  3. Identifique y recupere las claves encapsuladas existentes.

    Debe identificar las claves que encapsuló con la versión 3.0.0 de la biblioteca PKCS #11 y, a continuación, ponerse en contacto con el servicio de asistencia para obtener ayuda (https://aws.amazon.com/support) a la hora de recuperar estas claves.

importante

Este problema solo afecta a las claves encapsuladas en la versión 3.0.0 de la biblioteca PKCS #11. Puede encapsular las claves utilizando versiones anteriores (2.0.4 y paquetes con números inferiores) o versiones posteriores (3.0.1 y paquetes con números superiores) de la biblioteca PKCS #11.