Importazione del materiale delle chiavi Fase 3: crittografare il materiale delle chiavi - AWS Key Management Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Importazione del materiale delle chiavi Fase 3: crittografare il materiale delle chiavi

Dopo aver scaricato la chiave pubblica e il token di importazione, esegue la crittografia del materiale della chiave utilizzando la chiave pubblica scaricata e l'algoritmo di wrapping specificato. Se devi sostituire la chiave pubblica o il token di importazione oppure modificare l'algoritmo di wrapping, devi scaricare una nuova chiave pubblica e un nuovo token di importazione. Per informazioni sulle chiavi pubbliche e sugli algoritmi di wrapping AWS KMS supportati, vedere Selezione di una specifica della chiave pubblica di wrapping e. Selezione di un algoritmo di wrapping

Il materiale delle chiavi deve essere in formato binario. Per informazioni dettagliate, consulta Requisiti per il materiale della chiave importato.

Nota

Per le coppie di chiavi asimmetriche, crittografa e importa solo la chiave privata. AWS KMS ricava la chiave pubblica dalla chiave privata.

È NOT supportata la seguente combinazione: materiale chiave ECC _ NIST _P521, la specifica della chiave di wrapping pubblica RSA _2048 e un algoritmo di wrapping _ _ _*. RSAES OAEP SHA

Non è possibile avvolgere direttamente il materiale chiave ECC _ NIST _P521 con una chiave di wrapping pubblica _2048. RSA Utilizzate una chiave di avvolgimento più grande o un algoritmo di avvolgimento RSA _ _ _ _ _*AES. KEY WRAP SHA

Gli algoritmi di wrapping RSA AES KEY WRAP _ _ _ _ _ SHA _256 e RSA AES _ KEY _ WRAP _ SHA _1 non sono supportati nelle regioni cinesi.

In genere, si crittografa il materiale chiave quando lo si esporta dal modulo di sicurezza hardware (HSM) o dal sistema di gestione delle chiavi. Per informazioni su come esportare il materiale chiave in formato binario, consultate la documentazione del vostro sistema HSM di gestione delle chiavi. È inoltre possibile fare riferimento alla sezione seguente che fornisce una dimostrazione dimostrativa dell'utilizzo di OpenSSL.

Quando crittografi il materiale della chiave, usa lo stesso algoritmo di wrapping specificato quando hai scaricato la chiave pubblica e il token di importazione. Per trovare l'algoritmo di wrapping specificato, vedete l'evento di CloudTrail registro per la richiesta associata GetParametersForImport.

Genera il materiale della chiave per i test

I seguenti SSL comandi Open generano materiale chiave di ogni tipo supportato per i test. Questi esempi vengono forniti solo a scopo di test e proof-of-concept dimostrazioni. Per i sistemi di produzione, usa un metodo più sicuro per generare e memorizzare il materiale della chiave, ad esempio un modulo di sicurezza hardware o un sistema di gestione delle chiavi.

Per convertire le chiavi private delle coppie di chiavi asimmetriche in formato DER -encoded, reindirizzate il comando key material generation al comando seguente. openssl pkcs8 Il topk8 parametro indica SSL a Open di accettare una chiave privata come input e restituire una chiave in formato #8. PKCS (Il comportamento predefinito è l'opposto.)

openssl pkcs8 -topk8 -outform der -nocrypt

I comandi indicati di seguito generano il materiale della chiave per ogni tipo di chiave supportato.

  • Chiavi di crittografia simmetrica (32 byte)

    Questo comando genera una chiave simmetrica a 256 bit (stringa casuale di 32 byte) e la salva nel file PlaintextKeyMaterial.bin. Non è necessario codificare questo materiale della chiave.

    openssl rand -out PlaintextKeyMaterial.bin 32

    Solo nelle regioni cinesi, devi generare una chiave simmetrica a 128 bit (stringa casuale di 16 byte).

    openssl rand -out PlaintextKeyMaterial.bin 16
  • HMACchiavi

    Questo comando genera una stringa di byte casuale della dimensione specificata. Non è necessario codificare questo materiale della chiave.

    La lunghezza della HMAC chiave deve corrispondere alla lunghezza definita dalle specifiche della KMS chiave. Ad esempio, se la KMS chiave è HMAC _384, è necessario importare una chiave a 384 bit (48 byte).

    openssl rand -out HMAC_224_PlaintextKey.bin 28 openssl rand -out HMAC_256_PlaintextKey.bin 32 openssl rand -out HMAC_384_PlaintextKey.bin 48 openssl rand -out HMAC_512_PlaintextKey.bin 64
  • RSAchiavi private

    openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:2048 | openssl pkcs8 -topk8 -outform der -nocrypt > RSA_2048_PrivateKey.der openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:3072 | openssl pkcs8 -topk8 -outform der -nocrypt > RSA_3072_PrivateKey.der openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:4096 | openssl pkcs8 -topk8 -outform der -nocrypt > RSA_4096_PrivateKey.der
  • ECCchiavi private

    openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-256 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_NIST_P256_PrivateKey.der openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-384 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_NIST_P384_PrivateKey.der openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-521 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_NIST_P521_PrivateKey.der openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:secp256k1 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_SECG_P256K1_PrivateKey.der
  • SM2chiavi private (solo regioni cinesi)

    openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:sm2 | openssl pkcs8 -topk8 -outform der -nocrypt > SM2_PrivateKey.der

