End-to-End-Datenintegrität prüfen

Auf dieser Seite wird erläutert, wie Sie in der Cloud Key Management Service API unbeabsichtigte Änderungen an Daten erkennen und verhindern, während diese sich zwischen Clientsystemen und Cloud KMS bewegen. Diese Richtlinien ergänzen die Arten, auf die Google Cloud Ihre Daten bei Inaktivität und während der Übertragung automatisch schützt.

Automatischer Datenschutz

Alle Daten in Google Cloud werden in der Übertragung und im inaktiven Zustand in Google Cloud automatisch verschlüsselt.

Cloud KMS unternimmt zusätzliche Schritte zum Schutz inaktiver Verschlüsselungsschlüssel. Dazu wird jeder Verschlüsselungsschlüssel mit einem anderen kryptografischen Schlüssel verschlüsselt, der als Schlüsselverschlüsselungsschlüssel (Key Encryption Key, KEK) bezeichnet wird. Weitere Informationen zu dieser Technik finden Sie unter Umschlagverschlüsselung.

Jeder kryptografische Cloud KMS-Vorgang umfasst automatische Prüfungen auf die Datenkorruption. Wird eine Beschädigung erkannt, wird der Vorgang abgebrochen und ein detailliertes Fehlerprotokoll erstellt.

Diese automatischen Schutzfunktionen sind wichtig, verhindern aber keine clientseitigen Datenfehler. Beispielsweise kann die Datenkorruption während der Verschlüsselung zu Daten führen, die nicht entschlüsselt werden können.

In diesem Thema wird erläutert, wie clientseitige Datenfehler erkannt und verhindert werden, um das Risiko eines Datenverlusts zu minimieren.

Prüfsummen berechnen und verifizieren

Die Anfrage und Antwort jedes Aufrufs eines kryptografischen Vorgangs enthält CRC32C-Prüfsummenfelder, darunter plaintext_crc32c. Sie können die Prüfsumme berechnen und berechnete und zurückgegebene Werte vergleichen.

Auf dem Server legt die Cloud Key Management Service API boolesche Felder wie verified_plaintext_crc32c auf true fest, um anzugeben, dass die relevante Prüfsumme empfangen wurde, und gibt den Fehler INVALID_ARGUMENT zurück, wenn die Prüfsumme nicht mit dem vom Server berechneten Wert übereinstimmt .

Beachten Sie beim Berechnen und Vergleichen von Prüfsummen folgende Richtlinien:

  • Berechnen Sie Prüfsummen mit einer binären Codierung, sobald Daten gesendet oder empfangen werden.
  • Speichern Sie keine unverschlüsselten Klartextprüfsummen, die an oder von der Cloud Key Management Service API übertragen werden. Beispiel: Speichern Sie nie den unverschlüsselten Inhalt der Felder EncryptRequest.plaintext_crc32c oder DecryptResponse.plaintext_crc32c. Wenn Sie eine Prüfsumme aufzeichnen möchten, serialisieren Sie sie zusammen mit den relevanten Daten und übergeben das zusammengesetzte Objekt zur Verschlüsselung an Cloud KMS. Beim Entschlüsseln von Daten können Sie die Prüfsumme mit dem berechneten erwarteten Wert vergleichen.
  • Wenn ein Entschlüsselungsvorgang zu nicht übereinstimmenden Prüfsummen führt, entwerfen Sie Ihre Anwendung so, dass der Vorgang bei vorübergehenden Problemen für eine begrenzte Anzahl von Versuchen wiederholt wird.
  • Wenn ein Verschlüsselungsvorgang zu nicht übereinstimmenden Prüfsummen für die verschlüsselten Daten führt (der Geheimtext), verwerfen Sie das verschlüsselte Ergebnis und versuchen Sie es noch einmal.

Für Verschlüsselungsanfragen:

  • Wenn Sie das Prüfsummenfeld in die Anfrage aufnehmen, legt der Server in der Antwort auf true ein zugehöriges Überprüfungsfeld fest, um anzugeben, dass er die Prüfsumme erhalten und versucht hat, seinen Wert zu überprüfen.

  • Wenn Sie das Prüfsummenfeld einfügen, aber in der Antwort das Verifizierungsfeld auf false festgelegt ist, hat der Server das Prüfsummenfeld nicht erhalten und andere Informationen können in der Antwort fehlen. Wiederholen Sie die Anfrage für eine begrenzte Anzahl von Versuchen, falls der Fehler nur vorübergehend ist.

  • Wenn die Prüfsumme empfangen wurde, aber nicht übereinstimmte, wird der Fehler INVALID_ARGUMENT zurückgegeben. Der Fehler enthält den Namen des Felds und die Prüfsumme, die nicht übereinstimmte. Beispiel:

    The checksum in field plaintext_crc32c did not match the data in field plaintext.
    

    Wiederholen Sie die Anfrage für eine begrenzte Anzahl von Versuchen, falls der Fehler nur vorübergehend ist.

