Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
¿Cómo puedo utilizar OpenSSL y la herramienta de línea de comandos de CloudHSM para transferir mis claves de forma segura a CloudHSM?
Quiero usar el subcomando "desempaquetar claves" con la herramienta de línea de comandos de CloudHSM (CLI de CloudHSM) para importar claves locales a AWS CloudHSM.
Resolución
En primer lugar, cifre su clave de carga útil con una clave efímera de Estándar de cifrado avanzado (AES). A continuación, cifre la clave AES efímera con su clave pública de un par de claves. Para finalizar, una las claves de carga y efímera cifradas en un solo archivo. El archivo se envía a CloudHSM en un formato cifrado y la clave privada lo descifra del par de claves. El mecanismo AES_KEY_WRAP descifra la clave AES efímera y la usa para descifrar su clave de carga.
Cree las siguientes claves:
- Clave AES, RSA o EC de carga útil. Esta es la clave que importará y usará con CloudHSM.
- AES_KEY_WRAP requiere una clave AES temporal para cifrar la clave de carga útil. Se recomienda utilizar AES porque no hay límites de tamaño en cuanto a lo que se puede cifrar.
- El par de claves RSA se utiliza para empaquetar y desempaquetar estas claves de forma segura en CloudHSM.
Antes de empezar, asegúrese de que dispone de OpenSSL (v 3.x) para usar el empaquetado de sobres:
openssl version OpenSSL 3.0.8 7 Feb 2023 (Library: OpenSSL 3.0.8 7 Feb 2023)
En los siguientes comandos, sustituya estos valores:
- YOUR_CRYPTO_USER_NAME con su nombre de usuario de criptografía
- YOUR_CRYPTO_USER_PASSWORD con su contraseña
- YOUR_WRAPPING_KEY_LABEL con la etiqueta clave asignada a su clave pública RSA para empaquetar
- YOUR_UNWRAPPING_KEY_LABEL con la etiqueta clave asignada a su clave privada RSA para desempaquetar
- YOUR_IMPORTED_KEY_LABEL con la etiqueta clave asignada a la clave de carga útil importada
Nota: Los comandos key generate-file y key unwrap requieren que las claves de empaquetado se puedan identificar de forma exclusiva, ya que las etiquetas de las claves son una condición de filtro. Asegúrese de que YOUR_WRAPPING_KEY_LABEL y YOUR_UNWRAPPING_KEY_LABEL sean etiquetas de clave únicas. O bien, utilice una condición de filtro diferente para identificar las claves de forma exclusiva. Para obtener más información sobre los filtros de claves, consulte Filtrado de claves mediante la CLI de CloudHSM.
Establecimiento de las credenciales de usuario de criptografía para la CLI de CloudHSM
Use el siguiente comando:
export CLOUDHSM_ROLE="crypto-user" export CLOUDHSM_PIN="YOUR_CRYPTO_USER_NAME:YOUR_CRYPTO_USER_PASSWORD"
Importación de la carga útil de AES
Para crear, cifrar e importar las claves locales complete los siguientes pasos:
-
Para crear las claves AES, AES efímeras y RSA de la carga útil, ejecute los siguientes comandos:
openssl rand -out payload_aes 32 openssl rand -out ephemeral_aes 32 /opt/cloudhsm/bin/cloudhsm-cli key generate-asymmetric-pair rsa --public-label YOUR_WRAPPING_KEY_LABEL --private-label YOUR_UNWRAPPING_KEY_LABEL --modulus-size-bits 4096 --public-exponent 65537 --private-attributes unwrap=true /opt/cloudhsm/bin/cloudhsm-cli key generate-file --encoding pem --path public.pem --filter attr.label=YOUR_WRAPPING_KEY_LABEL
Nota: Para rastrear sus archivos, cree estas claves en su propio directorio.
-
Ejecute el siguiente comando para generar los valores hexadecimales sin procesar de la clave AES efímera en una variable:
EPHEMERAL_AES_HEX=$(hexdump -v -e '/1 "%02X"' < ephemeral_aes)
Nota: Asegúrese de tener instalada la utilidad hexdump. Si no instala hexdump, el comando anterior devuelve un error. Consulte la documentación de su sistema operativo (SO) para obtener instrucciones sobre cómo instalar la utilidad hexdump.
-
Ejecute el comando enc en OpenSSL para empaquetar la carga útil con la clave AES efímera:
openssl enc -id-aes256-wrap-pad -K $EPHEMERAL_AES_HEX -iv A65959A6 -in payload_aes -out payload_wrapped
Nota: El cifrado -id-aes256-wrap-pad es el mecanismo de empacado que cumple con RFC 3394 que coincide con CKM_RSA_AES_KEY_WRAP. La extensión RFC 3394, RFC 5649, establece los valores -iv. Para obtener más información, consulte el algoritmo de ajuste de empaquetado de claves AES y el algoritmo de empaquetado de claves AES en el sitio web de IETF.
-
Cifre la clave AES con la clave pública del par de claves RSA:
openssl pkeyutl -encrypt -in ephemeral_aes -out ephemeral_wrapped -pubin -inkey public.pem -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha1 -pkeyopt rsa_mgf1_md:sha1
-
Desde el equipo local, una la clave de carga cifrada y la clave AES efímera en un único archivo denominado rsa_aes_wrapped:
cat ephemeral_wrapped payload_wrapped > rsa_aes_wrapped
-
Para usar la clave privada RSA con la clave unwrap rsa-aes para desempaquetar la clave de carga útil unida en CloudHSM, ejecute el siguiente comando:
/opt/cloudhsm/bin/cloudhsm-cli key unwrap rsa-aes --data-path rsa_aes_wrapped --key-type-class aes --label YOUR_IMPORTED_KEY_LABEL --hash-function sha1 --mgf mgf1-sha1 --filter attr.label=YOUR_UNWRAPPING_KEY_LABEL --attributes decrypt=true encrypt=true
Nota:Debe usar--key-type-class aes para desempaquetar las claves AES. Según cómo use las claves, utilice --attributes para asignar los atributos de estas. Para obtener más información sobre las opciones y los atributos de las claves, consulte el ejemplo key unwrap rsa-aes y los atributos de claves para la CLI de CloudHSM, respectivamente.
Recibirá una importación correcta de la clave AES de carga que es similar a la siguiente salida:
{ "error_code": 0, "data": { "key": { "key-reference": "0x000000000068031a", "key-info": { "key-owners": [ { "username": "YOUR_CRYPTO_USER_NAME", "key-coverage": "full" } ], "shared-users": [], "cluster-coverage": "full" }, "attributes": { "key-type": "aes", "label": "YOUR_IMPORTED_KEY_LABEL", "id": "0x", "check-value": "0xb31c2a", "class": "secret-key", "encrypt": true, "decrypt": true, "token": true, "always-sensitive": false, "derive": false, "destroyable": true, "extractable": true, "local": false, "modifiable": true, "never-extractable": false, "private": true, "sensitive": true, "sign": true, "trusted": false, "unwrap": false, "verify": true, "wrap": false, "wrap-with-trusted": false, "key-length-bytes": 32 } } } }
Importar la carga útil RSA
Para importar la carga útil, complete los siguientes pasos:
-
Para desempaquetar una clave privada RSA en CloudHSM, ejecute los siguientes comandos para cambiar la clave de carga por una clave privada RSA:
openssl genrsa -out payload_rsa.pem 2048 openssl rand -out ephemeral_aes 32
-
Utilice un editor de texto sin formato para comprobar el formato de las claves RSA:
PKCS1 format: -----BEGIN RSA PRIVATE KEY----- - PKCS8 format: -----BEGIN PRIVATE KEY-----
Nota: Las claves RSA están en formato PKCS #1. Sin embargo, la CLI de CloudHSM presupone que la clave privada está en formato PKCS #8 DER.
-
Para convertir la clave payload_rsa.pem al formato PKCS #8 y codificarla en DER, ejecute el siguiente comando:
openssl pkcs8 -topk8 -inform PEM -outform DER -in payload_rsa.pem -out payload_rsa_pkcs8.der -nocrypt
-
Complete los pasos 2 a 5 de la sección Importación de la carga útil AES. Sustituya payload_aes por payload_rsa_pkcs8.der.
-
Para desempaquetar la clave privada RSA de carga útil en CloudHSM, ejecute el siguiente comando:
/opt/cloudhsm/bin/cloudhsm-cli key unwrap rsa-aes --data-path rsa_aes_wrapped --key-type-class rsa-private --label YOUR_IMPORTED_KEY_LABEL --hash-function sha1 --mgf mgf1-sha1 --filter attr.label=YOUR_UNWRAPPING_KEY_LABEL --attributes decrypt=true sign=true
Nota: Debe usar --key-type-class rsa-private para desempaquetar las claves RSA. Según cómo use las claves, utilice --attributes para asignar los atributos de estas.
Importación de la carga útil EC
Para importar la carga útil, complete los siguientes pasos:
-
Para desempaquetar una clave privada EC en CloudHSM, ejecute los siguientes comandos para cambiar la clave de carga por una clave privada EC:
openssl ecparam -name secp256k1 -genkey -noout -out payload_ec.pemopenssl rand -out ephemeral_aes 32
-
Utilice un editor de texto sin formato para comprobar el formato de las claves EC:
PKCS1 format: -----BEGIN EC PRIVATE KEY----- - PKCS8 format: -----BEGIN PRIVATE KEY-----
Nota: Las claves EC están en formato PKCS #1. Sin embargo, la CLI de CloudHSM presupone que la clave privada está en formato PKCS #8 DER.
-
Para convertir la clave payload_ec.pem al formato PKCS #8 y codificarla en DER, ejecute el siguiente comando:
openssl pkcs8 -topk8 -inform PEM -outform DER -in payload_ec.pem -out payload_ec_pkcs8.der -nocrypt
-
Complete los pasos 2 a 5 de la sección Importación de la carga útil AES. Sustituya payload_aes por payload_ec_pkcs8.der.
-
Para desempaquetar la clave privada EC de carga útil en CloudHSM, ejecute el siguiente comando:
/opt/cloudhsm/bin/cloudhsm-cli key unwrap rsa-aes --data-path rsa_aes_wrapped --key-type-class ec-private --label YOUR_IMPORTED_KEY_LABEL --hash-function sha1 --mgf mgf1-sha1 --filter attr.label=YOUR_UNWRAPPING_KEY_LABEL --attributes decrypt=true sign=true
Nota: Debe usar --key-type-class ec-private para desempaquetar las claves EC. Según cómo use las claves, utilice --attributes para asignar los atributos de estas.
Información relacionada
Mecanismos compatibles con la biblioteca PKCS #11 para el SDK 5 del cliente de AWS CloudHSM

Contenido relevante
- preguntada hace 22 díaslg...
- preguntada hace un meslg...
- preguntada hace un meslg...
- preguntada hace 3 meseslg...
- preguntada hace un meslg...
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace 7 meses