Importar una clave simétrica en texto plano con la KMU de AWS CloudHSM
Use el comando imSymKey de la herramienta key_mgmt_util del AWS CloudHSM para importar una copia en texto plano de una clave simétrica desde un archivo al módulo de seguridad de hardware (HSM). Puede utilizarlo para importar claves que genera con cualquier método fuera del HSM y las claves que se exportaron desde un HSM, como, por ejemplo, las claves que el comando exSymKey escribe en un archivo.
Durante el proceso de importación imSymKey utiliza la clave AES seleccionada (la clave de encapsulación) para encapsular (cifrar) y, a continuación desencapsular (descifrar) la clave que se va a importar. Sin embargo, imSymKey funciona solo en archivos que contienen claves no cifradas. Para exportar e importar claves cifradas, utilice los comandos wrapKey y unWrapKey.
Además, el comando imSymKey importa únicamente claves simétricas. Para importar claves públicas, utilice importPubKey. Para importar claves privadas, utilice importPrivateKey o wrapKey.
nota
No puede importar una clave PEM protegida con contraseña mediante una clave simétrica o privada.
Las claves importadas funcionan de forma muy parecida a las claves que se generan en el HSM. Sin embargo, el valor del atributo OBJ_ATTR_LOCAL es cero, lo que indica que no se generó localmente. Puede utilizar el siguiente comando para compartir una clave simétrica al importarla. Puede utilizar el comando shareKey
de cloudhsm_mgmt_util para compartir la clave después de importarla.
imSymKey -l aesShared -t 31 -f kms.key -w 3296 -u 5
Después de importar una clave, asegúrese de marcar o eliminar el archivo de clave. Este comando no le impide importar el mismo material de claves varias veces. El resultado, es decir, varias claves con diferentes identificadores de clave y el mismo material de claves, dificulta el seguimiento del uso del material relacionado con las claves e impide que supere sus límites criptográficos.
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
imSymKey -h imSymKey -f <key-file> -w <wrapping-key-handle> -t <key-type> -l <label> [-id <key-ID>] [-sess] [-wk <wrapping-key-file> ] [-attest] [-min_srv <minimum-number-of-servers>] [-timeout <number-of-seconds> ] [-u <user-ids>]
Ejemplos
En los ejemplos siguientes se muestra cómo utilizar imSymKey para importar claves simétricas a sus HSM.
ejemplo : importar una clave simétrica AES
En este ejemplo se utiliza imSymKey para importar una clave simétrica AES a HSM.
El primer comando utiliza OpenSSL para generar una clave simétrica AES de 256 bits aleatoria. Guarda la clave en el archivo aes256.key
.
$
openssl rand -out aes256-forImport.key 32
El segundo comando utiliza imSymKey para importar la clave AES desde el archivo aes256.key
hasta los HSM. Utiliza la clave 20, una clave AES del HSM, como clave de encapsulación y especifica una etiqueta de tipo imported
. A diferencia del ID, no es necesario que la etiqueta sea única en el clúster. El valor del parámetro -t
(tipo) es 31
, que representa AES.
La salida muestra que la clave del archivo se encapsuló y se desencapsuló y después se importó al HSM, donde se asignó al identificador de clave 262180.
Command:
imSymKey -f aes256.key -w 20 -t 31 -l imported
Cfm3WrapHostKey returned: 0x00 : HSM Return: SUCCESS Cfm3CreateUnwrapTemplate returned: 0x00 : HSM Return: SUCCESS Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS Symmetric Key Unwrapped. Key Handle: 262180 Cluster Error Status Node id 1 and err state 0x00000000 : HSM Return: SUCCESS Node id 0 and err state 0x00000000 : HSM Return: SUCCESS Node id 2 and err state 0x00000000 : HSM Return: SUCCESS
El siguiente comando utiliza getAttribute para obtener el atributo OBJ_ATTR_LOCAL (atributo 355) de la clave que acaba de importar y lo escribe en el archivo attr_262180
.
Command:
getAttribute -o 262180 -a 355 -out attributes/attr_262180
Attributes dumped into attributes/attr_262180_imported file Cfm3GetAttribute returned: 0x00 : HSM Return: SUCCESS
Cuando examine el archivo de atributos, verá que el valor del atributo OBJ_ATTR_LOCAL
es cero, lo que indica que el material de clave no se ha generado en el HSM.
$
cat attributes/attr_262180_local
OBJ_ATTR_LOCAL 0x00000000
ejemplo : desplazamiento de una clave simétrica entre clústeres
En este ejemplo, se muestra cómo utilizar exSymKey e imSymKey para mover una clave AES sin cifrar entre clústeres. Se puede utilizar un proceso como este para crear una encapsulación AES que exista en los HSM de ambos clústeres. Cuando la clave de encapsulación compartida esté en vigor, podrá utilizar wrapKey y unWrapKey para mover las claves cifradas entre los clústeres.
El usuario CU encargado de realizar esta operación deberá tener permiso para iniciar sesión en los HSM de ambos clústeres.
El primer comando utiliza exSymKey para exportar la clave 14, una clave AES de 32 bits desde el clúster 1 hasta el archivo aes.key
. También utiliza la clave 6, una clave AES que está en los HSM del clúster 1, como clave de encapsulación.
Command:
exSymKey -k 14 -w 6 -out aes.key
Cfm3WrapKey returned: 0x00 : HSM Return: SUCCESS Cfm3UnWrapHostKey returned: 0x00 : HSM Return: SUCCESS Wrapped Symmetric Key written to file "aes.key"
A continuación, el usuario inicia sesión en key_mgmt_util en el clúster 2 y ejecuta un comando imSymKey para importar la clave contenida en el archivo aes.key
a los HSM del clúster 2. Este comando utiliza la clave 252152, una clave AES que está en los HSM del clúster 2, como clave de encapsulación.
Como las claves de encapsulación que utilizan exSymKey e imSymKey encapsulan y desencapsulan inmediatamente las claves de destino, no es necesario que las claves de encapsulación de los distintos clústeres sean iguales.
La salida muestra que la clave se ha importado correctamente al clúster 2 y que se le ha asignado el identificador de clave 21.
Command:
imSymKey -f aes.key -w 262152 -t 31 -l xcluster
Cfm3WrapHostKey returned: 0x00 : HSM Return: SUCCESS Cfm3CreateUnwrapTemplate returned: 0x00 : HSM Return: SUCCESS Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS Symmetric Key Unwrapped. Key Handle: 21 Cluster Error Status Node id 1 and err state 0x00000000 : HSM Return: SUCCESS Node id 0 and err state 0x00000000 : HSM Return: SUCCESS Node id 2 and err state 0x00000000 : HSM Return: SUCCESS
Para demostrar que la clave 14 del clúster 1 y la clave 21 del clúster 2 tienen el mismo material de clave, obtenga el valor de comprobación clave (KCV) de cada clave. Si los valores de KCV son los mismos, el material de clave es el mismo.
El siguiente comando utiliza getAttribute en el clúster 1 para escribir el valor del atributo KCV (atributo 371) de la clave 14 en el archivo attr_14_kcv
. A continuación, utiliza un comando cat para obtener el contenido del archivo attr_14_kcv
.
Command:
getAttribute -o 14 -a 371 -out attr_14_kcv
Attributes dumped into attr_14_kcv file
$
cat attr_14_kcv
OBJ_ATTR_KCV 0xc33cbd
Este comando similar utiliza getAttribute en el clúster 2 para escribir el valor del atributo KCV (atributo 371) de la clave 21 en el archivo attr_21_kcv
. A continuación, utiliza un comando cat para obtener el contenido del archivo attr_21_kcv
.
Command:
getAttribute -o 21 -a 371 -out attr_21_kcv
Attributes dumped into attr_21_kcv file
$
cat attr_21_kcv
OBJ_ATTR_KCV 0xc33cbd
La salida muestra que los valores de KCV de las dos claves son los mismos, lo que demuestra que el material de clave es el mismo.
Dado que los HSM de ambos clústeres tienen el mismo material de clave, ahora puede compartir las claves cifradas entre los clústeres sin que se exponga la clave sin cifrar. Por ejemplo, puede utilizar el comando wrapKey
con la clave de encapsulación 14 para exportar una clave cifrada desde el clúster 1 y, a continuación, utilizar unWrapKey
con la clave de encapsulación 21 para importar la clave cifrada al clúster 2.
ejemplo : importación de una clave de sesión
Este comando utiliza los parámetros -sess
de imSymKey para importar una clave triple DES de 192 bits que es válida únicamente en la sesión actual.
El comando utiliza el parámetro -f
para especificar el archivo que contiene la clave para importar, el parámetro -t
para especificar el tipo de clave y el parámetro -w
para especificar la clave de encapsulación. También utiliza el parámetro -l
para especificar una etiqueta que establece la categoría de la clave, el parámetro -id
para crear un identificador descriptivo y único para la clave y el parámetro -attest
para verificar el firmware que importa la clave.
La salida muestra que la clave se encapsuló y se desencapsuló correctamente, se importó al HSM y se le asignó el identificador de clave 37. Además, muestra que se pasó la comprobación de atestación, que indica que el firmware no ha sufrido ninguna manipulación.
Command:
imSymKey -f 3des192.key -w 6 -t 21 -l temp -id test01 -sess -attest
Cfm3WrapHostKey returned: 0x00 : HSM Return: SUCCESS Cfm3CreateUnwrapTemplate returned: 0x00 : HSM Return: SUCCESS Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS Symmetric Key Unwrapped. Key Handle: 37 Attestation Check : [PASS] Cluster Error Status Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
A continuación, puede ejecutar los comandos getAttribute o findKey para verificar los atributos de la clave recién importada. El siguiente comando utiliza findKey para verificar que la clave 37 tenga el tipo, la etiqueta y el ID especificados por el comando y que sea una clave de sesión. Tal y como se muestra en la línea 5 de la salida, findKey informa que la única clave que coincide con todos los atributos es la clave 37.
Command:
findKey -t 21 -l temp -id test01 -sess 1
Total number of keys present 1 number of keys matched from start index 0::0 37 Cluster Error Status Node id 1 and err state 0x00000000 : HSM Return: SUCCESS Node id 0 and err state 0x00000000 : HSM Return: SUCCESS Node id 2 and err state 0x00000000 : HSM Return: SUCCESS Cfm3FindKey returned: 0x00 : HSM Return: SUCCESS
Parámetros
- -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.
Requerido: no
- -f
-
Especifica el archivo que contiene la clave que se va a importar.
El archivo debe contener una copia sin cifrar de una clave AES o triple DES de la longitud especificada. Las claves RC4 y DES no son válidas en los HSM en modo FIPS.
-
AES: 16, 24 o 32 bytes
-
Triple DES (3DES): 24 bytes
Obligatorio: sí
-
- -h
-
Muestra ayuda para el comando.
Obligatorio: sí
- -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.
Requerido: no
- -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í
- -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_srv
en 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
Requerido: 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.
Requerido: 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_srv
en 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.
Requerido: no
- -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:
-
21: Triple DES (3DES)
. -
31: AES
Obligatorio: sí
-
- -u
-
Comparte la clave que va a importar 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 un ID o 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 encontrar el ID, puede utilizar el comando listUsers en la herramienta de la línea de comandos cloudhsm_mgmt_util o el comando listUsers de la herramienta de la línea de comandos key_mgmt_util.Requerido: no
- -w
-
Especifica el identificador de la clave de encapsulamiento. Este parámetro es obligatorio. Para buscar identificadores de clave, use el comando findKey.
Una clave de encapsulación es una clave del HSM que se utiliza para cifrar ("encapsular") y después descifrar ("desencapsular") la clave durante el proceso de importación. Solo las claves AES se pueden utilizar como claves de encapsulación.
Puede utilizar cualquier clave AES (de cualquier tamaño) como clave de encapsulación. Dado que la clave de encapsulación encapsula y, a continuación, desencapsula inmediatamente la clave de destino, puede utilizar una clave AES solo de una sesión como clave de encapsulación. Para determinar si una clave se puede utilizar como clave de encapsulación, utilice getAttribute para obtener el valor del atributo
OBJ_ATTR_WRAP
(262). Para crear una clave de encapsulamiento, use genSymKey para crear una clave AES (escriba 31).Si utiliza el parámetro
-wk
para especificar una clave de encapsulación externa, la clave de encapsulación-w
se utilizará para desencapsular, pero no encapsular, la clave que se va a importar.nota
La clave 4 es una clave interna incompatible. Le recomendamos que use una clave AES que cree y administre como clave de encapsulamiento.
Obligatorio: sí
- -wk
-
Utilice la clave AES del archivo especificado para encapsular la clave que se importa. Escriba la ruta y el nombre de un archivo que contenga una clave AES sin cifrar.
Si se incluye este parámetro, imSymKey utiliza la clave del archivo
-wk
para encapsular la clave que se va a importar y utiliza la clave del HSM especificado en el parámetro-w
para desencapsularla. Los valores de parámetro-w
y-wk
deben resolverse en la misma clave sin cifrar.Valor predeterminado: utilice la clave de encapsulación del HSM para realizar la desencapsulación.
Requerido: no