Questa pagina descrive l'utilizzo dei campi nell'API Cloud Key Management Service per rilevare e impedire modifiche indesiderate ai dati durante il trasferimento tra i sistemi client e Cloud KMS. Queste linee guida integrano i modi in cui Google Cloud protegge automaticamente i tuoi dati inattivi e in transito.
Protezione automatica dei dati
Tutti i dati su Google Cloud vengono criptati automaticamente in transito e at-rest all'interno di Google Cloud.
Cloud KMS adotta misure aggiuntive per proteggere le chiavi di crittografia inattive criptando ogni chiave di crittografia utilizzando un'altra chiave di crittografia chiamata chiave di crittografia della chiave (KEK). Per saperne di più su questa tecnica, consulta la sezione Crittografia envelope.
Ogni operazione crittografica di Cloud KMS include controlli automatici per il danneggiamento dei dati. Se viene rilevata una corruzione, l'operazione viene interrotta e viene registrato un errore dettagliato.
Queste protezioni automatiche sono importanti, ma non impediscono il danneggiamento dei dati lato client. Ad esempio, il danneggiamento dei dati durante la crittografia può comportare la perdita di dati che non possono essere decrittografati.
Questo argomento illustra i modi per rilevare e prevenire il danneggiamento dei dati lato client per ridurre al minimo il rischio di perdita di dati.
Calcolo e verifica dei checksum
La richiesta e la risposta di ogni operazione di crittografia includono campi checksum CRC32C, ad esempio plaintext_crc32c
. Puoi calcolare il checksum e confrontare
i valori calcolati e restituiti.
Sul server, l'API Cloud Key Management Service imposta i campi booleani, ad esempio verified_plaintext_crc32c
, su true
per indicare che ha ricevuto il checksum pertinente e restituisce un errore INVALID_ARGUMENT
se il checksum non corrisponde al valore calcolato dal server.
Tieni presente le seguenti linee guida quando calcoli e confronti i checksum:
- Calcola i checksum utilizzando una codifica binaria non appena i dati vengono inviati o ricevuti.
- Non memorizzare checksum non criptati in testo normale nell'API Cloud Key Management Service o da questa. Ad esempio, non memorizzare i contenuti non criptati dei campi
EncryptRequest.plaintext_crc32c
oDecryptResponse.plaintext_crc32c
. Per conservare un record di un checksum, serializzalo insieme ai dati pertinenti e trasferisci l'oggetto composto a Cloud KMS per la crittografia. Quando decripti i dati, puoi verificare il checksum rispetto al valore previsto calcolato. - Se un'operazione di decrittografia genera checksum non corrispondenti, progetta la tua applicazione in modo che riprovi l'operazione un numero limitato di volte, in caso di problemi temporanei.
- Se un'operazione di crittografia genera checksum non corrispondenti per i dati criptati (il testo crittografato), scarta il risultato criptato e riprova.
Per le richieste di crittografia:
Se includi il campo del checksum nella richiesta, il server imposta un campo di verifica correlato nella risposta su
true
per indicare che ha ricevuto il checksum e ha tentato di verificarne il valore.Se includi il campo del checksum, ma la risposta imposta il campo di verifica su
false
, il server non ha ricevuto il campo del checksum e altre informazioni potrebbero mancare nella risposta. Riprova la richiesta un numero limitato di volte nel caso in cui l'errore sia temporaneo.Se il checksum è stato ricevuto ma non corrisponde, viene restituito un errore
INVALID_ARGUMENT
. L'errore include il nome del campo e il checksum che non corrisponde. Ad esempio:The checksum in field plaintext_crc32c did not match the data in field plaintext.
Riprova la richiesta un numero limitato di volte nel caso in cui l'errore sia temporaneo.
Per le richieste di decriptazione, puoi calcolare un checksum e confrontarlo con il
valore di DecryptResponse.plaintext_crc32c
nella risposta.
Le seguenti richieste e risposte dell'API Cloud Key Management Service includono i seguenti campi checksum.
Campo nella richiesta | Campo nella risposta |
---|---|
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 |
Non applicabile | GetPublicKeyResponse.pem_crc32c |
Non applicabile | GetPublicKeyResponse.public_key.crc32c_checksum |
Non applicabile | DecryptResponse.plaintext_crc32c |
MacSignRequest.data_crc32c |
MacSignResponse.verified_data_crc32c |
MacVerifyRequest.data_crc32c |
MacVerifyResponse.verified_data_crc32c |
MacVerifyRequest.mac_crc32c |
MacVerifyResponse.verified_mac_crc32c |
Non applicabile | MacVerifyResponse.verified_success_integrity |
DecapsulateRequest.ciphertext_crc32c |
DecapsulateResponse.verified_ciphertext_crc32c |
Non applicabile | DecapsulateResponse.shared_secret_crc32c |
Verifica dei nomi delle risorse
Le risposte per
Encrypt,
GetPublicKey,
AsymmetricSign,
AsymmetricDecrypt,
Decapsulate,
MacSign,
e
MacVerify,
includono un campo name
che contiene il nome dell'oggetto API Cloud Key Management Service pertinente. Puoi confrontare il valore del campo name
con il valore previsto
e scartare i risultati che non corrispondono.
Diagramma di verifica dei dati
Questo diagramma mostra quando verificare ogni tipo di dati correlati alle operazioni crittografiche e quando verificare i dati di ogni tipo di origine. Puoi anche visualizzare un riepilogo dei campi di verifica dei dati.
Riepilogo dei campi di verifica dei dati
Utilizza queste tabelle durante la progettazione dell'applicazione per determinare quali campi puoi utilizzare per verificare i dati prima e dopo ogni operazione crittografica.
Cripta
API | Verifica dell'input lato server | Verifica delle risorse lato client | Verifica dell'output lato client | Verifica lato client dell'input lato server |
---|---|---|---|---|
EncryptRequest |
plaintext_crc32c , additional_authenticated_data_crc32c |
|||
EncryptResponse |
name |
ciphertext_crc32c |
verified_plaintext_crc32c , verified_additional_authenticated_data_crc32c |
Decripta
API | Verifica dell'input lato server | Verifica delle risorse lato client | Verifica dell'output lato client | Verifica lato client dell'input lato server |
---|---|---|---|---|
DecryptRequest |
ciphertext_crc32c , additional_authenticated_data_crc32c |
|||
DecryptResponse |
plaintext_crc32c |
AsymmetricSign
API | Verifica dell'input lato server | Verifica delle risorse lato client | Verifica dell'output lato client | Verifica lato client dell'input lato server |
---|---|---|---|---|
AsymmetricSignRequest |
digest_crc32c |
|||
AsymmetricSignResponse |
name |
signature_crc32c |
verified_digest_crc32c |
AsymmetricDecrypt
API | Verifica dell'input lato server | Verifica delle risorse lato client | Verifica dell'output lato client | Verifica lato client dell'input lato server |
---|---|---|---|---|
AsymmetricDecryptRequest |
ciphertext_crc32c |
|||
AsymmetricDecryptResponse |
plaintext_crc32c |
verified_ciphertext_crc32c |
Decapsulate
API | Verifica dell'input lato server | Verifica delle risorse lato client | Verifica dell'output lato client | Verifica lato client dell'input lato server |
---|---|---|---|---|
DecapsulateRequest |
ciphertext_crc32c |
|||
DecapsulateResponse |
shared_secret_crc32c |
verified_ciphertext_crc32c |
PublicKey
API | Verifica dell'input lato server | Verifica delle risorse lato client | Verifica dell'output lato client | Verifica lato client dell'input lato server |
---|---|---|---|---|
PublicKey |
name |
pem_crc32c, public_key.crc32c_checksum |
MacSign
API | Verifica dell'input lato server | Verifica delle risorse lato client | Verifica dell'output lato client | Verifica lato client dell'input lato server |
---|---|---|---|---|
MacSignRequest |
data_crc32c |
|||
MacSignResponse |
mac_crc32c |
verified_data_crc32c |
MacVerify
API | Verifica dell'input lato server | Verifica delle risorse lato client | Verifica dell'output lato client | Verifica lato client dell'input lato server | |
---|---|---|---|---|---|
MacVerifyRequest |
data_crc32c |
mac_crc32c |
|||
MacVerifyResponse |
verified_data_crc32c |
verified_mac_crc32c |
verified_success_integrity |
Passaggi successivi
- Scopri di più sulla crittografia simmetrica e asimmetrica
- Scopri di più sulla crittografia dei dati delle applicazioni
- Utilizza Cloud Audit Logs