Esempi di crittografia del materiale chiave con Open SSL

Gli esempi seguenti mostrano come utilizzare Open SSL per crittografare il materiale chiave con la chiave pubblica scaricata. Per crittografare il materiale chiave utilizzando una chiave SM2 pubblica (solo per le regioni cinesi), usa la SM2OfflineOperationHelper classe. Per ulteriori informazioni sui principali tipi di materiali supportati da ciascun algoritmo di wrapping, consulta. Selezione di un algoritmo di wrapping

Importante

Questo esempio è solo una dimostrazione di proof of concept. Per i sistemi di produzione, utilizzate un metodo più sicuro (ad esempio un sistema commerciale HSM o di gestione delle chiavi) per generare e archiviare il materiale chiave.

È NOT supportata la seguente combinazione: materiale chiave ECC _ NIST _P521, la specifica della chiave di wrapping pubblica RSA _2048 e un algoritmo di wrapping _ _ _*. RSAES OAEP SHA

Non è possibile avvolgere direttamente il materiale chiave ECC _ NIST _P521 con una chiave di wrapping pubblica _2048. RSA Utilizzate una chiave di avvolgimento più grande o un algoritmo di avvolgimento RSA _ _ _ _ _*AES. KEY WRAP SHA

RSAES_OAEP_SHA_1

AWS KMS supporta RSAES _ OAEP _ SHA _1 per le chiavi di crittografia simmetriche (SYMMETRIC_DEFAULT), le chiavi private a curva ellittica (ECC), le chiavi private e le chiavi. SM2 HMAC

RSAES_ OAEP _ SHA _1 non è supportato per le chiavi private. RSA Inoltre, non è possibile utilizzare una chiave di wrapping pubblica RSA _2048 con alcun algoritmo di wrapping RSAES _ _ SHA _* per avvolgere una chiave privata OAEP _ _P521 (ECCsecp521r1NIST). È necessario utilizzare una chiave di wrapping pubblica più grande o un algoritmo di wrapping _ _ _. RSA AES KEY WRAP

L'esempio seguente cripta il materiale chiave con la chiave pubblica scaricata e l'algoritmo di wrapping RSAES OAEP _ _ SHA _1 e lo salva nel file. EncryptedKeyMaterial.bin

In questo esempio:

  • WrappingPublicKey.bin è il file che contiene la chiave pubblica di wrapping scaricata.

  • PlaintextKeyMaterial.bin è il file che contiene il materiale chiave da crittografare, ad esempio PlaintextKeyMaterial.bin o. HMAC_384_PlaintextKey.bin ECC_NIST_P521_PrivateKey.der

$ openssl pkeyutl \ -encrypt \ -in PlaintextKeyMaterial.bin \ -out EncryptedKeyMaterial.bin \ -inkey WrappingPublicKey.bin \ -keyform DER \ -pubin \ -pkeyopt rsa_padding_mode:oaep \ -pkeyopt rsa_oaep_md:sha1
RSAES_OAEP_SHA_256

AWS KMS supporta RSAES _ OAEP _ SHA _256 per le chiavi di crittografia simmetriche (SYMMETRIC_DEFAULT), le chiavi private a curva ellittica (ECC), SM2 le chiavi private e le chiavi. HMAC

RSAES_ OAEP _ SHA _256 non è supportato per le chiavi private. RSA Inoltre, non è possibile utilizzare una chiave di wrapping pubblica RSA _2048 con alcun algoritmo di wrapping RSAES _ _ SHA _* per avvolgere una chiave privata OAEP _ _P521 (ECCsecp521r1NIST). È necessario utilizzare una chiave pubblica più grande o un algoritmo di wrapping _ _ _. RSA AES KEY WRAP

