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.
Come posso utilizzare OpenSSL e lo strumento a riga di comando CloudHSM per trasferire in modo sicuro le mie chiavi su CloudHSM?
Desidero utilizzare il sottocomando “key unwrap” con lo strumento a riga di comando CloudHSM (CloudHSM CLI) per importare chiavi locali in AWS CloudHSM.
Risoluzione
Innanzitutto, crittografa la chiave del payload con una chiave effimera Advanced Encryption Standard (AES). Crittografa l'AES effimero con la tua chiave pubblica da una coppia di chiavi. Quindi combina la chiave di payload crittografata e la chiave effimera crittografata in un unico file. Il file viene inviato a CloudHSM in formato crittografato e la chiave privata decrittografa il file dalla coppia di chiavi. Il meccanismo AES_KEY_WRAP decrittografa la chiave AES effimera e la utilizza per decrittografare la chiave di payload.
Crea le seguenti chiavi:
- Chiave AES, RSA o EC del payload. Questa è la chiave che importi e utilizzi con CloudHSM.
- Chiave AES temporanea richiesta da AES_KEY_WRAP per crittografare il payload. È consigliabile utilizzare AES perché non ci sono limiti di dimensione su ciò che può essere crittografato.
- Coppia di chiavi RSA utilizzata per comprimere ed estrarre in modo sicuro le chiavi nel CloudHSM.
Prima di iniziare, assicurati di avere OpenSSL v 3.x per utilizzare envelop wrap:
openssl version OpenSSL 3.0.8 7 Feb 2023 (Library: OpenSSL 3.0.8 7 Feb 2023)
Nei seguenti comandi, sostituisci a:
- YOUR_CRYPTO_USER_NAME il tuo nome utente crittografico
- YOUR_CRYPTO_USER_PASSWORD la tua password
- YOUR_WRAPPING_KEY_LABEL l'etichetta chiave assegnata alla tua chiave pubblica RSA per la compressione
- YOUR_UNWRAPPING_KEY_LABEL l'etichetta chiave assegnata alla tua chiave privata RSA per l'estrazione
- YOUR_IMPORTED_KEY_LABEL l'etichetta chiave assegnata alla chiave del payload importata
Nota: il comando ** key generate-file** e il comando ** key unwrap** richiedono che le chiavi di compressione siano identificabili in modo univoco perché le etichette chiave sono una condizione di filtro. Assicurati che YOUR\ _WRAPPING\ _KEY\ _LABEL e YOUR\ _UNWRAPPING\ _KEY\ _LABEL siano etichette chiave univoche. Oppure utilizza una condizione di filtro diversa per identificare in modo univoco le chiavi. Per ulteriori informazioni sui filtri chiave, consulta Filtra le chiavi utilizzando CloudHSM CLI.
Imposta le credenziali degli utenti crittografici per CloudHSM CLI
Esegui il seguente comando:
export CLOUDHSM_ROLE="crypto-user" export CLOUDHSM_PIN="YOUR_CRYPTO_USER_NAME:YOUR_CRYPTO_USER_PASSWORD"
Importa il payload AES
Per creare, crittografare e importare le chiavi locali, completa i seguenti passaggi:
-
Per creare le chiavi AES, AES effimere e RSA del payload, esegui i seguenti comandi:
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: per tenere traccia dei tuoi file, crea queste chiavi nella loro directory.
-
Per restituire i valori esadecimali grezzi della chiave AES effimera in una variabile, esegui il seguente comando:
EPHEMERAL_AES_HEX=$(hexdump -v -e '/1 "%02X"' < ephemeral_aes)
Nota: assicurati di avere installato l'utilità hexdump. Se non installi hexdump, il comando precedente restituisce un errore. Per istruzioni su come installare l'utilità hexdump, fai riferimento alla documentazione del tuo sistema operativo (OS).
-
Esegui il comando OpenSSL enc per comprimere il payload con la chiave AES effimera:
openssl enc -id-aes256-wrap-pad -K $EPHEMERAL_AES_HEX -iv A65959A6 -in payload_aes -out payload_wrapped
Nota: la cifratura -id-aes256-wrap-pad è il meccanismo di compressione conforme a RFC 3394 che coincide con CKM_RSA_AES_KEY_WRAP. L'estensione RFC 3394, RFC 5649, imposta i valori \ -iv. Per ulteriori informazioni, consultaAES key wrap with padding algorithm e AES key wrap algorithm sul sito Web IETF.
-
Crittografa la chiave AES con la chiave pubblica della coppia di chiavi 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
-
Dal computer locale, concatena la chiave di payload crittografata e la chiave AES effimera in un unico file denominato rsa_aes_wrapped:
cat ephemeral_wrapped payload_wrapped > rsa_aes_wrapped
-
Per utilizzare la chiave privata RSA con la ** chiave** unwrap rsa-aes per estrarre la chiave di payload concatenata in CloudHSM, esegui il seguente 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: è necessario utilizzare**--key-type-class aes** per estrarre le chiavi AES. In base all'utilizzo delle chiavi, utilizza**--attributes** per assegnare gli attributi della chiave. Per ulteriori informazioni sulle opzioni e sugli attributi della chiave, consulta rispettivamente l'esempio key unwrap rsa-aes e Attributi della chiave per CloudHSM CLI.
Se l’importazione della chiave AES del payload avviene correttamente, riceverai un output simile al seguente:
{ "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 } } } }
Importa il payload RSA
Per importare il payload, completa i seguenti passaggi:
-
Se desideri estrarre una chiave privata RSA in CloudHSM, esegui i seguenti comandi per convertire la chiave di payload in una chiave privata RSA:
openssl genrsa -out payload_rsa.pem 2048 openssl rand -out ephemeral_aes 32
-
Utilizza un editor di testo per verificare il formato delle chiavi RSA:
PKCS1 format: -----BEGIN RSA PRIVATE KEY----- - PKCS8 format: -----BEGIN PRIVATE KEY-----
Nota: le chiavi RSA sono in formato PKCS #1. Tuttavia, l'interfaccia a riga di comando di CloudHSM presuppone che la chiave privata sia nel formato PKCS #8 DER.
-
Per convertire la chiave payload\ _rsa.pem in formato PKCS #8 codificato DER, esegui il seguente comando:
openssl pkcs8 -topk8 -inform PEM -outform DER -in payload_rsa.pem -out payload_rsa_pkcs8.der -nocrypt
-
Completa i passaggi 2-5 della sezione Importa il payload AES. Sostituisci a payload_aes payload_rsa_pkcs8.der.
-
Per estrarre la chiave privata RSA del payload in CloudHSM, esegui il seguente 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: è necessario utilizzare**--key-type-class rsa-private** per estrarre le chiavi RSA. In base all'utilizzo delle chiavi, utilizza**--attributes** per assegnare gli attributi della chiave.
Importaz del payload EC
Per importare il payload, completa i seguenti passaggi:
-
Per estrarre una chiave privata EC in CloudHSM, esegui i seguenti comandi per cambiare la chiave del payload in una chiave privata EC:
openssl ecparam -name secp256k1 -genkey -noout -out payload_ec.pemopenssl rand -out ephemeral_aes 32
-
Utilizza un editor di testo in chiaro per controllare il formato delle chiavi EC:
PKCS1 format: -----BEGIN EC PRIVATE KEY----- - PKCS8 format: -----BEGIN PRIVATE KEY-----
Nota: le chiavi EC sono in formato PKCS #1. Tuttavia, l'interfaccia a riga di comando di CloudHSM presuppone che la chiave privata sia nel formato PKCS #8 DER.
-
Per convertire la chiave payload_ec.pem in formato PKCS #8 codificato DER, esegui il seguente comando:
openssl pkcs8 -topk8 -inform PEM -outform DER -in payload_ec.pem -out payload_ec_pkcs8.der -nocrypt
-
Completa i passaggi 2-5 della sezione Importa il payload AES. Sostituisci a payload\ _aes payload_ec_pkcs8.der.
-
Per estrarre la chiave privata EC del payload in CloudHSM, esegui il seguente 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: è necessario utilizzare**--key-type-class ec-private** per estrarre le chiavi EC. In base all'utilizzo delle chiavi, utilizza**--attributes** per assegnare gli attributi della chiave.
Informazioni correlate
Meccanismi supportati per la libreria PKCS #11 per AWS CloudHSM Client SDK 5

Contenuto pertinente
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 4 anni fa
- AWS UFFICIALEAggiornata 3 anni fa