

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Étape 3 : Chiffrement des éléments de clé
<a name="importing-keys-encrypt-key-material"></a>

Après avoir [téléchargé la clé publique et le jeton d'importation](importing-keys-get-public-key-and-token.md), chiffrez l’élément de votre clé à l'aide de la clé publique que vous avez téléchargée et de l'algorithme d'encapsulage que vous avez spécifié. Si vous devez remplacer la clé publique ou le jeton d'importation, ou modifier l'algorithme d'encapsulage, vous devez télécharger une nouvelle clé publique et un nouveau jeton d'importation. Pour plus d'informations sur les clés publiques et les algorithmes d'encapsulation AWS KMS compatibles, reportez-vous [Sélectionnez une spécification de clé publique d'encapsulage](importing-keys-get-public-key-and-token.md#select-wrapping-key-spec) aux sections et[Sélectionner un algorithme d'encapsulage](importing-keys-get-public-key-and-token.md#select-wrapping-algorithm).

La clé doit être au format binaire. Pour plus d’informations, consultez [Exigences relatives aux éléments de clé importés](importing-keys-conceptual.md#importing-keys-material-requirements).

**Note**  
Pour les paires de clés asymétriques, chiffrez et importez uniquement la clé privée. AWS KMS déduit la clé publique de la clé privée.  
La combinaison suivante n'est PAS prise en charge : l’élément de clé ECC\_NIST\_P521, la spécification de clé d'encapsulage publique RSA\_2048 et un algorithme d'encapsulage RSAES\_OAEP\_SHA\_\*.  
Vous ne pouvez pas directement encapsuler l’élément de clé ECC\_NIST\_P521 avec une clé d'encapsulage publique RSA\_2048. Utilisez une clé d'encapsulage plus grande ou un algorithme d'encapsulage RSA\_AES\_KEY\_WRAP\_SHA\_\*.  
Les algorithmes d'encapsulage RSA\_AES\_KEY\_WRAP\_SHA\_256 et RSA\_AES\_KEY\_WRAP\_SHA\_1 ne sont pas pris en charge dans les régions de Chine.

En règle générale, vous chiffrez vos éléments de clé lorsque vous les exportez à partir du module de sécurité matérielle (HSM) ou du système de gestion de clés. Pour plus d'informations sur l'exportation des clés au format binaire, consultez la documentation relative au module HSM ou au système de gestion de clés. Vous pouvez également vous reporter à la section suivante qui fournit la démonstration d'une preuve de concept à l'aide d'OpenSSL.

Lorsque vous chiffrez vos éléments de clé, utilisez le même algorithme d’encapsulage que celui que vous avez spécifié lorsque vous avez [téléchargé la clé publique et le jeton d'importation](importing-keys-get-public-key-and-token.md). Pour trouver l'algorithme d'encapsulage que vous avez spécifié, consultez le CloudTrail journal des événements de la [GetParametersForImport](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html)demande associée.

## Générer un élément de clé à tester
<a name="importing-keys-example-key-material"></a>

Les commandes OpenSSL suivantes génèrent des éléments de clés pour chaque type pris en charge à des fins de test. Ces exemples sont fournis uniquement à des fins de test et de proof-of-concept démonstration. Pour les systèmes de production, utilisez une méthode plus sécurisée pour générer votre élément de clé, notamment un module de sécurité matériel ou un système de gestion de clé.

Pour convertir les clés privées des paires de clés asymétriques au format codé DER, dirigez la commande de génération de l’élément de clé vers la commande `openssl pkcs8` suivante. Le paramètre `topk8` indique à OpenSSL de prendre une clé privée en entrée et de renvoyer une clé au format PKCS \#8. (Le comportement par défaut est le contraire.) 

```
openssl pkcs8 -topk8 -outform der -nocrypt
```

Les commandes suivantes génèrent des éléments de clés de test pour chaque type de clé pris en charge.
+ Clé de chiffrement symétrique (32 octets)

  Cette commande génère une clé symétrique de 256 bits (chaîne aléatoire de 32 octets) et l'enregistre dans le fichier `PlaintextKeyMaterial.bin`. Vous n'avez pas besoin d'encoder cet élément de clé. 

  ```
  openssl rand -out PlaintextKeyMaterial.bin 32
  ```

  Dans les régions de Chine uniquement, vous devez générer une clé symétrique de 128 bits (chaîne aléatoire de 16 octets).

  ```
  openssl rand -out PlaintextKeyMaterial.bin 16
  ```
+ Clés HMAC

  Cette commande génère une chaîne d'octets aléatoire de la taille spécifiée. Vous n'avez pas besoin d'encoder cet élément de clé. 

  La longueur de votre clé HMAC doit correspondre à la longueur définie par la spécification de clé de la clé KMS. Par exemple, si la clé KMS est HMAC\_384, vous devez importer une clé de 384 bits (48 octets).

  ```
  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
  ```
+ Clés privées 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
  ```
+ Clés privées ECC

  ```
  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 clés privées (régions de Chine uniquement)

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

## Exemple de chiffrement des éléments de clé avec OpenSSL
<a name="importing-keys-encrypt-key-material-openssl"></a>

Les exemples suivants montrent comment utiliser [OpenSSL](https://openssl.org/) pour chiffrer votre élément de clé avec la clé publique que vous avez téléchargée. Pour chiffrer votre contenu clé à l'aide d'une clé SM2 publique (régions de Chine uniquement), utilisez la [`SM2OfflineOperationHelper`classe](offline-operations.md#key-spec-sm-offline-helper). Pour plus d'informations sur les principaux types de matériaux pris en charge par chaque algorithme d'emballage, consultez[Sélectionner un algorithme d'encapsulage](importing-keys-get-public-key-and-token.md#select-wrapping-algorithm).

**Important**  
Ces exemples sont la démonstration d'une preuve de concept uniquement. Pour les systèmes de production, utilisez une méthode plus sécurisée (par exemple, un système de gestion de clés ou un module HSM commercial) pour générer et stocker vos éléments de clé.  
La combinaison suivante n'est PAS prise en charge : l’élément de clé ECC\_NIST\_P521, la spécification de clé d'encapsulage publique RSA\_2048 et un algorithme d'encapsulage RSAES\_OAEP\_SHA\_\*.  
Vous ne pouvez pas directement encapsuler l’élément de clé ECC\_NIST\_P521 avec une clé d'encapsulage publique RSA\_2048. Utilisez une clé d'encapsulage plus grande ou un algorithme d'encapsulage RSA\_AES\_KEY\_WRAP\_SHA\_\*.

------
#### [ RSAES\_OAEP\_SHA\_1 ]

AWS KMS prend en charge le RSAES\_OAEP\_SHA\_1 pour les clés de chiffrement symétriques (SYMMETRIC\_DEFAULT), les clés privées à courbe elliptique (ECC), les clés privées et les clés HMAC. SM2 

RSAES\_OAEP\_SHA\_1 n'est pas pris en charge pour les clés privées RSA. Vous ne pouvez pas non plus utiliser une clé publique d’encapsulage RSA\_2048 avec un algorithme d'encapsulage RSAES\_OAEP\_SHA\_\* pour encapsuler une clé privée ECC\_NIST\_P521 (secp521r1). Vous devez utiliser une clé d'encapsulage plus grande ou un algorithme d'encapsulage RSA\_AES\_KEY\_WRAP.

L'exemple suivant chiffre votre élément de clé avec la [clé publique que vous avez téléchargée](importing-keys-get-public-key-and-token.md) et l'algorithme d'encapsulage RSAES\_OAEP\_SHA\_1, puis l'enregistre dans le fichier `EncryptedKeyMaterial.bin`. 

Dans cet exemple :
+ {{`WrappingPublicKey.bin`}} est le fichier qui contient la clé publique d'encapsulage téléchargée. 
+ {{`PlaintextKeyMaterial.bin`}} est le fichier qui contient l’élément de clé que vous chiffres, tel que `PlaintextKeyMaterial.bin`, `HMAC_384_PlaintextKey.bin` ou `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 prend en charge le RSAES\_OAEP\_SHA\_256 pour les clés de chiffrement symétriques (SYMMETRIC\_DEFAULT), les clés privées à courbe elliptique (ECC), les clés privées et les clés HMAC. SM2 

RSAES\_OAEP\_SHA\_256 n'est pas pris en charge pour les clés privées RSA. Vous ne pouvez pas non plus utiliser une clé publique d’encapsulage RSA\_2048 avec un algorithme d'encapsulage RSAES\_OAEP\_SHA\_\* pour encapsuler une clé privée ECC\_NIST\_P521 (secp521r1). Vous devez utiliser une clé d'encapsulage plus grande ou un algorithme d'encapsulage RSA\_AES\_KEY\_WRAP.

L'exemple suivant chiffre votre élément de clé avec la [clé publique que vous avez téléchargée](importing-keys-get-public-key-and-token.md) et l'algorithme d'encapsulage RSAES\_OAEP\_SHA\_256, puis l'enregistre dans le fichier `EncryptedKeyMaterial.bin`. 

Dans cet exemple :
+ {{`WrappingPublicKey.bin`}} est le fichier qui contient la clé publique d'encapsulage téléchargée. Si vous avez téléchargé la clé publique à partir de la console, ce fichier est nommé `wrappingKey_{{KMS key_key_ID}}_{{timestamp}}` (par exemple, `wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909`). 
+ {{`PlaintextKeyMaterial.bin`}} est le fichier qui contient l’élément de clé que vous chiffres, tel que `PlaintextKeyMaterial.bin`, `HMAC_384_PlaintextKey.bin` ou `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'algorithme d'encapsulage RSA\_AES\_KEY\_WRAP\_SHA\_1 implique deux opérations de chiffrement.

1. Chiffrez votre élément de clé à l'aide d'une clé symétrique AES que vous générez et d'un algorithme de chiffrement symétrique AES.

1. Chiffrez la clé symétrique AES que vous avez utilisée avec la clé publique que vous avez téléchargée et l'algorithme d'encapsulage RSAES\_OAEP\_SHA\_1.

L'algorithme d'encapsulage RSA\_AES\_KEY\_WRAP\_SHA\_1 nécessite la version 3.*x* ou version ultérieure d'OpenSSL.

1. 

**Générez une clé de chiffrement symétrique AES 256 bits**

   Cette commande génère une clé de chiffrement symétrique AES composée de 256 bits aléatoires et l'enregistre dans le fichier `aes-key.bin`

   ```
   # Generate a 32-byte AES symmetric encryption key
   $ openssl rand -out aes-key.bin 32
   ```

1. 

**Chiffrez votre élément de clé avec la clé de chiffrement symétrique AES**

   Cette commande chiffre l’élément de votre clé avec la clé de chiffrement symétrique AES et enregistre le contenu de la clé chiffrée dans le fichier `key-material-wrapped.bin`.

   Dans cet exemple de commande :
   + {{`PlaintextKeyMaterial.bin`}} est le fichier qui contient l’élément de clé que vous importez, tel que `PlaintextKeyMaterial.bin`, `HMAC_384_PlaintextKey.bin`, `RSA_3072_PrivateKey.der`, ou `ECC_NIST_P521_PrivateKey.der`.
   + {{`aes-key.bin`}} est le fichier qui contient la clé de chiffrement symétrique AES 256 bits que vous avez générée dans la commande précédente.

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

**Chiffrez votre clé de chiffrement symétrique AES avec la clé publique**

   Cette commande chiffre votre clé de chiffrement symétrique AES avec la clé publique que vous avez téléchargée et l'algorithme d'encapsulage RSAES\_OAEP\_SHA\_1, la code DER et l'enregistre dans le fichier `aes-key-wrapped.bin`. 

   Dans cet exemple de commande :
   + {{`WrappingPublicKey.bin`}} est le fichier qui contient la clé publique d'encapsulage téléchargée. Si vous avez téléchargé la clé publique à partir de la console, ce fichier est nommé `wrappingKey_{{KMS key_key_ID}}_{{timestamp}}` (par exemple, `wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909`)
   + {{`aes-key.bin`}} est le fichier qui contient la clé de chiffrement symétrique AES 256 bits que vous avez générée dans la première commande de cette séquence d’exemple.

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

**Générez le fichier à importer**

   Concaténez le fichier contenant l’élément de clé chiffré et le fichier contenant la clé AES chiffrée. Enregistrez-les dans le fichier `EncryptedKeyMaterial.bin`, qui est le fichier que vous allez importer dans le [Étape 4 : Importation des éléments de clé](importing-keys-import-key-material.md).

   Dans cet exemple de commande :
   + {{`key-material-wrapped.bin`}} est le fichier qui contient votre élément de clé chiffré.
   + {{`aes-key-wrapped.bin`}} est le fichier qui contient la clé de chiffrement AES chiffrée.

   ```
   # 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'algorithme d'encapsulage RSA\_AES\_KEY\_WRAP\_SHA\_256 implique deux opérations de chiffrement.

1. Chiffrez votre élément de clé à l'aide d'une clé symétrique AES que vous générez et d'un algorithme de chiffrement symétrique AES.

1. Chiffrez la clé symétrique AES que vous avez utilisée avec la clé publique que vous avez téléchargée et l'algorithme d'encapsulage RSAES\_OAEP\_SHA\_256.

L'algorithme d'encapsulage RSA\_AES\_KEY\_WRAP\_SHA\_256 nécessite la version 3.*x* ou version ultérieure d'OpenSSL.

1. 

**Générez une clé de chiffrement symétrique AES 256 bits**

   Cette commande génère une clé de chiffrement symétrique AES composée de 256 bits aléatoires et l'enregistre dans le fichier `aes-key.bin`

   ```
   # Generate a 32-byte AES symmetric encryption key
   $ openssl rand -out aes-key.bin 32
   ```

1. 

**Chiffrez votre élément de clé avec la clé de chiffrement symétrique AES**

   Cette commande chiffre l’élément de votre clé avec la clé de chiffrement symétrique AES et enregistre le contenu de la clé chiffrée dans le fichier `key-material-wrapped.bin`.

   Dans cet exemple de commande :
   + {{`PlaintextKeyMaterial.bin`}} est le fichier qui contient l’élément de clé que vous importez, tel que `PlaintextKeyMaterial.bin`, `HMAC_384_PlaintextKey.bin`, `RSA_3072_PrivateKey.der`, ou `ECC_NIST_P521_PrivateKey.der`.
   + {{`aes-key.bin`}} est le fichier qui contient la clé de chiffrement symétrique AES 256 bits que vous avez générée dans la commande précédente.

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

**Chiffrez votre clé de chiffrement symétrique AES avec la clé publique**

   Cette commande chiffre votre clé de chiffrement symétrique AES avec la clé publique que vous avez téléchargée et l'algorithme d'encapsulage RSAES\_OAEP\_SHA\_256, la code DER et l'enregistre dans le fichier `aes-key-wrapped.bin`. 

   Dans cet exemple de commande :
   + {{`WrappingPublicKey.bin`}} est le fichier qui contient la clé publique d'encapsulage téléchargée. Si vous avez téléchargé la clé publique à partir de la console, ce fichier est nommé `wrappingKey_{{KMS key_key_ID}}_{{timestamp}}` (par exemple, `wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909`)
   + {{`aes-key.bin`}} est le fichier qui contient la clé de chiffrement symétrique AES 256 bits que vous avez générée dans la première commande de cette séquence d’exemple.

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

**Générez le fichier à importer**

   Concaténez le fichier contenant l’élément de clé chiffré et le fichier contenant la clé AES chiffrée. Enregistrez-les dans le fichier `EncryptedKeyMaterial.bin`, qui est le fichier que vous allez importer dans le [Étape 4 : Importation des éléments de clé](importing-keys-import-key-material.md).

   Dans cet exemple de commande :
   + {{`key-material-wrapped.bin`}} est le fichier qui contient votre élément de clé chiffré.
   + {{`aes-key-wrapped.bin`}} est le fichier qui contient la clé de chiffrement AES chiffrée.

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

------

Passez à [Étape 4 : Importation des éléments de clé](importing-keys-import-key-material.md).