Nesta página, discutimos o uso de campos na API Cloud Key Management Service para detectar e impedir alterações de dados não intencionais durante a transferência entre os sistemas de clientes e o Cloud KMS. Essas diretrizes complementam as maneiras de o Google Cloud proteger dados em repouso e em trânsito automaticamente.
Proteção de dados automática
Todos os dados no Google Cloud são automaticamente criptografados em trânsito e em repouso no Google Cloud.
O Cloud KMS executa etapas extras para proteger chaves de criptografia em repouso. Para isso, ele criptografa cada chave de criptografia usando outra chave de criptografia de chaves (KEK). Para saber mais sobre essa técnica, consulte a criptografia de envelope.
Cada operação criptográfica do Cloud KMS inclui verificações automáticas para corrupção de dados. Se a corrupção for detectada, a operação será cancelada e um erro detalhado será registrado.
Essas proteções automáticas são importantes, mas não impedem a corrupção de dados do lado do cliente. Por exemplo, a corrupção de dados durante a criptografia pode levar a dados que não podem ser descriptografados.
Este tópico discute maneiras de detectar e evitar a corrupção de dados do cliente para minimizar o risco de perda de dados.
Como calcular e verificar somas de verificação
Cada solicitação e resposta de operação criptográfica inclui campos de soma de verificação CRC32C, como plaintext_crc32c
. Calcule a soma de verificação e compare
os valores calculados e retornados.
No servidor, a API Cloud Key Management Service define campos booleanos, como verified_plaintext_crc32c
, para true
para indicar que recebeu a soma de verificação relevante. Em seguida, retorna um erro INVALID_ARGUMENT
se a soma de verificação não corresponder ao valor calculado pelo servidor.
Considere as seguintes diretrizes ao calcular e comparar somas de verificação:
- Calcule somas de verificação usando uma codificação binária assim que os dados forem enviados ou recebidos.
- Não armazene somas de verificação em texto simples não criptografadas de ou para a API Cloud Key Management Service. Por
exemplo, não armazene o conteúdo não criptografado dos
campos
EncryptRequest.plaintext_crc32c
ouDecryptResponse.plaintext_crc32c
. Para manter um registro de uma soma de verificação, serialize-o com os dados relevantes e passe o objeto composto para o Cloud KMS para criptografia. Ao descriptografar dados, é possível verificar a soma de verificação em relação ao valor esperado calculado. - Se uma operação de descriptografia resultar em somas de verificação incompatíveis, configure o aplicativo para repetir a operação por um número limitado de vezes, em caso de problemas temporários.
- Se uma operação de criptografia resultar em somas de verificação incompatíveis com os dados criptografados (texto criptografado), descarte o resultado e tente novamente.
Para solicitações de criptografia:
Se você incluir o campo de soma de verificação na solicitação, o servidor definirá um campo de verificação como
true
relacionado na resposta para indicar que ele recebeu a soma de verificação e tentou verificar o valor.Se você incluir o campo de soma de verificação, mas a resposta definir o campo de verificação como
false
, significa que o servidor não recebeu o campo de soma de verificação, e outras informações podem estar ausentes na resposta. Repita a solicitação um número limitado de vezes caso o erro seja temporário.Se a soma de verificação foi recebida, mas não encontrou correspondência, ela retornará um erro
INVALID_ARGUMENT
. Ele inclui o nome do campo e a soma de verificação que não encontrou correspondência. Por exemplo:The checksum in field plaintext_crc32c did not match the data in field plaintext.
Repita a solicitação um número limitado de vezes caso o erro seja temporário.
Para solicitações de descriptografia, calcule uma soma de verificação e compare-a com o
valor de DecryptResponse.plaintext_crc32c
na resposta.
Os campos de soma de verificação a seguir estão incluídos nas solicitações e respostas da API Cloud Key Management Service.
Campo na solicitação | Campo na resposta |
---|---|
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 |
Não relevante | GetPublicKeyResponse.pem_crc32c |
Não aplicável | DecryptResponse.plaintext_crc32c |
MacSignRequest.data_crc32c |
MacSignResponse.verified_data_crc32c |
MacVerifyRequest.data_crc32c |
MacVerifyResponse.verified_data_crc32c |
MacVerifyRequest.mac_crc32c |
MacVerifyResponse.verified_mac_crc32c |
Não relevante | MacVerifyResponse.verified_success_integrity |
Como verificar nomes de recursos
Respostas para
Encrypt,
GetPublicKey,
AsymmetricSign,
MacSign,
e
MacVerify,
inclua um campo name
que contém o nome do objeto relevante da API Cloud Key Management Service. É possível comparar o valor do campo name
com o valor esperado e descartar resultados que não correspondem.
Diagrama de verificação de dados
Este diagrama mostra quando verificar cada tipo de dados relacionados a operações criptográficas e quando verificar dados de cada tipo de origem. Também é possível ver um resumo dos campos de verificação de dados.
Resumo do campo de verificação de dados
Use essas tabelas ao projetar seu aplicativo para determinar quais campos podem ser usados a fim de verificar os dados antes e depois de cada operação criptográfica.
Encrypt
API | Verificação de entrada do lado do servidor | Verificação de recursos do lado do cliente | Verificação da saída do lado do cliente | Verificação do lado do cliente da entrada do lado do servidor |
---|---|---|---|---|
EncryptRequest |
plaintext_crc32c , additional_authenticated_data_crc32c |
|||
EncryptResponse |
name |
ciphertext_crc32c |
verified_plaintext_crc32c , verified_additional_authenticated_data_crc32c |
Decrypt
API | Verificação de entrada do lado do servidor | Verificação de recursos do lado do cliente | Verificação da saída do lado do cliente | Verificação do lado do cliente da entrada do lado do servidor |
---|---|---|---|---|
DecryptRequest |
ciphertext_crc32c , additional_authenticated_data_crc32c |
|||
DecryptResponse |
plaintext_crc32c |
AsymmetricSign
API | Verificação de entrada do lado do servidor | Verificação de recursos do lado do cliente | Verificação da saída do lado do cliente | Verificação do lado do cliente da entrada do lado do servidor |
---|---|---|---|---|
AsymmetricSignRequest |
digest_crc32c |
|||
AsymmetricSignResponse |
name |
signature_crc32c |
verified_digest_crc32c |
AsymmetricDecrypt
API | Verificação de entrada do lado do servidor | Verificação de recursos do lado do cliente | Verificação da saída do lado do cliente | Verificação do lado do cliente da entrada do lado do servidor |
---|---|---|---|---|
AsymmetricDecryptRequest |
ciphertext_crc32c |
|||
AsymmetricDecryptResponse |
plaintext_crc32c |
verified_ciphertext_crc32c |
PublicKey
API | Verificação de entrada do lado do servidor | Verificação de recursos do lado do cliente | Verificação da saída do lado do cliente | Verificação do lado do cliente da entrada do lado do servidor |
---|---|---|---|---|
PublicKey |
name |
pem_crc32c |
MacSign
API | Verificação de entrada do lado do servidor | Verificação de recursos do lado do cliente | Verificação da saída do lado do cliente | Verificação do lado do cliente da entrada do lado do servidor |
---|---|---|---|---|
MacSignRequest |
data_crc32c |
|||
MacSignResponse |
mac_crc32c |
verified_data_crc32c |
MacVerify
API | Verificação de entrada do lado do servidor | Verificação de recursos do lado do cliente | Verificação da saída do lado do cliente | Verificação do lado do cliente da entrada do lado do servidor | |
---|---|---|---|---|---|
MacVerifyRequest |
data_crc32c |
mac_crc32c |
|||
MacVerifyResponse |
verified_data_crc32c |
verified_mac_crc32c |
verified_success_integrity |
A seguir
- Saiba mais sobre a criptografia simétrica e assimétrica
- Saiba mais sobre como criptografar dados de aplicativos
- Usar registros de auditoria do Cloud