Unbearbeitete symmetrische Verschlüsselung

In diesem Thema erfahren Sie, wie Sie die folgenden rohen symmetrischen Schlüsselvorgänge ausführen:

  • Text oder binären Klartextinhalt lokal oder mit Cloud KMS verschlüsseln
  • Geheimtexte lokal oder mit Cloud KMS entschlüsseln

Wenn Sie stattdessen einen regulären symmetrischen Vorgang (nicht im Rohformat) ausführen möchten, finden Sie weitere Informationen unter Daten mit einem symmetrischen Schlüssel verschlüsseln und entschlüsseln.

Mit der symmetrischen unbearbeiteten Verschlüsselung können Sie Ihre Daten lokal oder mithilfe von Cloud KMS verschlüsseln und entschlüsseln. Verschlüsselte Daten können zwischen verschiedenen Bibliotheken und Dienstanbietern verschoben werden, ohne sie vorher entschlüsseln zu müssen. Diese Funktionalität hängt davon ab, ob zum Zeitpunkt des Vorgangs auf den Schlüssel zugegriffen werden kann. Wenn Sie die Geheimtexte außerhalb von Google Cloud verwenden möchten, müssen Sie einen importierten Schlüssel verwenden, da in Cloud KMS generierte Schlüssel nicht exportiert werden können. Diese Verschlüsselungsalgorithmen generieren Standardchiffretexte, die von jedem Standard-Entschlüsselungsdienst entschlüsselt werden können. Wir unterstützen die folgenden Algorithmen für die rohe symmetrische Verschlüsselung:

  • AES-128-GCM
  • AES-256-GCM
  • AES-128-CBC
  • AES-256-CBC
  • AES-128-CTR
  • AES-256-CTR

Beachten Sie die folgenden Punkte zu diesen Rohverschlüsselungsalgorithmen:

  • AES-GCM bietet eine Authentifizierung basierend auf den zusätzlichen authentifizierten Daten (Additional Authenticated Data, AAD) und generiert ein Authentifizierungs-Tag. Dies ist der empfohlene Verschlüsselungsalgorithmus. Daten, die mit AES-GCM-Algorithmen verschlüsselt wurden, können ohne die bereitgestellte AAD nicht entschlüsselt werden.

  • Bei AES-CBC muss die Größe des Klartexts ein Vielfaches der Blockgröße (16 Byte) sein. Wenn der Klartext kein Vielfaches der Blockgröße ist, füllen Sie den Klartext auf, bevor Sie ihn verschlüsseln. Andernfalls schlägt der Vorgang mit einem Fehler fehl, der auf das Problem hinweist.

  • AES-CBC und AES-CTR sind keine authentifizierten Verschlüsselungsschemas. Daher besteht ein höheres Risiko eines versehentlichen Missbrauchs. Sie werden angeboten, um Legacy- und Interoperabilitätsanforderungen zu unterstützen, und sollten mit Vorsicht verwendet werden. Zur Vermeidung von beiläufigem Missbrauch sind für die Verwendung dieser Verschlüsselungsalgorithmen die folgenden IAM-Berechtigungen erforderlich:

    • cloudkms.cryptoKeyVersions.manageRawAesCbcKeys für AES-CBC.
    • cloudkms.cryptoKeyVersions.manageRawAesCtrKeys für AES-CTR.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihren Schlüssel zu gewähren, um die Berechtigungen zu erhalten, die Sie für die Rohverschlüsselung benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.

Möglicherweise können Sie die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Zusätzliche Rollen für nicht authentifizierte Algorithmen für die Rohverschlüsselung

  • So verwenden Sie AES-CBC-Schlüssel: Cloud KMS Expert Raw AES-CBC Key Manager (roles/cloudkms.expertRawAesCbc)
  • So verwenden Sie AES-CTR-Schlüssel: Cloud KMS Expert Raw AES-CTR Key Manager (roles/cloudkms.expertRawAesCtr)

Hinweise

  • Gewähren Sie den vorgesehenen Hauptkonten die genannten Berechtigungen für die symmetrische rohe Verschlüsselung.
  • Erstellen Sie einen Schlüsselbund, wie unter Schlüsselbunde erstellen beschrieben.
  • Erstellen und importieren Sie einen symmetrischen Rohschlüsselverschlüsselungsschlüssel, wie unter Schlüssel erstellen und Schlüssel importieren beschrieben.

