

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à.

# Fase 3: crittografare il materiale delle chiavi
<a name="importing-keys-encrypt-key-material"></a>

Dopo aver [scaricato la chiave pubblica e il token di importazione](importing-keys-get-public-key-and-token.md), 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, consulta e. [Selezione di una specifica della chiave pubblica di wrapping](importing-keys-get-public-key-and-token.md#select-wrapping-key-spec) [Selezione di un algoritmo di wrapping](importing-keys-get-public-key-and-token.md#select-wrapping-algorithm)

Il materiale delle chiavi deve essere in formato binario. Per informazioni dettagliate, consulta [Requisiti per il materiale della chiave importato](importing-keys-conceptual.md#importing-keys-material-requirements).

**Nota**  
Per le coppie di chiavi asimmetriche, crittografa e importa solo la chiave privata. AWS KMS ricava la chiave pubblica dalla chiave privata.  
La seguente combinazione NON è supportata: materiale della chiave ECC\$1NIST\$1P521, specifica della chiave di wrapping pubblica RSA\$12048 e algoritmo di wrapping RSAES\$1OAEP\$1SHA\$1\$1.  
Non puoi eseguire il wrapping del materiale della chiave ECC\$1NIST\$1P521 direttamente con una chiave di wrapping pubblica RSA\$12048. Usa una chiave di wrapping più grande o un algoritmo di wrapping RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1\$1.  
Gli algoritmi di wrapping RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1256 e RSA\$1AES\$1KEY\$1WRAP\$1SHA\$11 non sono supportati nelle regioni della Cina.

Di solito, è possibile crittografare il materiale delle chiavi quando viene esportato dal modulo di sicurezza hardware (HSM) o dal sistema di gestione delle chiavi. Per informazioni su come esportare il materiale delle chiavi in formato binario, consulta la documentazione per il tuo HSM o per il sistema di gestione delle chiavi. È anche possibile consultare la sezione seguente che fornisce un proof of concept sull'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](importing-keys-get-public-key-and-token.md). Per trovare l'algoritmo di wrapping specificato, consulta l'evento di registro per la richiesta associata. CloudTrail [GetParametersForImport](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html)

## Genera il materiale della chiave per i test
<a name="importing-keys-example-key-material"></a>

I comandi OpenSSL indicati di seguito generano il materiale della 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 con codifica DER, reindirizza il comando di generazione del materiale della chiave sul comando `openssl pkcs8` seguente. Il parametro `topk8` indica a OpenSSL di accettare una chiave privata come input e restituire una chiave in formato PKCS \$18. (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
  ```
+ Chiavi HMAC

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

  La lunghezza della chiave HMAC deve corrispondere alla lunghezza definita dalle specifiche della chiave KMS. Ad esempio, se la chiave KMS è HMAC\$1384, devi 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
  ```
+ Chiavi private RSA

  ```
  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
  ```
+ Chiavi private EEC

  ```
  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
  ```
+ SM2 chiavi private (solo regioni della Cina)

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

## Esempio di crittografia del materiale della chiave con OpenSSL
<a name="importing-keys-encrypt-key-material-openssl"></a>

Gli esempi seguenti descrivono l'utilizzo di [OpenSSL](https://openssl.org/) per crittografare il materiale della chiave con la chiave pubblica scaricata. Per crittografare il materiale chiave utilizzando una chiave SM2 pubblica (solo regioni della Cina), usa la [`SM2OfflineOperationHelper`classe](offline-operations.md#key-spec-sm-offline-helper). Per ulteriori informazioni sui principali tipi di materiali supportati da ciascun algoritmo di wrapping, consulta. [Selezione di un algoritmo di wrapping](importing-keys-get-public-key-and-token.md#select-wrapping-algorithm)

**Importante**  
Questo esempio è solo una dimostrazione di proof of concept. Per i sistemi di produzione, utilizzare un metodo più sicuro (ad esempio un sistema di gestione delle chiavi commerciale o HSM) per generare e memorizzare il materiale delle chiavi.  
La seguente combinazione NON è supportata: materiale della chiave ECC\$1NIST\$1P521, specifica della chiave di wrapping pubblica RSA\$12048 e algoritmo di wrapping RSAES\$1OAEP\$1SHA\$1\$1.  
Non puoi eseguire il wrapping del materiale della chiave ECC\$1NIST\$1P521 direttamente con una chiave di wrapping pubblica RSA\$12048. Usa una chiave di wrapping più grande o un algoritmo di wrapping RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1\$1.

------
#### [ RSAES\$1OAEP\$1SHA\$11 ]

AWS KMS supporta RSAES\$1OAEP\$1SHA\$11 per chiavi di crittografia simmetriche (SYMMETRIC\$1DEFAULT), chiavi private a curva ellittica (ECC), chiavi private e chiavi HMAC. SM2 

RSAES\$1OAEP\$1SHA\$11 non è supportato per le chiavi private RSA. Inoltre, non puoi utilizzare una chiave di wrapping pubblica RSA\$12048 con un algoritmo di wrapping RSAES\$1OAEP\$1SHA\$1\$1 per eseguire il wrapping di una chiave privata ECC\$1NIST\$1P521 (secp521r1). Devi utilizzare una chiave di wrapping più grande o un algoritmo di wrapping RSA\$1AES\$1KEY\$1WRAP.

Nell'esempio seguente il materiale della chiave viene criptato con la [chiave pubblica scaricata](importing-keys-get-public-key-and-token.md) e l'algoritmo di wrapping RSAES\$1OAEP\$1SHA\$11, quindi viene salvato 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 della chiave da crittografare, ad esempio `PlaintextKeyMaterial.bin`, `HMAC_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:sha1
```

------
#### [ RSAES\$1OAEP\$1SHA\$1256 ]

AWS KMS supporta RSAES\$1OAEP\$1SHA\$1256 per chiavi di crittografia simmetriche (SYMMETRIC\$1DEFAULT), chiavi private a curva ellittica (ECC), chiavi private e chiavi HMAC. SM2 

RSAES\$1OAEP\$1SHA\$1256 non è supportato per le chiavi private RSA. Inoltre, non puoi utilizzare una chiave di wrapping pubblica RSA\$12048 con un algoritmo di wrapping RSAES\$1OAEP\$1SHA\$1\$1 per eseguire il wrapping di una chiave privata ECC\$1NIST\$1P521 (secp521r1). Devi utilizzare una chiave pubblica più grande o un algoritmo di wrapping RSA\$1AES\$1KEY\$1WRAP.

Nell'esempio seguente, il materiale della chiave viene criptato con la [chiave pubblica scaricata](importing-keys-get-public-key-and-token.md) e l'algoritmo di wrapping RSAES\$1OAEP\$1SHA\$1256, quindi viene salvato 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 della chiave da crittografare, ad esempio `PlaintextKeyMaterial.bin`, `HMAC_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\$1AES\$1KEY\$1WRAP\$1SHA\$11 ]

L'algoritmo di wrapping RSA\$1AES\$1KEY\$1WRAP\$1SHA\$11 prevede due operazioni di crittografia.

1. Esegui la crittografia del materiale della chiave con una chiave simmetrica AES generata da te e un algoritmo di crittografia simmetrica AES.

1. Esegui la crittografia della chiave simmetrica AES che hai usato con la chiave pubblica che hai scaricato e l'algoritmo di wrapping RSAES\$1OAEP\$1SHA\$11.

L'algoritmo di wrapping RSA\$1AES\$1KEY\$1WRAP\$1SHA\$11 richiede OpenSSL versione 3.*x* o versione successiva.

1. 

**Genera una chiave di crittografia simmetrica AES a 256-bit**

   Questo comando genera una chiave di crittografia simmetrica AES 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
   ```

1. 

**Esegui la crittografia del materiale della chiave con la chiave di crittografia simmetrica AES**

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

   In questo esempio di comando:
   + *`PlaintextKeyMaterial.bin`* è il file che contiene il materiale della chiave da importare, ad esempio `PlaintextKeyMaterial.bin`, `HMAC_384_PlaintextKey.bin`, `RSA_3072_PrivateKey.der` o `ECC_NIST_P521_PrivateKey.der`.
   + *`aes-key.bin`* è il file che contiene la chiave di crittografia simmetrica AES 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
   ```

1. 

**Esegui la crittografia della chiave di crittografia simmetrica AES con la chiave pubblica**

   Questo comando esegue la crittografia della chiave di crittografia simmetrica AES con la chiave pubblica scaricata e l'algoritmo di wrapping RSAES\$1OAEP\$1SHA\$11, applica la codifica DER 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 simmetrica AES a 256 bit generata nel primo comando in questa sequenza di esempi.

   ```
   # 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
   ```

1. 

**Generare il file da importare**

   Concatena il file con il materiale della chiave crittografato e il file con la chiave AES crittografata. Salvali nel file `EncryptedKeyMaterial.bin`, che è il file che importerai in [Fase 4: importare il materiale delle chiavi](importing-keys-import-key-material.md).

   In questo esempio di comando:
   + *`key-material-wrapped.bin`* è il file che contiene il materiale della chiave crittografato.
   + *`aes-key-wrapped.bin`* è il file che contiene la chiave di crittografia AES 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\$1AES\$1KEY\$1WRAP\$1SHA\$1256 ]

L'algoritmo di wrapping RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1256 prevede due operazioni di crittografia.

1. Esegui la crittografia del materiale della chiave con una chiave simmetrica AES generata da te e un algoritmo di crittografia simmetrica AES.

1. Esegui la crittografia della chiave simmetrica AES che hai usato con la chiave pubblica che hai scaricato e l'algoritmo di wrapping RSAES\$1OAEP\$1SHA\$1256.

L'algoritmo di wrapping RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1256 richiede OpenSSL versione 3.*x* o versione successiva.

1. 

**Genera una chiave di crittografia simmetrica AES a 256-bit**

   Questo comando genera una chiave di crittografia simmetrica AES 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
   ```

1. 

**Esegui la crittografia del materiale della chiave con la chiave di crittografia simmetrica AES**

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

   In questo esempio di comando:
   + *`PlaintextKeyMaterial.bin`* è il file che contiene il materiale della chiave da importare, ad esempio `PlaintextKeyMaterial.bin`, `HMAC_384_PlaintextKey.bin`, `RSA_3072_PrivateKey.der` o `ECC_NIST_P521_PrivateKey.der`.
   + *`aes-key.bin`* è il file che contiene la chiave di crittografia simmetrica AES 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
   ```

1. 

**Esegui la crittografia della chiave di crittografia simmetrica AES con la chiave pubblica**

   Questo comando esegue la crittografia della chiave di crittografia simmetrica AES con la chiave pubblica scaricata e l'algoritmo di wrapping RSAES\$1OAEP\$1SHA\$1256, applica la codifica DER 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 simmetrica AES a 256 bit generata nel primo comando in questa sequenza di esempi.

   ```
   # 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
   ```

1. 

**Generare il file da importare**

   Concatena il file con il materiale della chiave crittografato e il file con la chiave AES crittografata. Salvali nel file `EncryptedKeyMaterial.bin`, che è il file che importerai in [Fase 4: importare il materiale delle chiavi](importing-keys-import-key-material.md).

   In questo esempio di comando:
   + *`key-material-wrapped.bin`* è il file che contiene il materiale della chiave crittografato.
   + *`aes-key-wrapped.bin`* è il file che contiene la chiave di crittografia AES 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](importing-keys-import-key-material.md).