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 kryptografischen Vorgangs umfasst Folgendes:
CRC32C-Prüfsumme
wie z. B. 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
oderDecryptResponse.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 |
Nicht zutreffend | GetPublicKeyResponse.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.
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
- Weitere Informationen zur symmetrischen und asymmetrischen Verschlüsselung
- Weitere Informationen zum Verschlüsseln von Anwendungsdaten
- Cloud-Audit-Logs verwenden