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