Vous trouverez dans cette rubrique des informations sur la création et l'utilisation d'une clé RSA pour le chiffrement asymétrique. 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. Une fonctionnalité de Cloud Key Management Service permet de récupérer la clé publique, et une autre fonctionnalité permet de déchiffrer le texte qui a été chiffré avec la clé publique. Cloud KMS n'autorise pas l'accès direct à la clé privée.
Avant de commencer
Cette rubrique 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 savoir quels algorithmes sont compatibles avecASYMMETRIC_DECRYPT
, consultez la page Algorithmes de chiffrement asymétrique. Vous ne pouvez pas suivre cette procédure avec une clé dotée de l'objectifASYMMETRIC_SIGN
.Si vous souhaitez utiliser la ligne de commande, installez OpenSSL si vous ne l'avez pas déjà. 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 cette rubrique. Pour suivre ces étapes sur macOS, installez OpenSSL à partir de Homebrew.
Contrôle des accès à la clé
Pour un utilisateur ou un service qui récupère la clé publique, accordez l'autorisation
cloudkms.cryptoKeyVersions.viewPublicKey
sur la clé asymétrique. La clé publique est obligatoire pour chiffrer les données.Pour un utilisateur ou un service qui déchiffre des données préalablement chiffrées avec la clé publique, accordez l'autorisation
cloudkms.cryptoKeyVersions.useToDecrypt
sur la clé asymétrique.
Pour en savoir plus sur les autorisations et les rôles dans Cloud KMS, consultez la page 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
Dans cet exemple, OpenSSL doit être installé 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 \ --keyring key-ring \ --location location \ --output-file public-key-path
Remplacez key-version par la version de clé contenant la clé publique. Remplacez key par le nom de la clé. Remplacez key-ring par le nom du trousseau de clés où se trouve la clé. Remplacez location par l'emplacement Cloud KMS du trousseau de clés. Remplacez public-key-path par l'emplacement pour enregistrer la clé publique sur le système local.
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 cleartext-data-input-file \ -encrypt \ -pubin \ -inkey public-key-path \ -pkeyopt rsa_padding_mode:oaep \ -pkeyopt rsa_oaep_md:sha256 \ -pkeyopt rsa_mgf1_md:sha256 \ > encrypted-data-output-file
Remplacez cleartext-data-input-file par le chemin d'accès et le nom du fichier à chiffrer.
Remplacez public-key-path par le chemin d'accès et le nom du fichier où vous avez téléchargé la clé publique.
Remplacez encrypted-data-output-file par le chemin d'accès et le nom du fichier pour 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 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, commencez par en apprendre plus sur l'utilisation de PHP sur Google Cloud, puis installez le SDK Cloud KMS pour PHP.
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 Google Cloud CLI.
gcloud kms asymmetric-decrypt \ --version key-version \ --key key \ --keyring key-ring \ --location location \ --ciphertext-file file-path-with-encrypted-data \ --plaintext-file file-path-to-store-plaintext
Remplacez key-version par la version de clé, ou omettez l'option --version
pour détecter automatiquement la version. Remplacez key par le nom de la clé à utiliser pour le déchiffrement. Remplacez key-ring par le nom du trousseau de clés où sera située la clé. Remplacez location par l'emplacement Cloud KMS du trousseau de clés. Remplacez file-path-with-encrypted-data et file-path-to-store-plaintext par les chemins d'accès aux fichiers locaux pour la lecture des données chiffrées et l'enregistrement du résultat déchiffré.
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 votre éditeur ou votre terminal. Voici un exemple qui montre le contenu du fichier à l'aide de la commande cat
:
cat ./my-file.txt
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, commencez par en apprendre plus sur l'utilisation de PHP sur Google Cloud, puis installez le SDK Cloud KMS pour PHP.
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 cette rubrique. 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 le remplissage OAEP, standardisé dans RFC 2437. À titre de référence, les algorithmes ci-dessous acceptent les tailles maximales de charge utile suivantes (maxMLen
, en octets):
Algorithm | Paramètres | Longueur maximum du message |
---|---|---|
RSA_DECRYPT_OAEP_2048_SHA256 | k = 256 ; hLen = 32 ; | maxMLen = 190 |
RSA_DECRYPT_OAEP_3072_SHA256 | k = 384 ; hLen = 32 ; | maxMLen = 318 |
RSA_DECRYPT_OAEP_4096_SHA256 | k = 512 ; hLen = 32 ; | maxMLen = 446 |
RSA_DECRYPT_OAEP_4096_SHA512 | k = 512 ; hLen = 64 ; | maxMLen = 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.