Passer au contenu

Comment puis-je vérifier des signatures générées par les clés asymétriques AWS KMS ?

Lecture de 3 minute(s)
0

Je souhaite utiliser AWS Key Management Service (AWS KMS) pour signer un fichier. Ensuite, je souhaite partager le fichier, sa signature et la clé publique pour vérifier la validité de la signature. Je ne souhaite pas fournir aux utilisateurs un accès API leur permettant d'accéder à ma clé AWS KMS.

Résolution

L'exemple suivant utilise AWS KMS avec une paire de clés asymétrique ECC_NIST_P256 (secp256r1). Lorsqu'AWS KMS utilise cette paire de clés pour générer un fichier de signature, celui-ci est créé conformément à la norme NIST FIPS 168-4. Une signature numérique ECDSA contenant des valeurs (r, s) est générée comme spécifié dans ANS X9.62. En raison de la norme ouverte, vous pouvez utiliser OpenSSL pour vérifier la signature.

Pour obtenir le format de signature des paires de clés RSA, consultez la section Spécifications clés RSA relatives à la signature et à la vérification.

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

Signer un fichier local

Après avoir créé la clé asymétrique AWS KMS dans votre compte AWS, utilisez l'interface de ligne de commande AWS pour faire référence à la clé lorsque vous signez un fichier. La réponse que vous recevez de l'API AWS KMS est codée en base64. L'exemple suivant utilise le paramètre --query pour obtenir la valeur de signature de la réponse et la placer dans le fichier sign.b64 :

[ec2-user@ip-172-31-23-22 ~]$ aws kms sign --key-id arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab --message fileb://message.txt --signing-algorithm ECDSA_SHA_256 --query 'Signature' --output text > sign.b64

Remarque : Vous pouvez envoyer des messages d’une taille maximale de 4 096 octets. Pour signer un message plus volumineux, générez une empreinte de hachage du message. Puis, indiquez l’empreinte de hachage dans le paramètre du message. Pour indiquer s'il s'agit d'un message complet ou d'un résumé, utilisez le paramètre MessageType. Notez l'algorithme de signature pour vérifier la signature ultérieurement.

La signature étant au format base64, exécutez la commande de codage Linux base64 suivante pour convertir le format en binaire :

[ec2-user@ip-172-31-23-22 ~]$ base64 -d sign.b64 > sign.bin

Exécutez la commande suivante pour décoder les fichiers base64 pour le système d'exploitation Windows :

certutil -decode C:\Temp\sign.b64 C:\Temp\sign.bin

Vous pouvez maintenant partager le fichier de signature sign.b64.

Vérifier la signature AWS KMS

Pour vérifier le fichier de signature, vous devez disposer de la clé publique. Pour obtenir la clé publique, exécutez la commande get-public-key de l'interface de ligne de commande AWS:

[ec2-user@ip-172-31-23-22 ~]$ aws kms get-public-key --key-id arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab --output text --query 'PublicKey' > KMSPublic.b64

Exécutez la commande suivante pour convertir le fichier base64 en fichier codé DER nommé KMSPublic.key :

[ec2-user@ip-172-31-23-22 ~]$ base64 -d KMSPublic.b64 > KMSPublic.key

Vous disposez maintenant de la clé publique et de la signature au format binaire avec le fichier message.txt.

Pour vérifier la signature, exécutez la commande OpenSSL dgst :

[ec2-user@ip-172-31-23-22 ~]$ openssl dgst -sha256 -verify KMSPublic.key -keyform DER -signature sign.bin message.txtVerified OK

La vérification est réussie lorsque la sortie indique « OK vérifié ».

Si vous ne recevez pas de réponse de vérification, vérifiez les points suivants :

  • L'algorithme de signature OpenSSL est le même que celui que vous avez utilisé pour signer le fichier.
  • Vos fichiers ne sont pas codés en base64.

Informations connexes

Primitives cryptographiques

Concepts d’AWS KMS

AWS OFFICIELA mis à jour il y a 2 ans