Dieses Thema enthält Informationen zum Erstellen und Verwenden eines RSA-Schlüssels für die asymmetrische Verschlüsselung. 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 Thema finden Sie Beispiele, bei denen die Befehlszeile verwendet wird. Wenn Sie die Anwendung der Beispiele vereinfachen möchten, können Sie Cloud Shell 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
. Unter Asymmetrische Verschlüsselungsalgorithmen finden Sie Informationen dazu, welche Algorithmen für den SchlüsselzweckASYMMETRIC_DECRYPT
unterstützt werden. Sie können diesen Vorgang nicht mit einem Schlüssel mit dem ZweckASYMMETRIC_SIGN
ausführen.Wenn Sie die Befehlszeile verwenden, sollten Sie OpenSSL installieren. Wenn Sie Cloud Shell einsetzen, ist OpenSSL bereits installiert.
- macOS-Nutzer: Die unter macOS installierte Version von OpenSSL unterstützt die Flags nicht, die für Daten entschlüsseln. Installieren Sie OpenSSL von Homebrew, um diese Schritte unter macOS auszuführen.
Steuerung des Zugriffs auf den Schlüssel
Gewähren Sie einem Nutzer oder Dienst, von dem der öffentliche Schlüssel abgerufen wird, die Berechtigung
cloudkms.cryptoKeyVersions.viewPublicKey
für den asymmetrischen Schlüssel. Der öffentliche Schlüssel wird zum Verschlüsseln von Daten benötigt.Gewähren Sie einem Nutzer oder Dienst, der mit dem öffentlichen Schlüssel verschlüsselte Daten entschlüsseln soll, die Berechtigung
cloudkms.cryptoKeyVersions.useToDecrypt
fü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 \ --keyring key-ring \ --location location \ --output-file public-key-path
Ersetzen Sie key-version durch die Schlüsselversion, die den öffentlichen Schlüssel hat. 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 public-key-path durch den Ort zum Speichern des öffentlichen Schlüssels auf dem lokalen System.
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 cleartext-data-input-file \ -encrypt \ -pubin \ -inkey public-key-path \ -pkeyopt rsa_padding_mode:oaep \ -pkeyopt rsa_oaep_md:sha256 \ -pkeyopt rsa_mgf1_md:sha256 \ > encrypted-data-output-file
Ersetzen Sie cleartext-data-input-file durch den zu verschlüsselnden Pfad und Dateinamen.
Ersetzen Sie public-key-path durch den Pfad und den Dateinamen, in den Sie den öffentlichen Schlüssel heruntergeladen haben.
Ersetzen Sie encrypted-data-output-file durch den Pfad und den Dateinamen zum Speichern der verschlüsselten Daten.
C#
Um diesen Code auszuführen, müssen Sie zuerst eine C#-Entwicklungsumgebung einrichten und das Cloud KMS C# SDK installieren.
Go
Um Cloud KMS in der Befehlszeile zu verwenden, Installieren Sie die Google Cloud CLI oder führen Sie ein Upgrade auf die neueste Version durch.
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.
Daten entschlüsseln
Verwenden Sie Cloud KMS für die Entschlüsselung.
gcloud
Um Cloud KMS in der Befehlszeile zu verwenden, Installieren Sie die Google Cloud CLI oder führen Sie ein Upgrade auf die neueste Version durch.
gcloud kms asymmetric-decrypt \ --version key-version \ --key key \ --keyring key-ring \ --location location \ --ciphertext-file file-path-with-encrypted-data \ --plaintext-file file-path-to-store-plaintext
Ersetzen Sie key-version durch die Schlüsselversion oder lassen Sie das Flag --version
weg, um die Version automatisch zu erkennen. Ersetzen Sie key durch den Namen des Schlüssels, der für die Entschlüsselung verwendet werden soll. Ersetzen Sie key-ring durch den Namen des Schlüsselbunds, in dem sich der Schlüssel befinden wird. Ersetzen Sie location durch den Cloud KMS-Standort für den Schlüsselbund. Ersetzen Sie file-path-with-encrypted-data und file-path-to-store-plaintext durch die lokalen Dateipfade, um die verschlüsselten Daten zu lesen und die entschlüsselte Ausgabe zu speichern.
Wenn Sie Informationen zu allen Flags und möglichen Werten erhalten möchten, führen Sie den Befehl mit dem Flag --help
aus.
Um den Inhalt der entschlüsselten Datei anzuzeigen, öffnen Sie sie in Ihrem Editor oder Terminal. Das folgende Beispiel zeigt den Dateiinhalt mit dem Befehl cat
:
cat ./my-file.txt
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.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 Version von OpenSSL unterstützt die Flags nicht, die in diesem Thema zum Entschlüsseln von Daten verwendet werden. Installieren Sie OpenSSL von Homebrew, um diese Schritte unter macOS auszuführen.
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 nutzen OAEP, das in RFC 2437 standardisiert ist. Als
Kurzreferenz, unterstützen die folgenden Algorithmen die folgende maximale Nutzlast
Größen (maxMLen
, in Byte):
Algorithmus | Parameter | Maximale Nachrichtenlänge |
---|---|---|
RSA_DECRYPT_OAEP_2048_SHA256 | k = 256; hLen = 32; | maxMLen = 190 |
RSA_DECRYPT_OAEP_4096_SHA512 | k = 384; hLen = 32; | maxMLen = 318 |
RSA_DECRYPT_OAEP_4096_SHA256 | k = 512; hLen = 32; | maxMLen = 446 |
RSA_DECRYPT_OAEP_4096_SHA512 | k = 512; hLen = 64; | maxMLen = 382 |
Die asynchrone Verschlüsselung wird nicht für Nachrichten unterschiedlicher Länge empfohlen, die diese Beschränkungen überschreiten können. Ziehen Sie stattdessen die Hybridverschlüsselung in Betracht. Tink ist eine kryptografische Bibliothek, die diesen Ansatz verwendet.