In diesem Dokument finden Sie Informationen zum Erstellen und Verwenden eines Schlüssels für die asymmetrische Verschlüsselung mit einem RSA-Schlüssel. Informationen zum Erstellen und Überprüfen von Signaturen mit asymmetrischen Schlüsseln finden Sie unter Digitale Signaturen erstellen und überprüfen. Informationen zur Verwendung von symmetrischen Schlüsseln für die Verschlüsselung und Entschlüsselung finden Sie unter Daten verschlüsseln und entschlüsseln.
Bei der asymmetrischen Verschlüsselung wird der öffentliche Schlüsselabschnitt des asymmetrischen Schlüssels und bei der Entschlüsselung der private Schlüsselabschnitt des Schlüssels verwendet. Cloud Key Management Service bietet Möglichkeiten zum Abrufen des öffentlichen Schlüssels und zum Entschlüsseln von Geheimtext, der mit dem öffentlichen Schlüssel verschlüsselt wurde. Cloud KMS bietet keinen direkten Zugriff auf den privaten Schlüssel.
Hinweis
In diesem Dokument finden Sie Beispiele, die über die Befehlszeile ausgeführt werden. Verwenden Sie Cloud Shell, um die Beispiele einfacher zu verwenden. Für das Verschlüsselungsbeispiel wird OpenSSL verwendet, das in Cloud Shell vorinstalliert ist.
Erstellen Sie einen asymmetrischen Schlüssel mit dem Schlüsselzweck
ASYMMETRIC_DECRYPT. Informationen dazu, welche Algorithmen für den SchlüsselzweckASYMMETRIC_DECRYPTunterstützt werden, finden Sie unter Asymmetrische Verschlüsselungsalgorithmen. Dieses Verfahren kann nicht mit einem Schlüssel mit dem ZweckASYMMETRIC_SIGNdurchgeführt werden.Wenn Sie die Befehlszeile verwenden möchten, installieren Sie OpenSSL, falls Sie es noch nicht haben. Wenn Sie Cloud Shell verwenden, ist OpenSSL bereits installiert.
- macOS-Nutzer: Die unter macOS installierte OpenSSL-Version unterstützt die Flags nicht, die in diesem Thema zum Entschlüsseln von Daten verwendet werden. Wenn Sie diese Schritte unter macOS ausführen möchten, installieren Sie OpenSSL über Homebrew.
Zugriff auf den Schlüssel steuern
Gewähren Sie einem Nutzer oder Dienst, von dem der öffentliche Schlüssel abgerufen wird, die Berechtigung
cloudkms.cryptoKeyVersions.viewPublicKeyfür den asymmetrischen Schlüssel. Der öffentliche Schlüssel ist für die Verschlüsselung von Daten erforderlich.Gewähren Sie einem Nutzer oder Dienst, der Daten entschlüsseln soll, die mit dem öffentlichen Schlüssel verschlüsselt wurden, die Berechtigung
cloudkms.cryptoKeyVersions.useToDecryptfür den asymmetrischen Schlüssel.
Weitere Informationen zu Berechtigungen und Rollen in Cloud KMS finden Sie unter Berechtigungen und Rollen.
Daten verschlüsseln
Wenn Sie Daten mit einem asymmetrischen Verschlüsselungsschlüssel verschlüsseln möchten, rufen Sie den öffentlichen Schlüssel ab und verwenden Sie ihn zur Verschlüsselung der Daten.
gcloud
Für dieses Beispiel muss OpenSSL auf Ihrem lokalen System installiert sein.
Öffentlichen Schlüssel herunterladen
Laden Sie den öffentlichen Schlüssel herunter:
gcloud kms keys versions get-public-key KEY_VERSION \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--output-file PUBLIC_KEY_PATH
Ersetzen Sie Folgendes:
KEY_VERSION: die Schlüsselversion des asymmetrischen Schlüsselpaars, für das Sie den öffentlichen Schlüssel herunterladen möchten.KEY_NAME: der Name des SchlüsselsKEY_RING: der Schlüsselbund, der den Schlüssel enthält.LOCATION: der Speicherort des SchlüsselbundsPUBLIC_KEY_PATH: der Pfad, unter dem Sie den öffentlichen Schlüssel speichern möchten.
Daten verschlüsseln
Verschlüsseln Sie Daten mit dem soeben heruntergeladenen öffentlichen Schlüssel und speichern Sie die Ausgabe in einer Datei:
openssl pkeyutl -in INPUT_PATH \
-encrypt \
-pubin \
-inkey PUBLIC_KEY_PATH \
-pkeyopt rsa_padding_mode:oaep \
-pkeyopt rsa_oaep_md:HASH_SIZE \
-pkeyopt rsa_mgf1_md:HASH_SIZE \
> OUTPUT_PATH
Ersetzen Sie Folgendes:
INPUT_PATH: der Pfad zu den Klartextdaten, die Sie verschlüsseln möchten.PUBLIC_KEY_PATH: der Pfad zum öffentlichen Schlüssel.HASH_SIZE: die Größe des Hashs, z. B.256für SHA256.OUTPUT_PATH: der Pfad, unter dem Sie die verschlüsselten Daten speichern möchten.
C#
Um diesen Code auszuführen, müssen Sie zuerst eine C#-Entwicklungsumgebung einrichten und das Cloud KMS C# SDK installieren.
Go
Wenn Sie Cloud KMS über die Befehlszeile verwenden möchten, müssen Sie zuerst die aktuelle Version der Google Cloud CLI installieren oder ein Upgrade darauf durchführen.
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
Wenn Sie diesen Code ausführen möchten, müssen Sie sich zuerst mit der Verwendung von PHP in Google Cloud vertraut machen 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.
Daten entschlüsseln
Verwenden Sie Cloud KMS für die Entschlüsselung.
gcloud
Wenn Sie Cloud KMS über die Befehlszeile verwenden möchten, müssen Sie zuerst die aktuelle Version der Google Cloud CLI installieren oder ein Upgrade darauf durchführen.
gcloud kms asymmetric-decrypt \
--version KEY_VERSION \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--ciphertext-file INPUT_PATH \
--plaintext-file OUTPUT_PATH
Ersetzen Sie Folgendes:
KEY_VERSION: die Schlüsselversion des asymmetrischen Schlüsselpaars, das zum Verschlüsseln der Daten verwendet wurde. Sie können das Flag--versionweglassen, um die Version automatisch zu erkennen.KEY_NAME: der Name des Schlüssels, mit dem die Daten verschlüsselt wurden.KEY_RING: der Name des Schlüsselbunds, der den Schlüssel enthältLOCATION: der Speicherort des SchlüsselbundsINPUT_PATH: der Pfad zur Datei, die den Geheimtext enthält.OUTPUT_PATH: der Pfad zur Datei, die den Klartext enthalten wird.
Wenn Sie Informationen zu allen Flags und möglichen Werten erhalten möchten, führen Sie den Befehl mit dem Flag --help aus.
Wenn Sie den Inhalt der entschlüsselten Datei anzeigen möchten, öffnen Sie sie in einem Texteditor oder verwenden Sie den Befehl cat, um sie in einem Terminal anzusehen.
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
Wenn Sie diesen Code ausführen möchten, müssen Sie sich zuerst mit der Verwendung von PHP in Google Cloud vertraut machen 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.asymmetricDecrypt.
Fehlerbehebung
incorrect key purpose: ASYMMETRIC_SIGN
Daten können nur mit einem Schlüssel mit dem Schlüsselzweck ASYMMETRIC_DECRYPT entschlüsselt werden.
invalid parameter beim Entschlüsseln unter macOS
Die auf macOS installierte OpenSSL-Version unterstützt die Flags nicht, die in diesem Thema zum Entschlüsseln von Daten verwendet werden. Wenn Sie diese Schritte unter macOS ausführen möchten, installieren Sie OpenSSL über Homebrew.
data too large for key size
Die maximale Nutzlastgröße für die RSA-Entschlüsselung hängt von der Schlüsselgröße und dem Padding-Algorithmus ab. Alle von Cloud KMS verwendeten RSA-Verschlüsselungsformate verwenden OAEP, das in RFC 2437 standardisiert ist. Als Kurzreferenz unterstützen die folgenden Algorithmen die folgenden maximalen Nutzlastgrößen.
| Algorithmus | Parameter | Maximale Nachrichtenlänge (Byte) |
|---|---|---|
| RSA_DECRYPT_OAEP_2048_SHA256 | k = 256; hLen = 32; | 190 |
| RSA_DECRYPT_OAEP_4096_SHA512 | k = 384; hLen = 32; | 318 |
| RSA_DECRYPT_OAEP_4096_SHA256 | k = 512; hLen = 32; | 446 |
| RSA_DECRYPT_OAEP_4096_SHA512 | k = 512; hLen = 64; | 382 |
Die asymmetrische Verschlüsselung wird nicht für Nachrichten mit unterschiedlicher Länge empfohlen, die diese Limits überschreiten können. Verwenden Sie stattdessen die Hybridverschlüsselung. Tink ist eine kryptografische Bibliothek, die diesen Ansatz verwendet.