Für Entschlüsselungsanfragen können Sie eine Prüfsumme berechnen und mit dem Wert von DecryptResponse.plaintext_crc32c in der Antwort vergleichen.

Die folgenden Prüfsummenfelder sind in Anfragen an und Antworten von der Cloud Key Management Service API enthalten.

Feld in der Anfrage Feld in der Antwort
EncryptRequest.plaintext_crc32c EncryptResponse.verified_plaintext_crc32c
EncryptionRequest.additional_authenticated_data_crc32c EncryptionResponse.verified_additional_authenticated_data_crc32c
AsymmetricSignRequest.digest_crc32c AsymmetricSignResponse.verified_digest_crc32c
AsymmetricSignRequest.signature_crc32c AsymmetricSignResponse.verified_signature_crc32c
AsymmetricSignRequest.signature_crc32c AsymmetricSignResponse.verified_signature_crc32c
GetPublicKeyRequest.pem_crc32c GetPublicKeyResponse.verified_pem_crc32c
Nicht zutreffend DecryptResponse.plaintext_crc32c
MacSignRequest.data_crc32c MacSignResponse.verified_data_crc32c
MacVerifyRequest.data_crc32c MacVerifyResponse.verified_data_crc32c
MacVerifyRequest.mac_crc32c MacVerifyResponse.verified_mac_crc32c
Nicht zutreffend MacVerifyResponse.verified_success_integrity

Ressourcennamen überprüfen

Antworten für Encrypt, GetPublicKey, AsymmetricSign, MacSign und MacVerify beinhalten ein name-Feld, das den Namen des relevanten Cloud Key Management Service API-Objekts enthält. Sie können den Wert des name-Felds mit dem erwarteten Wert vergleichen und nicht übereinstimmende Ergebnisse verwerfen.

Diagramm zur Datenverifizierung

Das Diagramm zeigt, wann die einzelnen Datentypen für kryptografische Vorgänge verifiziert und wann Daten aus verschiedenen Quellentypen verifiziert werden müssen. Sie können auch eine Zusammenfassung der Felder für die Datenverifizierung aufrufen.

Diagramm mit verschiedenen Feldern zur Datenverifizierung und den entsprechenden Aktionen

Datenverifizierungsfeld-Zusammenfassung

Verwenden Sie beim Entwickeln Ihrer Anwendung diese Tabellen, um festzustellen, welche Felder zum Verifizieren Ihrer Daten vor und nach jedem kryptografischen Vorgang verwendet werden können.

Encrypt

API Serverseitige Eingabeüberprüfung Clientseitige Ressourcenüberprüfung Clientseitige Ausgabeüberprüfung Clientseitige Verifizierung der serverseitigen Eingabe
EncryptRequest plaintext_crc32c, additional_authenticated_data_crc32c
EncryptResponse name ciphertext_crc32c verified_plaintext_crc32c, verified_additional_authenticated_data_crc32c

Decrypt

API Serverseitige Eingabeüberprüfung Clientseitige Ressourcenüberprüfung Clientseitige Ausgabeüberprüfung Clientseitige Verifizierung der serverseitigen Eingabe
DecryptRequest ciphertext_crc32c, additional_authenticated_data_crc32c
DecryptResponse plaintext_crc32c

AsymmetricSign

API Serverseitige Eingabeüberprüfung Clientseitige Ressourcenüberprüfung Clientseitige Ausgabeüberprüfung Clientseitige Verifizierung der serverseitigen Eingabe
AsymmetricSignRequest digest_crc32c
AsymmetricSignResponse name signature_crc32c verified_digest_crc32c

AsymmetricDecrypt

API Serverseitige Eingabeüberprüfung Clientseitige Ressourcenüberprüfung Clientseitige Ausgabeüberprüfung Clientseitige Verifizierung der serverseitigen Eingabe
AsymmetricDecryptRequest ciphertext_crc32c
AsymmetricDecryptResponse plaintext_crc32c verified_ciphertext_crc32c

PublicKey

API Serverseitige Eingabeüberprüfung Clientseitige Ressourcenüberprüfung Clientseitige Ausgabeüberprüfung Clientseitige Verifizierung der serverseitigen Eingabe
PublicKey name pem_crc32c

MacSign

API Serverseitige Eingabeüberprüfung Clientseitige Ressourcenüberprüfung Clientseitige Ausgabeüberprüfung Clientseitige Verifizierung der serverseitigen Eingabe
MacSignRequest data_crc32c
MacSignResponse mac_crc32c verified_data_crc32c

MacVerify

API Serverseitige Eingabeüberprüfung Clientseitige Ressourcenüberprüfung Clientseitige Ausgabeüberprüfung Clientseitige Verifizierung der serverseitigen Eingabe
MacVerifyRequest data_crc32c mac_crc32c
MacVerifyResponse verified_data_crc32c verified_mac_crc32c verified_success_integrity

Nächste Schritte