Cet article fournit des informations sur la création et la validation de signatures numériques basées sur des clés asymétriques.
Une signature numérique est créée à l'aide de la partie clé privée d'une clé asymétrique. Elle est validée à l'aide de la partie clé publique de cette même clé asymétrique.
Avant de commencer
Lorsque vous créez des signatures numériques, vous devez utiliser une clé dotée de l'objectif
ASYMMETRIC_SIGN
. Lorsque vous créez la clé , utilisezASYMMETRIC_SIGN
.Pour valider une signature, vous devez connaître l'algorithme complet utilisé lors de la création de la clé. Pour les instructions de ligne de commande ci-dessous qui utilisent la commande
openssl
, vous devez transmettre ces informations à ces commandes.Accordez l'autorisation
cloudkms.cryptoKeyVersions.useToSign
sur la clé asymétrique à l'utilisateur ou au service qui effectuera la signature. Pour en savoir plus sur les autorisations et les rôles dans Cloud Key Management Service, consultez la page Autorisations et rôles.Si vous souhaitez valider une signature, accordez l'autorisation
cloudkms.cryptoKeyVersions.viewPublicKey
sur la clé asymétrique à l'utilisateur ou au service qui téléchargera la clé publique à utiliser pour la validation.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é.
Données et condensé
L'entrée fournie pour les requêtes AsymmetricSign peut être transmise via le champ data
ou le champ digest
. Ces champs ne peuvent pas être spécifiés simultanément. Certains algorithmes nécessitent le champ de données, tels que les algorithmes bruts et la signature avec une clé Cloud External Key Manager.
Algorithmes bruts
Les algorithmes "bruts", identifiés par le préfixe RSA_SIGN_RAW_
, sont une variante de la signature PKCS #1 qui omet l'encodage dans un condensé DigestInfo. Dans la variante :
- Un condensé est calculé sur le message qui sera signé.
- Le remplissage PKCS #1 est appliqué directement au condensé.
- Une signature du condensé complété est calculée à l'aide de la clé privée RSA.
Pour utiliser ces algorithmes, procédez comme suit :
- Les données brutes doivent être fournies (au lieu d'un condensé) dans le champ
data
. - La longueur des données est limitée à 11 octets de la taille de la clé RSA. Par exemple, le format PKCS #1 avec une clé RSA de 2 048 bits peut signer au maximum 245 octets.
- Attribuez le rôle
cloudkms.expertRawPKCS1
à l'utilisateur ou au service approprié. Pour en savoir plus sur les autorisations et les rôles dans Cloud Key Management Service, consultez la page Autorisations et rôles.
Compatibilité ECDSA avec d'autres algorithmes de hachage
Nos algorithmes de signature ECDSA ont le format général suivant:
EC_SIGN_ELLIPTIC_CURVE_[DIGEST_ALGORITHM]
DIGEST_ALGORITHM a la valeur SHA256
, SHA384
ou SHA512
.
Étant donné que le hachage est effectué avant la création de la signature, ces algorithmes de signature peuvent également être utilisés avec des récapitulatifs autres que SHA, tels que Keccak. Pour utiliser un condensé Keccak, fournissez une valeur de hachage Keccak et utilisez l'algorithme de condensé SHA de la même longueur. Par exemple, vous pouvez utiliser un récapitulatif KECCAK256
dans une requête avec l'algorithme EC_SIGN_P256_SHA256
.
Créer une signature
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-sign \ --version key-version \ --key key \ --keyring key-ring \ --location location \ --digest-algorithm digest-algorithm \ --input-file input-file \ --signature-file signature-file
Remplacez key-version par la version de la clé à utiliser pour la signature. 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 digest-algorithm par l'algorithme à utiliser. Omettre digest-algorithm pour envoyer input-file à Cloud KMS pour la signature. Remplacez input-file et signature-file par les chemins d'accès locaux du fichier à signer et du fichier de signature.
Pour en savoir plus sur toutes les options et valeurs possibles, exécutez la commande avec l'option --help
.
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.asymmetricSign
pour effectuer la signature. La réponse de cette méthode contient la signature encodée en base64.
Valider une signature à courbe elliptique
gcloud
Pour utiliser Cloud KMS sur la ligne de commande, commencez par installer ou mettre à jour la dernière version de Google Cloud CLI.
Obtenir la clé publique
gcloud kms keys versions get-public-key key-version \ --key key \ --keyring key-ring \ --location location \ --output-file output-file
Remplacez key-version par la version de la clé. 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 output-file par le chemin d'accès au fichier pour enregistrer la clé publique sur le système local.
Pour en savoir plus sur toutes les options et valeurs possibles, exécutez la commande avec l'option --help
.
Vérifier la signature
Les commandes OpenSSL permettant de valider la signature dépendent du type de signature créé. Par exemple, pour valider une signature SHA-256 à courbe elliptique à l'aide d'OpenSSL, vous devez spécifier -sha256
. Pour valider une signature SHA-384 à courbe elliptique, vous devez spécifier -sha384
.
openssl dgst \ -sha256 \ -verify public-key-file \ -signature signature-file \ message-file
Remplacez les variables par vos propres valeurs :
public-key-file. Chemin d'accès à un fichier contenant la clé publique (par exemple,
"./my-key.pub"
).signature-file. Chemin d'accès vers un fichier contenant la signature à vérifier (par exemple,
"./my-data.sig"
).message-file. Chemin d'accès à un fichier contenant le message (par exemple,
"./my-data.txt"
).
Si la signature est valide, la commande génère la chaîne Verified OK
.
Pour en savoir plus sur toutes les options et valeurs possibles, exécutez la commande avec la sous-commande help
.
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.
Récupérez la clé publique à l'aide de la méthode CryptoKeyVersions.getPublicKey, puis validez la signature au moyen des commandes présentées pour l'exemple de ligne de commande.
Valider une signature RSA
gcloud
Pour utiliser Cloud KMS sur la ligne de commande, commencez par installer ou mettre à jour la dernière version de Google Cloud CLI.
Obtenir la clé publique
gcloud kms keys versions get-public-key key-version \ --key key \ --keyring key-ring \ --location location \ --output-file output-file
Remplacez key-version par la version de la clé. 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 output-file par le chemin d'accès au fichier pour enregistrer la clé publique sur le système local.
Pour en savoir plus sur toutes les options et valeurs possibles, exécutez la commande avec l'option --help
.
Vérifier la signature
Les commandes OpenSSL permettant de valider la signature dépendent du type de signature créé. Par exemple, pour valider une signature RSA SHA-256 avec un remplissage PSS, vous devez spécifier -sha256
et -sigopt rsa_padding_mode:pss
. Pour valider une signature RSA SHA-512 avec un remplissage PSS, vous devez spécifier -sha512
et -sigopt
rsa_padding_mode:pss
.
openssl dgst \ -sha256 \ -sigopt rsa_padding_mode:pss \ -sigopt rsa_pss_saltlen:-1 \ -verify public-key-file \ -signature signature-file \ message-file
Remplacez les variables par vos propres valeurs :
public-key-file. Chemin d'accès à un fichier contenant la clé publique (par exemple,
"./my-key.pub"
).signature-file. Chemin d'accès vers un fichier contenant la signature à vérifier (par exemple,
"./my-data.sig"
).message-file. Chemin d'accès à un fichier contenant le message (par exemple,
"./my-data.txt"
).
Si la signature est valide, la commande génère la chaîne Verified OK
.
Pour en savoir plus sur toutes les options et valeurs possibles, exécutez la commande avec la sous-commande help
.
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.
Récupérez la clé publique à l'aide de la méthode CryptoKeyVersions.getPublicKey
, puis validez la signature au moyen des commandes présentées pour l'exemple de ligne de commande.