L'esempio seguente cripta il materiale chiave con la chiave pubblica scaricata e l'algoritmo di wrapping RSAES OAEP _ _ SHA _256 e lo salva nel file. EncryptedKeyMaterial.bin

In questo esempio:

  • WrappingPublicKey.bin è il file che contiene la chiave di wrapping pubblica scaricata. Se hai scaricato la chiave pubblica dalla console, questo file è denominato wrappingKey_KMS key_key_ID_timestamp (ad esempio wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909).

  • PlaintextKeyMaterial.bin è il file che contiene il materiale chiave da crittografare, ad esempio PlaintextKeyMaterial.binHMAC_384_PlaintextKey.bin, o. ECC_NIST_P521_PrivateKey.der

$ openssl pkeyutl \ -encrypt \ -in PlaintextKeyMaterial.bin \ -out EncryptedKeyMaterial.bin \ -inkey WrappingPublicKey.bin \ -keyform DER \ -pubin \ -pkeyopt rsa_padding_mode:oaep \ -pkeyopt rsa_oaep_md:sha256 \ -pkeyopt rsa_mgf1_md:sha256
RSA_AES_KEY_WRAP_SHA_1

L'algoritmo di wrapping RSA AES KEY _ WRAP _ _ _ SHA _1 prevede due operazioni di crittografia.

  1. Crittografa il materiale della chiave con una chiave AES simmetrica generata da te e un algoritmo di crittografia simmetrico. AES

  2. Crittografa la chiave AES simmetrica che hai usato con la chiave pubblica che hai scaricato e l'algoritmo di wrapping _ _ _1. RSAES OAEP SHA

L'algoritmo di AES wrapping RSA _ KEY _ _ WRAP _ SHA _1 richiede la versione Open 3. SSL x o versione successiva.

  1. Genera una chiave di crittografia AES simmetrica a 256 bit

    Questo comando genera una chiave di crittografia AES simmetrica composta da 256 bit casuali e la salva nel file aes-key.bin

    # Generate a 32-byte AES symmetric encryption key $ openssl rand -out aes-key.bin 32
  2. Crittografa il materiale chiave con la chiave di crittografia simmetrica AES

    Questo comando crittografa il materiale chiave con la chiave di crittografia AES simmetrica e salva il materiale chiave crittografato nel file. key-material-wrapped.bin

    In questo esempio di comando:

    • PlaintextKeyMaterial.bin è il file che contiene il materiale chiave da importare, ad esempio PlaintextKeyMaterial.bin HMAC_384_PlaintextKey.binRSA_3072_PrivateKey.der, o. ECC_NIST_P521_PrivateKey.der

    • aes-key.bin è il file che contiene la chiave di crittografia AES simmetrica a 256 bit generata nel comando precedente.

    # Encrypt your key material with the AES symmetric encryption key $ openssl enc -id-aes256-wrap-pad \ -K "$(xxd -p < aes-key.bin | tr -d '\n')" \ -iv A65959A6 \ -in PlaintextKeyMaterial.bin\ -out key-material-wrapped.bin
  3. Crittografa la tua chiave di crittografia AES simmetrica con la chiave pubblica

    Questo comando cripta la chiave di crittografia AES simmetrica con la chiave pubblica scaricata e l'algoritmo di wrapping RSAES _ OAEP _ SHA _1, la DER codifica e la salva nel file. aes-key-wrapped.bin

    In questo esempio di comando:

    • WrappingPublicKey.bin è il file che contiene la chiave di wrapping pubblica scaricata. Se hai scaricato la chiave pubblica dalla console, questo file è denominato wrappingKey_KMS key_key_ID_timestamp (ad esempio wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909).

    • aes-key.bin è il file che contiene la chiave di crittografia AES simmetrica a 256 bit generata nel primo comando di questa sequenza di esempio.

    # Encrypt your AES symmetric encryption key with the downloaded public key $ openssl pkeyutl \ -encrypt \ -in aes-key.bin \ -out aes-key-wrapped.bin \ -inkey WrappingPublicKey.bin \ -keyform DER \ -pubin \ -pkeyopt rsa_padding_mode:oaep \ -pkeyopt rsa_oaep_md:sha1 \ -pkeyopt rsa_mgf1_md:sha1
  4. Generare il file da importare

    Concatena il file con il materiale chiave crittografato e il file con la chiave crittografata. AES Salvali nel file EncryptedKeyMaterial.bin, che è il file che importerai in Fase 4: importare il materiale delle chiavi.

    In questo esempio di comando:

    • key-material-wrapped.bin è il file che contiene il materiale della chiave crittografata.

    • aes-key-wrapped.bin è il file che contiene la chiave di AES crittografia crittografata.

    # Combine the encrypted AES key and encrypted key material in a file $ cat aes-key-wrapped.bin key-material-wrapped.bin > EncryptedKeyMaterial.bin
