Uso de claves de confianza en AWS CloudHSM - AWS CloudHSM

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de claves de confianza en AWS CloudHSM

AWS CloudHSM admite el empaquetado de claves confiable para proteger las claves de datos de las amenazas internas. En este tema se describe cómo crear claves de confianza para proteger los datos.

Más información sobre las claves de confianza

Una clave de confianza es una clave que se utiliza para encapsular otras claves y que los administradores y los responsables de criptografía (CO) identifican específicamente como de confianza mediante el atributo CKA_TRUSTED. Además, los administradores y los oficiales de criptografía (CO) utilizan CKA_UNWRAP_TEMPLATE y los atributos relacionados para especificar qué acciones pueden realizar las claves de datos una vez que están encapsuladas en una clave de confianza. Las claves de datos separadas por la clave de confianza también deben contener estos atributos para que la operación de desencapsulamiento se realice correctamente, lo que ayuda a garantizar que las claves de datos no encapsuladas solo estén permitidas para el uso que se pretenda.

Utilice el atributo CKA_WRAP_WITH_TRUSTED para identificar todas las claves de datos que desee encapsular con claves de confianza. De este modo, podrá restringir las claves de datos para que las aplicaciones solo puedan utilizar claves de confianza para desencapsularlas. Una vez establecido este atributo en las claves de datos, el atributo pasa a ser de solo lectura y no se puede modificar. Una vez establecidos estos atributos, las aplicaciones solo pueden desencapsular las claves de datos con las claves en las que confíen, y al desencapsularlas siempre se obtienen claves de datos con atributos que limitan el uso de dichas claves.

Atributos de clave de confianza

Los siguientes atributos permiten marcar una clave como de confianza, especificar que una clave de datos solo se pueda encapsular y desencapsular con una clave de confianza y controlar lo que puede hacer una clave de datos una vez desencapsulada:

  • CKA_TRUSTED: aplique este atributo (además de CKA_UNWRAP_TEMPLATE) a la clave que encapsulará las claves de datos para especificar que un administrador o un oficial de cifrado (CO) ha realizado las diligencias necesarias y confía en esta clave. Solo un administrador o un CO pueden configurar CKA_TRUSTED. El usuario de criptografía (CU) es el propietario de la clave, pero solo un CO puede establecer su atributo CKA_TRUSTED.

  • CKA_WRAP_WITH_TRUSTED: aplique este atributo a una clave de datos exportable para especificar que solo puede encapsular esta clave con claves marcadas como CKA_TRUSTED. Una vez establecido CKA_WRAP_WITH_TRUSTED como true, el atributo pasa a ser de solo lectura y no se puede cambiar ni eliminar.

  • CKA_UNWRAP_TEMPLATE: aplique este atributo a la clave de encapsulamiento (además de CKA_TRUSTED) para especificar los nombres y valores de los atributos que el servicio debe aplicar automáticamente a las claves de datos que desencapsula el servicio. Cuando una aplicación envía una clave para desencapsular, la aplicación también puede proporcionar su propia plantilla de desencapsulamiento. Si especifica una plantilla de desencapsulamiento y la aplicación proporciona su propia plantilla de desencapsulamiento, el HSM utiliza ambas plantillas para aplicar los nombres y valores de los atributos a la clave. Sin embargo, si un valor en la CKA_UNWRAP_TEMPLATE para la clave de encapsulamiento entra en conflicto con un atributo proporcionado por la aplicación durante la solicitud de desencapsulamiento, se produce un error en la solicitud de desencapsulamiento.

Para más información sobre los atributos, consulte los siguientes temas:

Cómo usar claves de confianza para encapsular claves de datos

Para usar una clave de confianza para encapsular una clave de datos, debe completar tres pasos básicos:

  1. Para la clave de datos que planea encapsular con una clave de confianza, defina su atributo CKA_WRAP_WITH_TRUSTED como verdadero.

  2. Para la clave de datos que planea encapsular con una clave de confianza, defina su atributo CKA_TRUSTED como true.

  3. Use la clave de confianza para encapsular la clave de datos.

Paso 1: establezca la clave de datos CKA_WRAP_WITH_TRUSTED como true

Para la clave de datos que desea encapsular, elija una de las siguientes opciones para establecer el atributo CKA_WRAP_WITH_TRUSTED de la clave como true. Esto restringe la clave de los datos para que las aplicaciones solo puedan utilizar claves de confianza para encapsularlos.

Opción 1: si se genera una clave nueva, establezca CKA_WRAP_WITH_TRUSTED como true.

Genere una clave mediante PKCS #11, JCE o CloudHSM CLI. Consulte los siguientes ejemplos para obtener más información.

PKCS #11

