Importation des éléments de clé – Étape 3 : Chiffrement des éléments de clé - AWS Key Management Service

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.

Importation des éléments de clé – Étape 3 : Chiffrement des éléments de clé

Après avoir téléchargé la clé publique et le jeton d'importation, 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 aux sections etSélectionner un algorithme d'encapsulage.

La clé doit être au format binaire. Pour plus d’informations, consultez Exigences relatives aux éléments de clé importés.

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

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. Pour trouver l'algorithme d'encapsulage que vous avez spécifié, consultez le CloudTrail journal des événements de la GetParametersForImportdemande associée.

Générer un élément de clé à tester

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
  • Clés privées SM2 (régions chinoises 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

Les exemples suivants montrent comment utiliser OpenSSL 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é publique SM2 (régions chinoises uniquement), utilisez la SM2OfflineOperationHelper classe.

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 SM2 et les clés HMAC.

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 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 SM2 et les clés HMAC.

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

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

AWS KMS prend en charge les algorithmes d'encapsulage RSA_AES_KEY_WRAP_SHA_* pour tous les types de documents clés importés pris en charge et toutes les spécifications de clés publiques prises en charge. Les algorithmes RSA_AES_KEY_WRAP_SHA_* sont les seuls algorithmes d'encapsulage pris en charge pour encapsuler l’élément de clé RSA.

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
  2. 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
  3. 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
  4. 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é.

    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.

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

AWS KMS prend en charge les algorithmes d'encapsulage RSA_AES_KEY_WRAP_SHA_* pour tous les types de documents clés importés pris en charge et toutes les spécifications de clés publiques prises en charge. Les algorithmes RSA_AES_KEY_WRAP_SHA_* sont les seuls algorithmes d'encapsulage pris en charge pour encapsuler l’élément de clé RSA.

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
  2. 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
  3. 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
  4. 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é.

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