J'utilise OpenSSL pour importer ma clé dans AWS KMS, mais l'erreur « InvalidCiphertext » apparaît. Comment puis-je résoudre ce problème ?

Lecture de 5 minute(s)
0

J'ai créé une clé AWS KMS dans AWS Key Management Service (AWS KMS). J'ai spécifié l'origine des clés KMS comme étant externes, choisi RSAES_OAEP_SHA_256 comme algorithme pour la clé d'encapsulage, puis utilisé OpenSSL pour chiffrer ma clé avec la clé d'encapsulage. Toutefois, lorsque j'importe mes clés chiffrées, la demande échoue et je reçois un message d'erreur, « InvalidCiphertext ». Comment puis-je éviter cette erreur d'importation ?

Brève description

Par défaut, OpenSSL utilise la fonction de hachage SHA-1.

Pour éviter les erreurs d'importation lorsque vous utilisez l'algorithme RSAES_OAEP_SHA_256 (fonction de hachage SHA-256), chiffrez votre clé avec OpenSSL à l'aide de la commande openssl pkeyutl et spécifiez les paramètres –pkeyopt rsa_padding_mode:oaep et –pkeyopt rsa_oaep_md:sha256.

Voici la procédure complète permettant d'importer des éléments de clé dans AWS KMS à l'aide d'OpenSSL et de RSAES_OAEP_SHA_256 :

1.    Créer une clé KMS en spécifiant « Externe » pour l'origine des éléments de clé.

2.    Téléchargez la clé (publique) de wrapping et le jeton d'importation.

3.    Générez une clé symétrique de 256 bits.

4.    Vérifiez que votre version d'OpenSSL prend en charge openssl pkeyutl.

5.    Chiffrez votre clé avec la clé de wrapping.

6.    Importez votre clé chiffrée.

Remarque : si vous utilisez l'algorithme de chiffrement RSAES_OAEP_SHA_1 pour votre clé d'emballage, reportez-vous à Comment importer des éléments de clé.

Solution

Créer une clé KMS en spécifiant « Externe » pour l'origine des éléments de clé

Exécutez les commandes de l'AWS Command Line Interface (AWS CLI) suivantes pour créer une clé KMS pour les éléments de clé externes.

Remarque :

export REGION=us-east-1
export KEY_ALIAS=kms_key_with_externalmaterial
export KEY_ID=`aws kms create-key --region $REGION --origin EXTERNAL --description $KEY_ALIAS --query KeyMetadata.KeyId --output text`
aws kms --region $REGION create-alias --alias-name alias/$KEY_ALIAS --target-key-id $KEY_ID

Le statut de la clé KMS que vous venez de créer reste En attente d'importation jusqu'à ce que vous importiez les éléments de la clé. Exécutez la commande suivante pour afficher le statut de la clé :

aws kms --region $REGION describe-key --key-id $KEY_ID

Télécharger la clé (publique) de wrapping et le jeton d'importation

Exécutez les commandes de l'interface de ligne de commande AWS suivantes pour obtenir les valeurs PublicKey (clé de wrapping) et ImportToken, décodez les deux valeurs à l'aide de base64, puis stockez-les dans des fichiers distincts. Notez que l'algorithme de wrapping RSAES_OAEP_SHA_256 est spécifié dans la commande get-parameters-for-import.

export KEY_PARAMETERS=`aws kms --region $REGION get-parameters-for-import --key-id $KEY_ID --wrapping-algorithm RSAES_OAEP_SHA_256 --wrapping-key-spec RSA_2048`
echo $KEY_PARAMETERS | awk '{print $7}' | tr -d '",' | base64 --decode > PublicKey.bin
echo $KEY_PARAMETERS | awk '{print $5}' | tr -d '",' | base64 --decode > ImportToken.bin

Ces commandes stockent la clé de wrapping dans PublicKey.bin et le jeton d'importation dans ImportToken.bin.

Générer une clé symétrique de 256 bits

La clé doit être une clé symétrique de 256 bits (32 octets). Exécutez l'une des commandes suivantes pour générer la clé :

OpenSSL

openssl rand -out PlaintextKeyMaterial.bin 32

-ou-

dd

dd if=/dev/urandom of=PlaintextKeyMaterial.bin bs=32 count=1

Vérifier que votre version OpenSSL prend bien en charge openssl pkeyutl

Pour chiffrer votre clé avec RSAES_OAEP_SHA_256 comme algorithme de wrapping, utilisez la commande openssl pkeyutl.

Important : cette commande est disponible uniquement sur OpenSSL 1.0.2 et les versions ultérieures.

Si vous utilisez un ordinateur Linux basé sur RHEL, comme une instance Amazon Elastic Compute Cloud (Amazon EC2) lancée avec une AMI Amazon Linux, procédez comme suit.

1.    Exécutez la commande suivante pour vérifier votre version OpenSSL.

openssl version

2.    Pour mettre à jour OpenSSL, exécutez la commande suivante.

sudo yum –y update openssl

Si vous utilisez macOS, procédez comme suit.

1.    Exécutez les commandes Homebrew suivantes :

brew update
brew upgrade openssl
brew info openssl

2.    La dernière commande indique que votre OpenSSL est installé dans /usr/local/opt/openssl/bin/. Vérifiez la version OpenSSL en exécutant la commande suivante.

/usr/local/opt/openssl/bin/openssl version

3.    Pour toujours utiliser la version OpenSSL la plus récente, modifiez ~/.bash_profile et ajoutez la ligne suivante à la fin du fichier :

export PATH="/usr/local/opt/openssl/bin:$PATH"

4.    Après avoir ajouté cette ligne, exécutez la commande suivante.

source ~/.bash_profile

5.    Pour vérifier le changement dans votre environnement macOS, exécutez la commande suivante.

echo $PATH
openssl version

Chiffrer votre clé avec la clé de wrapping

Exécutez la commande suivante pour chiffrer vos éléments de clé à l'aide de la version la plus récente d'OpenSSL et de la clé de wrapping que vous avez précédemment téléchargée.

Remarque : la clé de wrapping est stockée dans PublicKey.bin.

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

La commande génère EncryptedKeyMaterial.bin. Vous importez cette valeur en tant que clé chiffrée dans la clé KMS.

Importer votre clé chiffrée

Exécutez la commande AWS CLI suivante pour importer les éléments des clés chiffrées dans la clé KMS.

aws kms --region $REGION import-key-material --key-id $KEY_ID --encrypted-key-material fileb://EncryptedKeyMaterial.bin --import-token fileb://ImportToken.bin --expiration-model KEY_MATERIAL_DOES_NOT_EXPIRE

Après l'importation, le statut de la clé passe à Activée. Exécutez la commande suivante pour vérifier l'état de la clé.

aws kms --region $REGION describe-key --key-id $KEY_ID

Informations connexes

À propos des clés importées

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 3 ans