Dieses Thema enthält Informationen zum Erstellen und Überprüfen digitaler Signaturen mit asymmetrischen Schlüsseln.
Eine digitale Signatur wird mit dem privaten Schlüsselabschnitt eines asymmetrischen Schlüssels erzeugt. Zur Überprüfung wird der öffentliche Schlüsselabschnitt desselben asymmetrischen Schlüssels verwendet.
Hinweis
Wenn Sie digitale Signaturen erstellen, müssen Sie einen Schlüssel mit dem Schlüsselzweck
ASYMMETRIC_SIGN
verwenden. Verwenden Sie beim Erstellen des SchlüsselsASYMMETRIC_SIGN
.Zur Validierung einer Signatur benötigen Sie den vollständigen Algorithmus, der beim Erstellen des Schlüssels verwendet wurde. Für die folgenden Befehlszeilenanweisungen, die den Befehl
openssl
verwenden, müssen Sie diese Informationen an diese Befehle übergeben.Erteilen Sie dem Nutzer oder Dienst, von dem der Signiervorgang durchgeführt wird, die Berechtigung
cloudkms.cryptoKeyVersions.useToSign
für den asymmetrischen Schlüssel. Informationen zu Berechtigungen in Cloud Key Management Service finden Sie unter Berechtigungen und Rollen.Beim Prüfen einer Signatur sollten Sie dem Nutzer oder Dienst, von dem der öffentliche Schlüssel für die Überprüfung heruntergeladen wird, die Berechtigung
cloudkms.cryptoKeyVersions.viewPublicKey
für den asymmetrischen Schlüssel erteilen.Wenn Sie die Befehlszeile verwenden, sollten Sie OpenSSL installieren. Wenn Sie Cloud Shell einsetzen, ist OpenSSL bereits installiert.
Daten oder Digest?
Die für AsymmetricSign-Anfragen bereitgestellte Eingabe kann über eines der Felder data
oder digest
übergeben werden. Diese Felder können nicht gleichzeitig angegeben werden. Es gibt einige Algorithmen, für die das Datenfeld erforderlich ist, z. B. rohe Algorithmen und die Signatur mit einem Cloud External Key Manager-Schlüssel.
Rohalgorithmen
"Roh"-Algorithmen, die durch das Präfix RSA_SIGN_RAW_
identifiziert werden, sind eine Variante der PKCS #1-Signatur, bei der die Codierung in eine DigestInfo weggelassen wird. In der Variante:
- Wird ein Digest für die zu signierende Nachricht berechnet.
- Wird das PKCS #1-Padding direkt auf den Digest angewendet.
- Wird unter Verwendung des privaten RSA-Schlüssels eine Signatur des gepaddeten Digests berechnet.
So verwenden Sie diese Algorithmen:
- Die Rohdaten müssen als Teil des
data
-Felds bereitgestellt werden (anstelle eines Digest). - Die Daten unterliegen einem Längenlimit von 11 Byte unter der RSA-Schlüsselgröße. Beispiel: Ein PKCS #1 mit einem 2.048-Bit-RSA-Schlüssel kann maximal 245 Byte signieren.
- Weisen Sie dem entsprechenden Nutzer oder Dienst die
cloudkms.expertRawPKCS1
-Rolle zu. Informationen zu Berechtigungen in Cloud Key Management Service finden Sie unter Berechtigungen und Rollen.
ECDSA-Unterstützung für andere Hash-Algorithmen
Unsere ECDSA-Signaturalgorithmen haben das allgemeine Format:
EC_SIGN_ELLIPTIC_CURVE_[DIGEST_ALGORITHM]
DIGEST_ALGORITHM hat den Wert SHA256
, SHA384
oder SHA512
.
Da der Hash vor dem Erstellen der Signatur ausgeführt wird, können diese Signaturalgorithmen auch mit anderen Digests als SHA verwendet werden, z. B. Keccak. Wenn Sie einen Keccak-Digest verwenden möchten, geben Sie einen Keccak-Hashwert an und verwenden Sie den SHA-Digest-Algorithmus mit derselben Länge. Sie können beispielsweise einen KECCAK256
-Digest in einer Anfrage mit dem EC_SIGN_P256_SHA256
-Algorithmus verwenden.
Signatur erstellen
gcloud
Wenn Sie Cloud KMS in der Befehlszeile verwenden möchten, müssen Sie zuerst die neueste Version der Google Cloud CLI installieren oder ein Upgrade ausführen.
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
Ersetzen Sie key-version durch die Version des Schlüssels, der für die Signatur verwendet werden soll. Ersetzen Sie key durch den Schlüsselnamen. Ersetzen Sie key-ring durch den Namen des Schlüsselbunds, in dem sich der Schlüssel befindet. Ersetzen Sie location durch den Cloud KMS-Speicherort für den Schlüsselbund. Ersetzen Sie digest-algorithm durch den Algorithmus, der verwendet werden soll. Lassen Sie digest-algorithm aus, um input-file zur Signatur an Cloud KMS zu senden. Ersetzen Sie input-file und signature-file durch die lokalen Pfade für die Datei, die signiert werden soll, und durch die Signaturdatei.
Wenn Sie Informationen zu allen Flags und möglichen Werten erhalten möchten, führen Sie den Befehl mit dem Flag --help
aus.
C#
Um diesen Code auszuführen, müssen Sie zuerst eine C#-Entwicklungsumgebung einrichten und das Cloud KMS C# SDK installieren.
Go
Um diesen Code auszuführen, müssen Sie zuerst eine Go-Entwicklungsumgebung einrichten und das Cloud KMS Go SDK installieren.
Java
Um diesen Code auszuführen, müssen Sie zuerst eine Java-Entwicklungsumgebung einrichten und das Cloud KMS Java SDK installieren.
Node.js
Um diesen Code auszuführen, richten Sie zuerst eine Node.js-Entwicklungsumgebung ein und installieren Sie das Cloud KMS Node.js SDK.
PHP
Um diesen Code auszuführen, müssen Sie zuerst PHP in Google Cloud verwenden lernen und das Cloud KMS PHP SDK installieren.
Python
Um diesen Code auszuführen, müssen Sie zuerst eine Python-Entwicklungsumgebung einrichten und das Cloud KMS Python SDK installieren.
Ruby
Um diesen Code auszuführen, müssen Sie zuerst eine Ruby-Entwicklungsumgebung einrichten und das Cloud KMS Ruby SDK installieren.
API
In diesen Beispielen wird curl als HTTP-Client verwendet, um die Verwendung der API zu demonstrieren. Weitere Informationen zur Zugriffssteuerung finden Sie unter Auf die Cloud KMS API zugreifen.
Verwenden Sie zum Signieren die Methode CryptoKeyVersions.asymmetricSign
. Die Antwort dieser Methode enthält die Base64-codierte Signatur.
Signatur mit elliptischen Kurven prüfen
gcloud
Wenn Sie Cloud KMS in der Befehlszeile verwenden möchten, müssen Sie zuerst die neueste Version der Google Cloud CLI installieren oder ein Upgrade ausführen.
Rufen Sie den öffentlichen Schlüssel ab
gcloud kms keys versions get-public-key key-version \ --key key \ --keyring key-ring \ --location location \ --output-file output-file
Ersetzen Sie key-version durch die Schlüsselversion. Ersetzen Sie key durch den Namen des Schlüssels. Ersetzen Sie key-ring durch den Namen des Schlüsselbunds, in dem sich der Schlüssel befindet. Ersetzen Sie location durch den Cloud KMS-Standort für den Schlüsselbund. Ersetzen Sie output-file durch den Dateipfad zum Speichern des öffentlichen Schlüssels auf dem lokalen System.
Wenn Sie Informationen zu allen Flags und möglichen Werten erhalten möchten, führen Sie den Befehl mit dem Flag --help
aus.
Überprüfen Sie die Signatur
Welche OpenSSL-Befehle zum Prüfen der Signatur erforderlich sind, hängt vom erstellten Signaturtyp ab. Wenn Sie beispielsweise eine SHA-256-Elliptische-Kurven-Signatur mit OpenSSL validieren möchten, müssen Sie -sha256
angeben. Zum Validieren einer SHA-384-Elliptische-Kurven-Signatur müssen Sie -sha384
angeben.
openssl dgst \ -sha256 \ -verify public-key-file \ -signature signature-file \ message-file
Ersetzen Sie die Variablen durch Ihre eigenen Werte:
public-key-file: Pfad zu der Datei, die den öffentlichen Schlüssel enthält (z. B.
"./my-key.pub"
).signature-file: Pfad zu der Datei, die die Signatur enthält, die geprüft werden soll (z. B.
"./my-data.sig"
).message-file: Pfad zu der Datei, die die Nachricht enthält (z. B.
"./my-data.txt"
).
Wenn die Signatur gültig ist, gibt der Befehl den String Verified OK
aus.
Wenn Sie Informationen zu allen Flags und möglichen Werten erhalten möchten, führen Sie den Befehl mit dem Unterbefehl help
aus.
C#
Um diesen Code auszuführen, müssen Sie zuerst eine C#-Entwicklungsumgebung einrichten und das Cloud KMS C# SDK installieren.
Go
Um diesen Code auszuführen, müssen Sie zuerst eine Go-Entwicklungsumgebung einrichten und das Cloud KMS Go SDK installieren.
Java
Um diesen Code auszuführen, müssen Sie zuerst eine Java-Entwicklungsumgebung einrichten und das Cloud KMS Java SDK installieren.
Node.js
Um diesen Code auszuführen, richten Sie zuerst eine Node.js-Entwicklungsumgebung ein und installieren Sie das Cloud KMS Node.js SDK.
PHP
Um diesen Code auszuführen, müssen Sie zuerst PHP in Google Cloud verwenden lernen und das Cloud KMS PHP SDK installieren.
Python
Um diesen Code auszuführen, müssen Sie zuerst eine Python-Entwicklungsumgebung einrichten und das Cloud KMS Python SDK installieren.
Ruby
Um diesen Code auszuführen, müssen Sie zuerst eine Ruby-Entwicklungsumgebung einrichten und das Cloud KMS Ruby SDK installieren.
API
In diesen Beispielen wird curl als HTTP-Client verwendet, um die Verwendung der API zu demonstrieren. Weitere Informationen zur Zugriffssteuerung finden Sie unter Auf die Cloud KMS API zugreifen.
Verwenden Sie die Methode CryptoKeyVersions.getPublicKey, um den öffentlichen Schlüssel abzurufen. Dann führen Sie die für das Befehlszeilenbeispiel angezeigten Befehle aus, um die Signatur zu prüfen.
RSA-Signatur prüfen
gcloud
Wenn Sie Cloud KMS in der Befehlszeile verwenden möchten, müssen Sie zuerst die neueste Version der Google Cloud CLI installieren oder ein Upgrade ausführen.
Rufen Sie den öffentlichen Schlüssel ab
gcloud kms keys versions get-public-key key-version \ --key key \ --keyring key-ring \ --location location \ --output-file output-file
Ersetzen Sie key-version durch die Schlüsselversion. Ersetzen Sie key durch den Namen des Schlüssels. Ersetzen Sie key-ring durch den Namen des Schlüsselbunds, in dem sich der Schlüssel befindet. Ersetzen Sie location durch den Cloud KMS-Standort für den Schlüsselbund. Ersetzen Sie output-file durch den Dateipfad zum Speichern des öffentlichen Schlüssels auf dem lokalen System.
Wenn Sie Informationen zu allen Flags und möglichen Werten erhalten möchten, führen Sie den Befehl mit dem Flag --help
aus.
Überprüfen Sie die Signatur
Welche OpenSSL-Befehle zum Prüfen der Signatur erforderlich sind, hängt vom erstellten Signaturtyp ab. Wenn Sie beispielsweise eine SHA-256-RSA-Signatur mit PSS-Padding validieren möchten, müssen Sie -sha256
und -sigopt rsa_padding_mode:pss
angeben. Um eine SHA-512-RSA-Signatur mit PSS-Padding zu validieren, müssen Sie -sha512
und -sigopt
rsa_padding_mode:pss
angeben.
openssl dgst \ -sha256 \ -sigopt rsa_padding_mode:pss \ -sigopt rsa_pss_saltlen:-1 \ -verify public-key-file \ -signature signature-file \ message-file
Ersetzen Sie die Variablen durch Ihre eigenen Werte:
public-key-file: Pfad zu der Datei, die den öffentlichen Schlüssel enthält (z. B.
"./my-key.pub"
).signature-file: Pfad zu der Datei, die die Signatur enthält, die geprüft werden soll (z. B.
"./my-data.sig"
).message-file: Pfad zu der Datei, die die Nachricht enthält (z. B.
"./my-data.txt"
).
Wenn die Signatur gültig ist, gibt der Befehl den String Verified OK
aus.
Wenn Sie Informationen zu allen Flags und möglichen Werten erhalten möchten, führen Sie den Befehl mit dem Unterbefehl help
aus.
C#
Um diesen Code auszuführen, müssen Sie zuerst eine C#-Entwicklungsumgebung einrichten und das Cloud KMS C# SDK installieren.
Go
Um diesen Code auszuführen, müssen Sie zuerst eine Go-Entwicklungsumgebung einrichten und das Cloud KMS Go SDK installieren.
Java
Um diesen Code auszuführen, müssen Sie zuerst eine Java-Entwicklungsumgebung einrichten und das Cloud KMS Java SDK installieren.
Node.js
Um diesen Code auszuführen, richten Sie zuerst eine Node.js-Entwicklungsumgebung ein und installieren Sie das Cloud KMS Node.js SDK.
PHP
Um diesen Code auszuführen, müssen Sie zuerst PHP in Google Cloud verwenden lernen und das Cloud KMS PHP SDK installieren.
Python
Um diesen Code auszuführen, müssen Sie zuerst eine Python-Entwicklungsumgebung einrichten und das Cloud KMS Python SDK installieren.
Ruby
Um diesen Code auszuführen, müssen Sie zuerst eine Ruby-Entwicklungsumgebung einrichten und das Cloud KMS Ruby SDK installieren.
API
In diesen Beispielen wird curl als HTTP-Client verwendet, um die Verwendung der API zu demonstrieren. Weitere Informationen zur Zugriffssteuerung finden Sie unter Auf die Cloud KMS API zugreifen.
Verwenden Sie die Methode CryptoKeyVersions.getPublicKey
, um den öffentlichen Schlüssel abzurufen. Dann führen Sie die für das Befehlszeilenbeispiel angezeigten Befehle aus, um die Signatur zu prüfen.