Je souhaite utiliser Key Management Service (AWS KMS) pour signer un fichier. Ensuite, je souhaite partager le fichier, sa signature et la clé publique pour vérifier que la signature est valide. Je ne souhaite pas donner l’accès à l'API aux utilisateurs pour parvenir à ma clé AWS KMS.
Solution
L'exemple suivant utilise AWS KMS avec une paire de clés asymétriques ECC_NIST_P256 (secp256r1). Lorsqu'AWS KMS génère un fichier de signature à l'aide de cette paire de clés, il 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 vérifier cette signature à l'aide d'OpenSSL.
Pour obtenir le format de signature des paires de clés RSA, suivez les instructions pour créer et gérer vos clés AWS KMS.
Remarque : si vous recevez des erreurs lors de l'exécution de commandes de l'interface de la ligne de commande AWS (AWS CLI), assurez-vous d'utiliser la version la plus récente de l'AWS CLI.
Signer un fichier local en utilisant AWS KMS
Après avoir créé la paire de clés AWS KMS dans votre compte, reportez-vous à la paire de clés à l'aide de l'AWS CLI pour signer un fichier. La réponse reçue 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 un condensé de hachage du message. Ensuite, fournissez le condensé de hachage dans le paramètre du message. Pour indiquer si le message est un message complet ou un résumé, utilisez le paramètre MessageType. Prenez note de l'algorithme de signature, car il est nécessaire pour vérifier la signature ultérieurement.
Comme la signature est au format Base64, vous pouvez la convertir au format binaire à l'aide de la commande d'encodage Linux base64 similaire à la suivante :
[ec2-user@ip-172-31-23-22 ~]$ base64 -d sign.b64 > sign.bin
Pour décoder des fichiers Base64 pour le système d'exploitation Windows, exécutez la commande suivante :
certutil -decode C:\Temp\sign.b64 C:\Temp\sign.bin
Vérifiez la signature AWS KMS à l'aide d'OpenSSL
Vous pouvez maintenant partager le fichier de signature sign.b64. 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'AWS CLI de la manière suivante :
[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
Pour convertir le fichier base64 au codage DER avec un autre fichier nommé KMSPublic.key, exécutez la commande suivante :
[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 de la manière suivante :
[ec2-user@ip-172-31-23-22 ~]$ openssl dgst -sha256 -verify KMSPublic.key -keyform DER -signature sign.bin message.txt
Verified OK
Cet exemple de sortie « Verified OK » indique que la vérification a réussi.
Si vous n'avez pas reçu de réponse de vérification, assurez-vous que :
- l'algorithme de signature OpenSSL est le même que celui qui a été utilisé pour signer le fichier ;
- vos fichiers ne sont pas codés en Base64.
Informations connexes
Primitives cryptographiques
Concepts AWS KMS