Wie kann ich Signaturen überprüfen, die von asymmetrischen AWS KMS-Schlüsseln generiert wurden?

Letzte Aktualisierung: 04.08.2022

Ich möchte den Key Management Service (AWS KMS) verwenden, um eine Datei zu signieren. Anschließend möchte ich die Datei, ihre Signatur und den öffentlichen Schlüssel freigeben, um zu überprüfen, ob die Signatur gültig ist. Ich möchte Benutzern keinen API-Zugriff gewähren, um auf meinen AWS KMS-Schlüssel zuzugreifen.

Auflösung

Im folgenden Beispiel wird AWS KMS mit einem asymmetrischen Schlüsselpaar ECC_NIST_P256 (secp256r1) verwendet. Wenn AWS KMS eine Signaturdatei mit diesem Schlüsselpaar generiert, wird sie gemäß NIST FIPS 168-4 erstellt. Eine digitale ECDSA-Signatur mit (r, s) -Werten wird gemäß der Spezifikation in ANS X9.62 generiert. Aufgrund des offenen Standards können Sie diese Signatur mit OpenSSL überprüfen.

Um das Signaturformat für RSA-Schlüsselpaare zu erhalten, befolgen Sie die Anweisungen zum Erstellen und Verwalten Ihrer AWS KMS-Schlüssel.

Hinweis: Wenn Sie beim Ausführen von Befehlen von AWS Command Line Interface (AWS CLI) Fehlermeldungen erhalten, stellen Sie sicher, dass Sie die neueste AWS-CLI-Version verwenden.

Signieren einer lokalen Datei mit AWS KMS

Nachdem Sie das AWS KMS-Schlüsselpaar in Ihrem Konto erstellt haben, verwenden Sie die AWS-CLI, um eine Datei zu signieren. Die von der AWS KMS-API empfangene Antwort ist in Base64 codiert. Im folgenden Beispiel wird der Parameter —query verwendet, um den Signaturwert aus der Antwort abzurufen und in der Datei sign.b64 zu platzieren.

[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

Hinweis: Sie können Nachrichten mit einer Größe von bis zu 4096 Byte senden. Um eine größere Nachricht zu signieren, generieren Sie einen Hash-Digest der Nachricht. Geben Sie dann den Hash-Digest im Message-Parameter an. Verwenden Sie den MessageType-Parameter, um anzugeben, ob es sich bei der Nachricht um eine vollständige Nachricht oder einen Digest handelt. Beachten Sie unbedingt den Signaturalgorithmus, da dieser für die spätere Überprüfung der Signatur benötigt wird.

Da die Signatur im Base64-Format vorliegt, können Sie sie mit dem Linux-Verschlüsselungsbefehl base64 ähnlich dem folgenden in das Binärformat konvertieren:

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

Führen Sie den folgenden Befehl aus, um Base64-Dateien für das Windows-Betriebssystem zu dekodieren:

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

Überprüfen der AWS KMS-Signatur mit OpenSSL

Sie können jetzt die sign.b64-Signaturdatei freigeben. Um die Signaturdatei zu überprüfen, benötigen Sie den öffentlichen Schlüssel. Um den öffentlichen Schlüssel abzurufen, führen Sie den AWS CLI-Befehl get-public-key ähnlich dem folgenden aus:

[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

Um die base64-Datei in DER-Codierung mit einer anderen Datei namens KMSPublic.key zu konvertieren, führen Sie den folgenden Befehl aus:

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

Sie haben jetzt den öffentlichen Schlüssel und die Signatur im Binärformat mit der Datei message.txt. Um die Signatur zu überprüfen, führen Sie den OpenSSL-Befehl dgst ähnlich dem folgenden aus:

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

Diese Beispielausgabe von „Verifiziert OK“ zeigt an, dass die Überprüfung erfolgreich war.

Wenn Sie keine Bestätigungsantwort erhalten haben, stellen Sie sicher, dass:

  • Der OpenSSL-Signaturalgorithmus derselbe ist, der zum Signieren der Datei verwendet wurde.
  • Ihre Dateien nicht Base64-codiert sind.

War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?