Para generar una clave con PKCS #11, debe establecer el atributo CKA_WRAP_WITH_TRUSTED de clave como true. Como se muestra en el siguiente ejemplo, hágalo incluyendo este atributo en el CK_ATTRIBUTE template de la clave y, a continuación, establezca el atributo como true:

CK_BYTE_PTR label = "test_key"; CK_ATTRIBUTE template[] = { {CKA_WRAP_WITH_TRUSTED, &true_val, sizeof(CK_BBOOL)}, {CKA_LABEL, label, strlen(label)}, ... };

Para obtener más información, consulte nuestros ejemplos públicos que muestran la generación de claves con el PKCS #11.

JCE

Para generar una clave con JCE, debe establecer el atributo WRAP_WITH_TRUSTED de la clave en true. Como se muestra en el siguiente ejemplo, hágalo incluyendo este atributo en el KeyAttributesMap de la clave y, a continuación, establezca el atributo como true:

final String label = "test_key"; final KeyAttributesMap keySpec = new KeyAttributesMap(); keySpec.put(KeyAttribute.WRAP_WITH_TRUSTED, true); keySpec.put(KeyAttribute.LABEL, label); ...

Para obtener más información, consulte nuestros ejemplos públicos que muestran la generación de claves con JCE.

CloudHSM CLI

Para generar una clave con la CLI de CloudHSM, debe establecer el atributo wrap-with-trusted de clave como true. Para ello, incluya wrap-with-trusted=true en el argumento apropiado para el comando de generación de claves:

  • En el caso de claves simétricas, añada wrap-with-trusted al argumento attributes.

  • En el caso de las claves públicas, añada wrap-with-trusted al argumento public-attributes.

  • Para claves privadas, añada wrap-with-trusted al argumento private-attributes.

Para más información sobre la generación de pares de claves, consulte clave generate-asymmetric-pair .

Para obtener más información sobre la generación de claves simétricas, consulte key generate-symmetric .

Opción 2: si utiliza una clave existente, utilice la CLI de CloudHSM para establecer su CKA_WRAP_WITH_TRUSTED como true.

Para establecer el atributo CKA_WRAP_WITH_TRUSTED de una clave existente como verdadero, siga estos pasos:

  1. Utilice el comando login para iniciar sesión como usuario de criptografía (CU).

  2. Utilice el comando key set-attribute para establecer el atributo wrap-with-trusted de la clave como verdadero.

    aws-cloudhsm > key set-attribute --filter attr.label=test_key --name wrap-with-trusted --value true { "error_code": 0, "data": { "message": "Attribute set successfully" } }

Paso 2: establecer la clave de confianza CKA_TRUSTED como true

Para convertir una clave en una clave de confianza, su atributo CKA_TRUSTED debe estar establecido como true. Para ello, puede utilizar la CLI de CloudHSM o la utilidad de administración de CloudHSM (CMU).

Paso 3. Uso de la clave de confianza para encapsular la clave de datos

Para encapsular la clave de datos a la que se hace referencia en el paso 1 con la clave de confianza que configuró en el paso 2, consulte los siguientes enlaces para ver ejemplos de código. En cada uno de ellos se muestra cómo encapsular las claves.

¿Cómo desencapsular una clave de datos con una clave de confianza?

Para desencapsular una clave de datos, necesita una clave de confianza que tenga configurado CKA_UNWRAP como true. Para ser una clave de este tipo, también debe cumplir los siguientes criterios:

  • El atributo CKA_TRUSTED de la clave se debe establecer como true.

  • La clave debe utilizar CKA_UNWRAP_TEMPLATE y los atributos relacionados para especificar qué acciones pueden realizar las claves de datos una vez desencapsuladas. Si, por ejemplo, desea que una clave desencapsulada no se pueda exportar, debe configurar CKA_EXPORTABLE = FALSE como parte de CKA_UNWRAP_TEMPLATE.

nota

CKA_UNWRAP_TEMPLATE solo está disponible con PKCS #11.

Cuando una aplicación envía una clave para desencapsularla, también puede proporcionar su propia plantilla de encapsulamiento. Si especifica una plantilla de desencapsulamiento y la aplicación proporciona su propia plantilla de desencapsulamiento, el HSM utiliza ambas plantillas para aplicar los nombres y valores de los atributos a la clave. Sin embargo, si durante la solicitud de desencapsulamiento un valor de CKA_UNWRAP_TEMPLATE de la clave de confianza entra en conflicto con un atributo proporcionado por la aplicación, la solicitud de desencapsulamiento fallará.

Para ver un ejemplo de cómo desencapsular una clave de datos con una clave de confianza, consulte este ejemplo de PKCS #11.