Verifica dell'integrità dei dati end-to-end

In questa pagina viene descritto l'uso dei campi dell'API Cloud Key Management Service per rilevare e impedire modifiche indesiderate ai dati durante lo spostamento tra i sistemi client e Cloud KMS. Queste linee guida integrano i modi in cui Google Cloud protegge automaticamente i dati at-rest e in transito.

Protezione automatica dei dati

Tutti i dati su Google Cloud vengono automaticamente criptati in transito e at-rest all'interno di Google Cloud.

Cloud KMS adotta misure aggiuntive per proteggere le chiavi di crittografia at-rest criptando ciascuna chiave di crittografia con un'altra chiave di crittografia denominata chiave di crittografia della chiave (KEK). Per ulteriori informazioni su questa tecnica, consulta la pagina relativa alla crittografia envelope.

Ogni operazione crittografica di Cloud KMS include controlli automatici per verificare il danneggiamento dei dati. Se viene rilevata un'attività danneggiata, 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ò causare dati che non possono essere decriptati.

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 crittografica includono campi di 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.

Durante il calcolo e il confronto dei checksum, tieni presente le seguenti linee guida:

  • Calcola i checksum utilizzando una codifica binaria non appena i dati vengono inviati o ricevuti.
  • Non archiviare checksum non criptati in testo non crittografato da o verso l'API Cloud Key Management Service. Ad esempio, non archiviare i contenuti non criptati dei campi EncryptRequest.plaintext_crc32c o DecryptResponse.plaintext_crc32c. Per tenere traccia di un checksum, serializzalo insieme ai dati pertinenti e passa 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 decriptazione genera checksum non corrispondenti, progetta la tua applicazione in modo che esegua nuovamente 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), ignora il risultato criptato e riprova.

Per le richieste di crittografia:

  • Se includi il campo di checksum nella richiesta, il server imposta un campo di verifica correlato nella risposta a true per indicare che ha ricevuto il checksum e ha tentato di verificarne il valore.

  • Se includi il campo di checksum, ma la risposta imposta il campo di verifica su false, il server non ha ricevuto il campo di checksum e potrebbero mancare altre informazioni nella risposta. Riprova a inviare 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 non corrispondenti. Ad esempio:

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

    Riprova a inviare 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 DecryptResponse.plaintext_crc32c nella risposta.

I seguenti campi di checksum sono inclusi nelle richieste e nelle risposte dell'API Cloud Key Management Service.

Campo nella richiesta Campo di 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 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

Verifica dei nomi delle risorse in corso...

Le risposte per Encrypt, GetPublicKey, AsymmetricSign, MacSign e MacVerify includono un campo name contenente il nome dell'oggetto API Cloud Key Management Service pertinente. Puoi confrontare il valore del campo name con il valore previsto ed eliminare i risultati che non corrispondono.

Diagramma di verifica dei dati

Questo diagramma mostra quando verificare ogni tipo di dati relativo alle operazioni crittografiche e quando verificare i dati di ogni tipo di origine. Puoi anche visualizzare un riepilogo dei campi di verifica dei dati.

Diagramma che mostra diversi campi di verifica dei dati e le azioni a cui corrispondono

Riepilogo del campo di verifica dei dati

Utilizza queste tabelle quando progetti la tua 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

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

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