Ce document fournit des informations sur la création et l'utilisation d'une clé pour le chiffrement asymétrique à l'aide d'une clé RSA. Si vous souhaitez utiliser des clés asymétriques pour créer et valider des signatures, consultez la page Créer et valider des signatures numériques. Si vous souhaitez utiliser des clés symétriques pour le chiffrement et le déchiffrement, consultez la page Chiffrer et déchiffrer des données.
Le chiffrement asymétrique utilise la partie clé publique de la clé asymétrique, et le déchiffrement utilise la partie clé privée. Cloud Key Management Service fournit des fonctionnalités permettant de récupérer la clé publique et de déchiffrer le texte chiffré avec la clé publique. Cloud KMS n'autorise pas l'accès direct à la clé privée.
Avant de commencer
Ce document fournit des exemples qui s'exécutent sur la ligne de commande. Pour simplifier l'utilisation des exemples, utilisez Cloud Shell. L'exemple de chiffrement utilise OpenSSL, pré-installé sur Cloud Shell.
Créez une clé asymétrique dotée de l'objectif
ASYMMETRIC_DECRYPT. Pour connaître les algorithmes compatibles avec l'objectif de cléASYMMETRIC_DECRYPT, consultez Algorithmes de chiffrement asymétrique. Vous ne pouvez pas suivre cette procédure avec une clé dont l'objectif estASYMMETRIC_SIGN.Si vous prévoyez d'utiliser la ligne de commande, installez OpenSSL si vous ne l'avez pas déjà fait. Si vous utilisez Cloud Shell, OpenSSL est déjà installé.
- Utilisateurs de macOS : la version d'OpenSSL installée sur macOS n'est pas compatible avec les options utilisées pour déchiffrer les données dans ce sujet. Pour suivre ces étapes sur macOS, installez OpenSSL à partir de Homebrew.
Contrôler l'accès à la clé
Pour un utilisateur ou un service qui récupère la clé publique, accordez l'autorisation
cloudkms.cryptoKeyVersions.viewPublicKeysur la clé asymétrique. La clé publique est requise pour chiffrer les données.Pour un utilisateur ou un service qui déchiffrera les données chiffrées avec la clé publique, accordez l'autorisation
cloudkms.cryptoKeyVersions.useToDecryptsur la clé asymétrique.
Pour en savoir plus sur les autorisations et les rôles dans Cloud KMS, consultez Autorisations et rôles.
Chiffrer des données
Pour chiffrer des données à l'aide d'une clé de chiffrement asymétrique, récupérez la clé publique et utilisez-la pour chiffrer les données.
gcloud
Cet exemple nécessite l'installation d'OpenSSL sur votre système local.
Télécharger la clé publique
Téléchargez la clé publique :
gcloud kms keys versions get-public-key KEY_VERSION \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--output-file PUBLIC_KEY_PATH
Remplacez les éléments suivants :
KEY_VERSION: version de la paire de clés asymétriques pour laquelle vous souhaitez télécharger la clé publique.KEY_NAME: nom de la clé.KEY_RING: trousseau de clés contenant la clé.LOCATION: emplacement du trousseau de clés.PUBLIC_KEY_PATH: chemin d'accès où vous souhaitez enregistrer la clé publique.
Chiffrer des données
Chiffrez les données en utilisant la clé publique que vous venez de télécharger, puis enregistrez le résultat dans un fichier :
openssl pkeyutl -in INPUT_PATH \
-encrypt \
-pubin \
-inkey PUBLIC_KEY_PATH \
-pkeyopt rsa_padding_mode:oaep \
-pkeyopt rsa_oaep_md:HASH_SIZE \
-pkeyopt rsa_mgf1_md:HASH_SIZE \
> OUTPUT_PATH
Remplacez les éléments suivants :
INPUT_PATH: chemin d'accès aux données en texte brut que vous souhaitez chiffrer.PUBLIC_KEY_PATH: chemin d'accès à la clé publique.HASH_SIZE: taille du hachage (par exemple,256pour SHA256).OUTPUT_PATH: chemin d'accès où vous souhaitez enregistrer les données chiffrées.
C#
Pour exécuter ce code, commencez par configurer un environnement de développement C#, puis installez le SDK Cloud KMS pour C#.
Go
Pour utiliser Cloud KMS sur la ligne de commande, commencez par installer ou mettre à jour la dernière version de la Google Cloud CLI.
Java
Pour exécuter ce code, commencez par configurer un environnement de développement Java et installez le SDK Cloud KMS pour Java.
Node.js
Pour exécuter ce code, commencez par configurer un environnement de développement Node.js, puis installez le SDK Cloud KMS pour Node.js.
PHP
Pour exécuter ce code, découvrez d'abord comment utiliser PHP sur Cloud de Confiance et installez le SDK PHP Cloud KMS.
Python
Pour exécuter ce code, commencez par configurer un environnement de développement Python, puis installez le SDK Cloud KMS pour Python.
Ruby
Pour exécuter ce code, commencez par configurer un environnement de développement Ruby, puis installez le SDK Cloud KMS pour Ruby.
Déchiffrer des données
Utilisez Cloud KMS pour réaliser le déchiffrement.
gcloud
Pour utiliser Cloud KMS sur la ligne de commande, commencez par installer ou mettre à jour la dernière version de la Google Cloud CLI.
gcloud kms asymmetric-decrypt \
--version KEY_VERSION \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--ciphertext-file INPUT_PATH \
--plaintext-file OUTPUT_PATH
Remplacez les éléments suivants :
KEY_VERSION: version de la paire de clés asymétriques utilisée pour chiffrer les données. Vous pouvez omettre l'option--versionpour détecter automatiquement la version.KEY_NAME: nom de la clé utilisée pour chiffrer les données.KEY_RING: nom du trousseau de clés qui inclut la cléLOCATION: emplacement du trousseau de clés.INPUT_PATH: chemin d'accès au fichier contenant le texte chiffré.OUTPUT_PATH: chemin d'accès au fichier qui contiendra le texte brut.
Pour en savoir plus sur toutes les options et valeurs possibles, exécutez la commande avec l'option --help.
Pour afficher le contenu du fichier déchiffré, ouvrez-le dans un éditeur de texte ou utilisez la commande cat pour l'afficher dans un terminal.
C#
Pour exécuter ce code, commencez par configurer un environnement de développement C#, puis installez le SDK Cloud KMS pour C#.
Go
Pour exécuter ce code, commencez par configurer un environnement de développement Go, puis installez le SDK Cloud KMS pour Go.
Java
Pour exécuter ce code, commencez par configurer un environnement de développement Java et installez le SDK Cloud KMS pour Java.
Node.js
Pour exécuter ce code, commencez par configurer un environnement de développement Node.js, puis installez le SDK Cloud KMS pour Node.js.
PHP
Pour exécuter ce code, découvrez d'abord comment utiliser PHP sur Cloud de Confiance et installez le SDK PHP Cloud KMS.
Python
Pour exécuter ce code, commencez par configurer un environnement de développement Python, puis installez le SDK Cloud KMS pour Python.
Ruby
Pour exécuter ce code, commencez par configurer un environnement de développement Ruby, puis installez le SDK Cloud KMS pour Ruby.
API
Ces exemples utilisent curl comme client HTTP pour démontrer l'utilisation de l'API. Pour en savoir plus sur le contrôle des accès, consultez la page Accéder à l'API Cloud KMS.
Utilisez la méthode CryptoKeyVersions.asymmetricDecrypt.
Dépannage
incorrect key purpose: ASYMMETRIC_SIGN
Vous pouvez uniquement déchiffrer des données avec une clé dotée de l'objectif ASYMMETRIC_DECRYPT.
invalid parameter lors du déchiffrement sur macOS
La version d'OpenSSL installée sur macOS n'est pas compatible avec les options utilisées pour déchiffrer les données dans ce sujet. Pour suivre ces étapes sur macOS, installez OpenSSL à partir de Homebrew.
data too large for key size
La taille maximale de la charge utile pour le déchiffrement RSA dépend de la taille de la clé et de l'algorithme de remplissage. Tous les formats de chiffrement RSA utilisés par Cloud KMS utilisent OAEP, normalisé dans la RFC 2437. À titre de référence, les algorithmes suivants sont compatibles avec les tailles de charge utile maximales suivantes.
| Algorithme | Paramètres | Longueur maximale du message (octets) |
|---|---|---|
| RSA_DECRYPT_OAEP_2048_SHA256 | k = 256 ; hLen = 32 ; | 190 |
| RSA_DECRYPT_OAEP_3072_SHA256 | k = 384 ; hLen = 32 ; | 318 |
| RSA_DECRYPT_OAEP_4096_SHA256 | k = 512 ; hLen = 32 ; | 446 |
| RSA_DECRYPT_OAEP_4096_SHA512 | k = 512 ; hLen = 64 ; | 382 |
Le chiffrement asymétrique n'est pas recommandé pour les messages de longueur variable qui peuvent être supérieurs à ces limites. Préférez plutôt un chiffrement hybride. Tink est une bibliothèque de cryptographie qui utilise cette approche.