RSA_AES_KEY_WRAP_SHA_256

L'algoritmo di wrapping RSA AES KEY WRAP _ _ _ SHA _256 prevede due operazioni di crittografia.

  1. Crittografa il materiale della chiave con una chiave AES simmetrica generata da te e un algoritmo di crittografia simmetrico. AES

  2. Crittografa la chiave AES simmetrica che hai usato con la chiave pubblica che hai scaricato e l'algoritmo di wrapping _ _ _256. RSAES OAEP SHA

L'algoritmo di AES wrapping RSA _ KEY _ WRAP _ SHA _256 richiede la versione Open 3. SSL x o versione successiva.

  1. Genera una chiave di crittografia AES simmetrica a 256 bit

    Questo comando genera una chiave di crittografia AES simmetrica composta da 256 bit casuali e la salva nel file aes-key.bin

    # Generate a 32-byte AES symmetric encryption key $ openssl rand -out aes-key.bin 32
  2. Crittografa il materiale chiave con la chiave di crittografia simmetrica AES

    Questo comando crittografa il materiale chiave con la chiave di crittografia AES simmetrica e salva il materiale chiave crittografato nel file. key-material-wrapped.bin

    In questo esempio di comando:

    • PlaintextKeyMaterial.bin è il file che contiene il materiale chiave da importare, ad esempio PlaintextKeyMaterial.bin HMAC_384_PlaintextKey.binRSA_3072_PrivateKey.der, o. ECC_NIST_P521_PrivateKey.der

    • aes-key.bin è il file che contiene la chiave di crittografia AES simmetrica a 256 bit generata nel comando precedente.

    # Encrypt your key material with the AES symmetric encryption key $ openssl enc -id-aes256-wrap-pad \ -K "$(xxd -p < aes-key.bin | tr -d '\n')" \ -iv A65959A6 \ -in PlaintextKeyMaterial.bin\ -out key-material-wrapped.bin
  3. Crittografa la tua chiave di crittografia AES simmetrica con la chiave pubblica

    Questo comando cripta la chiave di crittografia AES simmetrica con la chiave pubblica scaricata e l'algoritmo di wrapping RSAES _ OAEP _ SHA _256, la DER codifica e la salva nel file. aes-key-wrapped.bin

    In questo esempio di comando:

    • WrappingPublicKey.bin è il file che contiene la chiave di wrapping pubblica scaricata. Se hai scaricato la chiave pubblica dalla console, questo file è denominato wrappingKey_KMS key_key_ID_timestamp (ad esempio wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909).

    • aes-key.bin è il file che contiene la chiave di crittografia AES simmetrica a 256 bit generata nel primo comando di questa sequenza di esempio.

    # Encrypt your AES symmetric encryption key with the downloaded public key $ openssl pkeyutl \ -encrypt \ -in aes-key.bin \ -out aes-key-wrapped.bin \ -inkey WrappingPublicKey.bin \ -keyform DER \ -pubin \ -pkeyopt rsa_padding_mode:oaep \ -pkeyopt rsa_oaep_md:sha256 \ -pkeyopt rsa_mgf1_md:sha256
  4. Generare il file da importare

    Concatena il file con il materiale chiave crittografato e il file con la chiave crittografata. AES Salvali nel file EncryptedKeyMaterial.bin, che è il file che importerai in Fase 4: importare il materiale delle chiavi.

    In questo esempio di comando:

    • key-material-wrapped.bin è il file che contiene il materiale della chiave crittografata.

    • aes-key-wrapped.bin è il file che contiene la chiave di AES crittografia crittografata.

    # Combine the encrypted AES key and encrypted key material in a file $ cat aes-key-wrapped.bin key-material-wrapped.bin > EncryptedKeyMaterial.bin

Passa a Fase 4: importare il materiale delle chiavi.