Verschlüsseln

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 auf die aktuelle Version ausführen.

gcloud kms raw-encrypt \
    --location LOCATION \
    --keyring KEY_RING \
    --key KEY_NAME \
    --version KEY_VERSION \
    --plaintext-file INPUT_FILE_PATH \
    --ciphertext-file OUTPUT_FILE_PATH

Ersetzen Sie Folgendes:

  • 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.

  • INPUT_FILE_PATH: der lokale Dateipfad zum Lesen der Klartextdaten.

  • OUTPUT_FILE_PATH: der lokale Dateipfad zum Speichern der verschlüsselten Ausgabe

Wenn Sie Informationen zu allen Flags und möglichen Werten erhalten möchten, führen Sie den Befehl mit dem Flag --help aus.

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.

Wenn Sie JSON und die REST API verwenden, müssen Inhalte base64-codiert werden, bevor sie mit Cloud KMS verschlüsselt werden können.

Verwenden Sie die Methode rawEncrypt, um Klartextdaten zu verschlüsseln:

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION:rawEncrypt" \
  --request "POST" \
  --header "authorization: Bearer TOKEN" \
  --header "content-type: application/json" \
  --data '{"plaintext": "BASE64_ENCODED_INPUT", "additionalAuthenticatedData": "BASE64_ENCODED_AAD"}'

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.
  • BASE64_ENCODED_INPUT: die base64-codierten Klartextdaten, die Sie verschlüsseln möchten.
  • BASE64_ENCODED_AAD: die base64-codierten zusätzlichen authentifizierten Daten, die verwendet werden, um Integritäts- und Authentizitätssicherungen zu gewährleisten. Dieses Feld gilt nur für den AES-GCM-Algorithmus.

Die Ausgabe ist ein JSON-Objekt, das den verschlüsselten Geheimtext und den zugehörigen Initialisierungsvektor als base64-codierte Strings enthält.

Decrypt

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 auf die aktuelle Version ausführen.

gcloud kms raw-decrypt \
    --location LOCATION \
    --keyring KEY_RING \
    --key KEY_NAME \
    --version KEY_VERSION \
    --ciphertext-file INPUT_FILE_PATH \
    --plaintext-file OUTPUT_FILE_PATH

Ersetzen Sie Folgendes:

  • 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.

  • INPUT_FILE_PATH: der lokale Dateipfad zum Geheimtext, den Sie entschlüsseln möchten.

  • OUTPUT_FILE_PATH: der lokale Dateipfad, unter dem Sie den entschlüsselten Klartext speichern möchten.

Wenn Sie Informationen zu allen Flags und möglichen Werten erhalten möchten, führen Sie den Befehl mit dem Flag --help aus.

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.

Wenn Sie die REST API verwenden, müssen Inhalte base64-codiert werden, bevor sie von Cloud KMS entschlüsselt werden können.

Entschlüsseln Sie die verschlüsselten Daten mit der Methode rawDecrypt:

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION:rawDecrypt" \
  --request "POST" \
  --header "authorization: Bearer TOKEN" \
  --header "content-type: application/json" \
  --data '{"ciphertext": "BASE64_ENCODED_DATA", "additionalAuthenticatedData": "BASE64_ENCODED_AAD", "initializationVector": "BASE64_ENCODED_IV"}'

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 Entschlüsselung verwendet werden soll.
  • KEY_VERSION: die ID der Schlüsselversion, die für die Entschlüsselung verwendet werden soll.
  • BASE64_ENCODED_DATA: der base64-codierte Geheimtext, den Sie entschlüsseln möchten.
  • BASE64_ENCODED_AAD: die base64-codierten zusätzlichen authentifizierten Daten, die beim Verschlüsseln der Daten verwendet wurden. Dieses Feld gilt nur für die AES-GCM-Algorithmen.
  • BASE64_ENCODED_IV: der base64-codierte Initialisierungsvektor, der beim Verschlüsseln der Daten verwendet wurde.

Die Ausgabe ist ein JSON-Objekt, das den entschlüsselten Klartext als base64-codierten String enthält.

Nächste Schritte