In diesem Dokument wird beschrieben, wie Sie Key Encapsulation Mechanisms (KEMs) mit Cloud KMS-Schlüsseln verwenden, um gemeinsame Secrets zu erstellen.
Bei der Kapselung wird der öffentliche Schlüssel des KEM-Schlüsselpaars und bei der Entkapselung der private Schlüssel des Schlüsselpaars verwendet. Mit Cloud KMS können Sie den öffentlichen Schlüssel abrufen, den Sie dann mit Standardbibliotheken verwenden können, um Ihr gemeinsames Secret zu kapseln. Verwenden Sie Cloud KMS-Entkapselungsmethoden, um das gemeinsame Secret zu entkapseln. Sie können das private Schlüsselmaterial nicht außerhalb von Cloud KMS verwenden.
Hinweis
- In diesem Dokument 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. Andernfalls installieren Sie OpenSSL auf Ihrem Computer.
- Erstellen Sie einen KEM-Schlüssel mit Schlüsselzweck von
KEY_ENCAPSULATION. Unter Schlüsselkapselungsalgorithmen finden Sie Informationen dazu, welche Algorithmen für den SchlüsselzweckKEY_ENCAPSULATION, unterstützt werden.
Berechtigungen für den Schlüssel erteilen
- Erteilen Sie jedem Nutzer oder Prinzipal, der den öffentlichen Schlüssel abrufen muss, um das Secret zu kapseln, die
roles/cloudkms.publicKeyViewerRolle für den Schlüssel. - Erteilen Sie jedem Nutzer oder Prinzipal, der Secrets mit diesem Schlüssel entkapseln muss, die Rolle „roles/cloudkms.decapsulator“ für den Schlüssel.
Weitere Informationen zu Berechtigungen und Rollen in Cloud KMS, siehe Berechtigungen und Rollen.
Datenkapselung
Wenn Sie einen KEM-Schlüssel zum Kapseln verwenden möchten, rufen Sie den öffentlichen Schlüssel ab und verwenden Sie ihn zum Kapseln.
gcloud
Für dieses Beispiel muss OpenSSL auf Ihrem lokalen System installiert sein.
Öffentlichen Schlüssel herunterladen
gcloud kms keys versions get-public-key KEY_VERSION \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--output-file PUBLIC_KEY_FILE \
--public-key-format PUBLIC_KEY_FORMAT
Ersetzen Sie Folgendes:
KEY_VERSION: Die Versionsnummer des Schlüssels, den Sie für die Kapselung verwenden möchten, z. B.2.KEY_NAME: Der Name des Schlüssels, den Sie für die Kapselung verwenden möchten.KEY_RING: Der Name des Schlüsselbunds, der den Schlüssel enthält.LOCATION: Der Cloud KMS-Speicherort des Schlüsselbunds.PUBLIC_KEY_FILE: Der lokale Dateipfad, in dem der öffentliche Schlüssel gespeichert wird.PUBLIC_KEY_FORMAT: Das Zielformat für den öffentlichen Schlüssel, z. B.nist-pqc. Das Standardformat istpem.
Öffentlichen Schlüssel neu formatieren
Für den Befehl zum Kapseln muss der öffentliche Schlüssel im PEM-Format vorliegen. Wenn Sie den öffentlichen Schlüssel in einem anderen Format wie nist-pqc heruntergeladen haben, müssen Sie ihn in das PEM-Format konvertieren. Wenn Ihr öffentlicher Schlüssel bereits im PEM-Format vorliegt,
fahren Sie mit Kapseln fort.
Verwenden Sie den folgenden Befehl, um den öffentlichen Schlüssel für einen ML-KEM-768-Schlüssel zu konvertieren:
{ echo -n "MIIEsjALBglghkgBZQMEBAIDggShAA==" | base64 -d ; cat PUBLIC_KEY_FILE; } | \
openssl pkey -inform DER -pubin -pubout -out PEM_PUBLIC_KEY_FILE
Verwenden Sie den folgenden Befehl, um den öffentlichen Schlüssel für einen ML-KEM-1024-Schlüssel zu konvertieren:
{ echo -n "MIIGMjALBglghkgBZQMEBAMDggYhAA==" | base64 -d ; cat PUBLIC_KEY_FILE; } | \
openssl pkey -inform DER -pubin -pubout -out PEM_PUBLIC_KEY_FILE
Ersetzen Sie Folgendes:
PUBLIC_KEY_FILE: Der Pfad zur heruntergeladenen öffentlichen Schlüsseldatei im Rohformat.PEM_PUBLIC_KEY_FILE: Der Pfad und der Dateiname, unter dem der öffentliche Schlüssel im PEM-Format gespeichert werden soll.
Kapseln
Verwenden Sie den folgenden Befehl, um ein gemeinsames Secret und einen Geheimtext zu erstellen:
openssl pkeyutl \
-encap \
-pubin \
-inkey PEM_PUBLIC_KEY_FILE \
-out CIPHERTEXT_FILE \
-secret SHARED_SECRET_FILE
Ersetzen Sie Folgendes:
PEM_PUBLIC_KEY_FILE: Der Pfad zur heruntergeladenen öffentlichen Schlüsseldatei im PEM-Format.CIPHERTEXT_FILE: Der Pfad, unter dem Sie den resultierenden Geheimtext speichern möchten.SHARED_SECRET_FILE: Der Pfad, unter dem Sie das resultierende gemeinsame Secret speichern möchten.
Go
Um diesen Code auszuführen, müssen Sie zuerst eine Go-Entwicklungsumgebung einrichten und das Cloud KMS Go SDK installieren.
Entkapselung
Verwenden Sie Cloud KMS, um einen Geheimtext zu entkapseln.
gcloud
Wenn Sie Cloud KMS in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf die neueste Version ausführen.
gcloud kms decapsulate \
--version KEY_VERSION \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--ciphertext-file CIPHERTEXT_FILE \
--shared-secret-file SHARED_SECRET_FILE
Ersetzen Sie Folgendes:
KEY_VERSION: Die Schlüsselversion, die für die Entkapselung verwendet werden soll, z. B.3.KEY_NAME: Der Name des Schlüssels, der für die Entkapselung verwendet werden soll.KEY_RING: Der Name des Schlüsselbunds, in dem sich der Schlüssel befindet.LOCATION: Der Cloud KMS-Speicherort des Schlüsselbunds.CIPHERTEXT_FILE: Der lokale Dateipfad für den Eingabegeheimtext.SHARED_SECRET_FILE: Der lokale Dateipfad zum Speichern des gemeinsamen Secrets.
Go
Um diesen Code auszuführen, müssen Sie zuerst eine Go-Entwicklungsumgebung einrichten und das Cloud KMS Go 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
CryptoKeyVersions.decapsulate
Methode.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION:decapsulate" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"ciphertext": "CIPHERTEXT"}'
Ersetzen Sie Folgendes:
PROJECT_ID: Die ID des Projekts, das den Schlüsselbund enthält.LOCATION: Der Cloud KMS-Speicherort des Schlüsselbunds.KEY_RING: Der Name des Schlüsselbunds, der den Schlüssel enthält.KEY_NAME: Der Name des Schlüssels, der für die Verschlüsselung verwendet werden soll.KEY_VERSION: Die ID der Schlüsselversion, die für die Verschlüsselung verwendet werden soll.CIPHERTEXT: Der base64-codierte Geheimtext, den Sie entkapseln möchten.