Generar una clave simétrica de AWS CloudHSM con la KMU
Use el comando genSymKey de la herramienta key_mgmt_util del AWS CloudHSM para generar un clave simétrica en sus módulos de seguridad de hardware (HSM). Puede especificar el tipo y el tamaño de la clave, asignar un ID y una etiqueta, y compartir la clave con otros usuarios de HSM. También puede crear claves que no se pueden extraer y claves que caducan al finalizar la sesión. Cuando el comando se ejecuta correctamente, devuelve un identificador de clave que el HSM asigna a la clave. Puede utilizar el identificador de clave para identificar la clave ante otros comandos.
Antes de ejecutar cualquier comando de key_mgmt_util, debe iniciar key_mgmt_util e lniciar sesión en el HSM como usuario de criptografía (CU).
Sintaxis
genSymKey -h genSymKey -t<key-type>-s<key-size>-l<label>[-id<key-ID>] [-min_srv<minimum-number-of-servers>] [-m_value<0..8>] [-nex] [-sess] [-timeout<number-of-seconds>] [-u<user-ids>] [-attest]
Ejemplos
En estos ejemplos, se muestra cómo se utiliza genSymKey para crear claves simétricas en los HSM.
sugerencia
Para usar las claves que crea con estos ejemplos para las operaciones de HMAC, debe establecer OBJ_ATTR_SIGN y OBJ_ATTR_VERIFY como TRUE después de generar la clave. Para establecer estos valores, utilice setAttribute en la Utilidad de administración de CloudHSM (CMU). Para obtener más información, consultesetAttribute.
ejemplo Generación de una clave AES
Este comando crea una clave AES de 256 bits con una etiqueta aes256. El resultado muestra que el identificador de clave de la clave nueva es 6.
Command:genSymKey -t 31 -s 32 -l aes256Cfm3GenerateSymmetricKey returned: 0x00 : HSM Return: SUCCESS Symmetric Key Created. Key Handle: 6 Cluster Error Status Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
ejemplo : creación de una clave de sesión
Este comando crea una clave AES de 192 bits no extraíble que es válida únicamente en la sesión actual. Puede que desee crear una clave como esta para encapsular (y, a continuación, desencapsular inmediatamente) una clave que se está exportando.
Command:genSymKey -t 31 -s 24 -l tmpAES -id wrap01 -nex -sess
ejemplo : regreso rápido
Este comando crea una clave de 512 bytes genéricos con una etiqueta IT_test_key. El comando no espera a que la clave se sincronice en todos los HSM en el clúster. En su lugar, regresa tan pronto como se crea la clave en cualquier HSM (-min_srv 1) o en 1 segundo (-timeout 1), el periodo que sea más corto. Si la clave no se sincroniza con el número mínimo especificado de HSM antes de que venza el tiempo de espera, no se genera. Es posible que desee utilizar un comando como este en un script que crea numerosas claves, como el bucle for del siguiente ejemplo.
Command:genSymKey -t 16 -s 512 -l IT_test_key -min_srv 1 -timeout 1$for i in {1..30}; do /opt/cloudhsm/bin/key_mgmt_util singlecmd loginHSM -u CU -s example_user -p example_pwd genSymKey -l aes -t 31 -s 32 -min_srv 1 -timeout 1; done;
ejemplo : creación de una clave genérica autorizada mediante cuórum
Este comando crea una clave secreta genérica de 2048 bits con la etiqueta generic-mV2. El comando utiliza el parámetro -u para compartir la clave con otro CU, el usuario 6. Utiliza el parámetro -m_value para solicitar un cuórum de al menos dos aprobaciones para cualquier operación criptográfica que utilice la clave. El comando también utiliza el parámetro -attest para verificar la integridad del firmware en el que se genera la clave.
El resultado muestra que el comando generó una clave con identificador de clave 9 y que se ha superado la comprobación de declaración del firmware del clúster.
Command:genSymKey -t 16 -s 2048 -l generic-mV2 -m_value 2 -u 6 -attestCfm3GenerateSymmetricKey returned: 0x00 : HSM Return: SUCCESS Symmetric Key Created. Key Handle: 9 Attestation Check : [PASS] Cluster Error Status Node id 1 and err state 0x00000000 : HSM Return: SUCCESS Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
ejemplo :creación y examen de una clave
Este comando crea una clave Triple DES con una etiqueta 3DES_shared y un ID de IT-02. La clave la pueden utilizar el usuario actual y los usuarios 4 y 5. Se produce un error en el comando si el ID no es único en el clúster o si el usuario actual es el usuario 4 o el usuario 5.
El resultado muestra que la clave nueva tiene el identificador de clave 7.
Command:genSymKey -t 21 -s 24 -l 3DES_shared -id IT-02 -u 4,5Cfm3GenerateSymmetricKey returned: 0x00 : HSM Return: SUCCESS Symmetric Key Created. Key Handle: 7 Cluster Error Status Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
Para verificar que la clave 3DES nueva es propiedad del usuario actual y se comparte con los usuarios 4 y 5, utilice getKeyInfo. El comando utiliza el identificador que se asignó a la clave nueva (Key Handle: 7).
El resultado confirma que la clave es propiedad del usuario 3 y se comparte con los usuarios 4 y 5.
Command:getKeyInfo -k 7Cfm3GetKey returned: 0x00 : HSM Return: SUCCESS Owned by user 3 also, shared to following 2 user(s): 4, 5
Para confirmar el resto de las propiedades de la clave, utilice getAttribute. El primer comando utiliza getAttribute para obtener todos los atributos (-a 512) del identificador de clave 7 (-o 7). Los escribe en el archivo attr_7. El segundo comando utiliza cat para obtener el contenido del archivo attr_7.
Este comando confirma que la clave 7 es una clave simétrica de 192 bits (OBJ_ATTR_VALUE_LEN
0x00000018 o 24 bytes) 3DES (OBJ_ATTR_KEY_TYPE 0x15) (OBJ_ATTR_CLASS 0x04) con una etiqueta 3DES_shared (OBJ_ATTR_LABEL 3DES_shared) y un ID IT_02 (OBJ_ATTR_ID
IT-02). La clave es persistente (OBJ_ATTR_TOKEN 0x01) y extraíble (OBJ_ATTR_EXTRACTABLE 0x01) y se puede utilizar para el cifrado, el descifrado y el encapsulado.
sugerencia
Para buscar los atributos de una clave que haya creado, como tipo, longitud, etiqueta e ID, use getAttribute. Para buscar las claves de un usuario concreto, utilice getKeyInfo. Para buscar claves en función de sus valores de atributo, use findKey.
Para obtener ayuda para interpretar los atributos de clave, consulte la Referencia de atributos de claves de AWS CloudHSM para la KMU.
Command:getAttribute -o 7 -a 512 -out attr_7got all attributes of size 444 attr cnt 17 Attributes dumped into attr_7 file Cfm3GetAttribute returned: 0x00 : HSM Return: SUCCESS$cat attr_7OBJ_ATTR_CLASS 0x04 OBJ_ATTR_KEY_TYPE 0x15 OBJ_ATTR_TOKEN 0x01 OBJ_ATTR_PRIVATE 0x01 OBJ_ATTR_ENCRYPT 0x01 OBJ_ATTR_DECRYPT 0x01 OBJ_ATTR_WRAP 0x00 OBJ_ATTR_UNWRAP 0x00 OBJ_ATTR_SIGN 0x00 OBJ_ATTR_VERIFY 0x00 OBJ_ATTR_LOCAL 0x01 OBJ_ATTR_SENSITIVE 0x01 OBJ_ATTR_EXTRACTABLE 0x01 OBJ_ATTR_LABEL 3DES_shared OBJ_ATTR_ID IT-02 OBJ_ATTR_VALUE_LEN 0x00000018 OBJ_ATTR_KCV 0x59a46e
sugerencia
Para usar las claves que crea con estos ejemplos para las operaciones de HMAC, debe establecer OBJ_ATTR_SIGN y OBJ_ATTR_VERIFY como TRUE después de generar la clave. Para establecer estos valores, utilice setAttribute en CMU. Para obtener más información, consultesetAttribute.
Parámetros
- -h
-
Muestra ayuda para el comando.
Obligatorio: sí
- -t
-
Especifica el tipo de clave simétrica. Escriba la constante que representa el tipo de clave. Por ejemplo, para crear una clave AES, escriba
-t 31.Valores válidos:
-
16: GENERIC_SECRET
. Una clave secreta genérica es una matriz de bytes que no se ajusta a ningún estándar en particular, como, por ejemplo, los requisitos de una clave AES. -
18: RC4
. Las claves RC4 no son válidas en los HSM en modo FIPS -
21: Triple DES (3DES)
. De acuerdo con las directrices del NIST, esto no se permite en los clústeres en modo FIPS después de 2023. En el caso de los clústeres en modo no FIPS, seguirá siendo posible después de 2023. Para obtener más información, consulte Cumplimiento de la normativa FIPS 140: anulación de mecanismo 2024. -
31: AES
Obligatorio: sí
-
- -s
-
Especifica el tamaño de la clave en bytes. Por ejemplo, para crear una clave de 192 bits, escriba
24.Valores válidos para cada tipo de clave:
-
AES: 16 (128 bits), 24 (192 bits), 32 (256 bits)
-
3DES: 24 (192 bits)
-
Secreta genérica: <3584 (28672 bits)
Obligatorio: sí
-
- -l
-
Especifica una etiqueta definida por el usuario para la clave. Tipo de cadena.
Puede utilizar cualquier frase que le ayude a identificar la clave. La etiqueta no tiene por qué ser única, por lo que puede usarla para agrupar y clasificar las claves.
Obligatorio: sí
- -attest
Ejecuta una comprobación de integridad que verifica que el firmware en el que se ejecuta el clúster no haya sufrido alguna manipulación.
Predeterminado: sin comprobación de certificación.
Obligatorio: no
- -id
-
Especifica un identificador definido por el usuario para la clave. Escriba una cadena que sea única en el clúster. El valor predeterminado es una cadena vacía.
Predeterminado: sin valor de ID.
Obligatorio: no
- -min_srv
-
Especifica el número mínimo de HSM en los que la clave importada se sincroniza antes de que caduque el valor del parámetro
-timeout. Si la clave no está sincronizada con el número especificado de servidores en el tiempo asignado, no se creará.AWS CloudHSM sincroniza automáticamente cada clave con cada HSM del clúster. Para acelerar el proceso, establezca el valor de
min_srven un número menor que el de HSM del clúster y establezca un valor bajo de tiempo de espera. Sin embargo, tenga en cuenta que puede que algunas solicitudes no generen ninguna clave.Predeterminado: 1
Obligatorio: no
- -m_value
-
Especifica el número de usuarios que deben aprobar cualquier operación criptográfica que utilice la clave. Escriba un valor de
0a8.Este parámetro establece un requisito de autenticación de quórum para la clave. El valor predeterminado,
0, deshabilita la característica de autenticación de cuórum para la clave. Cuando la autenticación de quórum está activada, el número especificado de usuarios debe firmar un token para aprobar las operaciones criptográficas que utilizan la clave, y las operaciones que comparten o dejan de compartir la clave.Para encontrar el
m_valuede una clave, use getKeyInfo.Este parámetro solo es válido cuando el parámetro
-udel comando comparte la clave con suficientes usuarios para satisfacer el requisitom_value.Predeterminado: 0
Obligatorio: no
- -nex
-
Hace que la clave no se pueda extraer. La clave que se genera no se puede exportar desde el HSM.
Predeterminado: la clave se puede extraer.
Obligatorio: no
- -sess
-
Crea una clave que solo existe en la sesión actual. La clave no se podrá recuperar una vez finalizada la sesión.
Utilice este parámetro cuando necesite una clave solo brevemente, por ejemplo, una clave de encapsulamiento que cifre y, a continuación, descifre rápidamente otra clave. No utilice una clave de sesión para cifrar los datos que pueda necesitar descifrar una vez finalizada la sesión.
Para cambiar una clave de sesión por una clave persistente (token), use setAttribute.
Predeterminado: la clave es persistente.
Obligatorio: no
- -timeout
-
Especifica cuánto tiempo (en segundos) espera el comando para que una clave se sincronice con el número de HSM especificado por el parámetro
min_srv.Este parámetro solo es válido cuando también se usa el parámetro
min_srven el comando.Predeterminado: sin tiempo de espera predeterminado. El comando espera indefinidamente y solo vuelve a aparecer cuando la clave está sincronizada con el número mínimo de servidores.
Obligatorio: no
- -u
-
Comparte la clave con los usuarios especificados. Este parámetro concede permiso a otros usuarios de criptografía (CU) de HSM para usar esta clave en operaciones criptográficas.
Escriba una lista separada por comas de los ID de usuario de HSM, como -
u 5,6. No incluya el ID de usuario de HSM del usuario actual. Para buscar los ID de usuario de HSM de los CU del HSM, utilice listUsers. Para compartir o dejar de compartir una clave existente, utilice shareKey en cloudhsm_mgmt_util.Predeterminado: solo el usuario actual puede utilizar la clave.
Obligatorio: no