Comment puis-je utiliser les clés asymétriques AWS KMS pour chiffrer un fichier à l'aide d'OpenSSL ?

Dernière mise à jour : 04/08/2022

Je souhaite utiliser les clés Key Management Service (AWS KMS) pour chiffrer un fichier à l'aide d'OpenSSL. Comment procéder ?

Brève description

Vous ne pouvez pas chiffrer de grandes quantités de données avec des clés RSA. Par exemple, pour chiffrer une paire de clés RSA de 2 048 octets avec RSAES_OAEP_SHA_256, la plus grande quantité que vous pouvez chiffrer est de 190 octets. Avec les clés AES (Advanced Encryption Standard), vous pouvez diviser vos données en plus petits morceaux à l'aide de la chaîne de blocs de chiffrement (CBC).

Solution

Suivez ces instructions pour chiffrer et déchiffrer les clés à l'aide de CBC.

Remarque : si vous recevez des erreurs lors de l'exécution de commandes de l'interface de la ligne de commande AWS (AWS CLI), assurez-vous d'utiliser la version la plus récente de l'AWS CLI.

Créez la paire de clés RSA, téléchargez la clé publique et créez une clé AES 256 octets

1.    Suivez les instructions pour créer la paire de clés RSA avec AWS Management Console (Console de gestion AWS).

2.    Téléchargez la clé publique à l'aide de la commande get-public-key de l'AWS CLI similaire à la suivante :

$ aws kms get-public-key --key-id arn:aws:kms:eu-west-1:123456789012:key/d74f5077-811b-4447-af65-71f5f64f37d3 --output text --query 'PublicKey' > RSAPublic.b64 && base64 -d RSAPublic.b64 > RSAPublic.bin
Remarque : la fonction --query récupère uniquement la clé publique, puis décode le fichier base64 en une clé DER.

3.    Créez une clé AES 256 octets à l'aide de la commande OpenSSL rand pour générer des données aléatoires, puis envoyez-la dans le fichier key.bin de la manière suivante :

$ openssl rand -base64 32 > key.bin

Chiffrez vos données

1.    Chiffrez vos données à l'aide du fichier key.bin avec la commande OpenSSL enc chiffrée en CBC de la manière suivante :

$ openssl enc -aes-256-cbc -salt -pbkdf2 -in FILE_TO_ENCRYPT -out FILE_TO_ENCRYPT.enc -pass file:./key.bin

Remarque :

  • La commande -pbkdf2 n'est disponible qu'avec OpenSSL 1.1.1. OpenSSL 1.0.2 est installé sur l'AMI Amazon Linux 2, qui ne prend pas en charge la commande -pbkdf2.
  • CBC vous permet de chiffrer des fichiers de n'importe quelle taille.
  • Remplacez la valeur FILE_TO_ENCRYPT par le nom du fichier à chiffrer.

2.    Chiffrez votre clé AES 256 octets key.bin avec la clé publique AWS KMS. Cela permet de vérifier que la clé de vos données est sécurisée. Seuls les utilisateurs ayant accès à votre clé privée AWS KMS peuvent accéder à la clé key.bin.

Exécutez la commande OpenSSL pkeyutl de la manière suivante :

$ openssl pkeyutl -in key.bin -out enc.key.bin -inkey RSAPublic.bin -keyform DER -pubin -encrypt -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256

Remarque : la commande pkeyutl utilise un algorithme de chiffrement pris en charge pour le déchiffrement par l'API AWS KMS (RSAES_OAEP_SHA_256). La clé publique AWS KMS RSAPublic.bin chiffre la clé AES 256 octets et crée un nouveau fichier nommé enc.key.bin.

3.    Chiffrez le fichier key.bin afin que les utilisateurs ne puissent pas y accéder s'ils ne peuvent pas déchiffrer le fichier enc.key.bin à l'aide de la commande rm de l'AWS CLI similaire à la suivante :

$ rm key.bin && rm FILE_TO_ENCRYPT

Remarque : vous pouvez également choisir de supprimer le fichier d'origine que vous souhaitez chiffrer afin que les utilisateurs ne puissent pas y accéder.

Vous disposez désormais des éléments suivants :

  • Les données chiffrées dans le fichier FILE_TO_ENCRYPT.enc.
  • La clé chiffrée AES 256 octets enc.key.bin.
  • La clé publique AWS KMS RSAPublic.bin.

Remarque : les utilisateurs disposant de données chiffrées doivent vous envoyer ces fichiers pour les déchiffrer.

Déchiffrage des fichiers qui vous sont envoyés

Pour récupérer les données chiffrées, déchiffrez la clé AES 256 octets, puis utilisez cette clé pour déchiffrer le fichier de données FILE_TO_ENCRYPT.enc.

Remarque : vous devez avoir accès à l'API AWS KMS, car la clé privée AWS KMS ne peut pas être affichée en texte brut.

1.    Déchiffrez la clé AES 256 octets et déposez le fichier enc.key.bin à l'API AWS KMS à l'aide de la commande decrypt de l'AWS CLI similaire à ce qui suit :

$ aws kms decrypt --key-id arn:aws:kms:eu-west-1:123456789012:key/d74f5077-811b-4447-af65-71f5f64f37d3 --ciphertext-blob fileb://enc.key.bin --encryption-algorithm RSAES_OAEP_SHA_256 --output text --query 'Plaintext' | base64 --decode > decryptedKey.bin
Remarque : la fonction --query sélectionne le texte en clair, puis décode la valeur base64 dans le fichier decryptedKey.bin.

2.    Exécutez la commande OpenSSL enc à l'aide du fichier decryptedKey.bin pour générer une sortie vers DECRYPTED_FILE de la manière suivante :

$ openssl enc -d -aes-256-cbc -pbkdf2 -in FILE_TO_ENCRYPT.enc -out DECRYPTED_FILE -pass file:./decryptedKey.bin

Remarque : remplacez la valeur DECRYPTED_FILE par le nom du fichier que vous souhaitez déchiffrer.

Vous pouvez comparer DECRYPTED_FILE et FILE_TO_ENCRYPT pour vous assurer que le chiffrement et le déchiffrement se sont bien déroulés.


Cet article vous a-t-il été utile ?


Avez-vous besoin d'aide pour une question technique ou de facturation ?