Validar a integridade dos dados ponto a ponto

Esta página aborda a utilização de campos na API Cloud Key Management Service para detetar e impedir alterações não intencionais aos dados à medida que se movem entre os sistemas do cliente e o Cloud KMS. Estas diretrizes complementam as formas como o Google Cloud protege automaticamente os seus dados em repouso e em trânsito. Google Cloud

Proteção de dados automática

Todos os dados no Google Cloud são automaticamente encriptados em trânsito e em repouso no âmbito do Google Cloud.

O Cloud KMS toma medidas adicionais para proteger as chaves de encriptação em repouso encriptando cada chave de encriptação com outra chave criptográfica denominada chave de encriptação de chaves (KEK). Para saber mais acerca desta técnica, consulte a secção sobre encriptação de envelopes.

Cada operação criptográfica do Cloud KMS inclui verificações automáticas de corrupção de dados. Se for detetada corrupção, a operação é anulada e é registado um erro detalhado.

Estas proteções automáticas são importantes, mas não impedem a danificação de dados do lado do cliente. Por exemplo, a corrupção de dados durante a encriptação pode levar a dados que não podem ser desencriptados.

Este tópico aborda formas de detetar e impedir a danificação de dados do lado do cliente para minimizar o risco de perda de dados.

Calcular e validar somas de verificação

O pedido e a resposta de cada operação criptográfica incluem campos de soma de verificação CRC32C, como plaintext_crc32c. Pode calcular a soma de verificação e comparar os valores calculados e devolvidos.

No servidor, a API Cloud Key Management Service define campos booleanos, como verified_plaintext_crc32c, como true para indicar que recebeu a soma de verificação relevante e devolve um erro INVALID_ARGUMENT se a soma de verificação não corresponder ao valor calculado pelo servidor.

Tenha em atenção as seguintes diretrizes quando calcular e comparar somas de verificação:

  • Calcular as 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 de texto simples não encriptadas para ou a partir da Cloud Key Management Service API. Por exemplo, não armazene o conteúdo não encriptado dos campos EncryptRequest.plaintext_crc32c ou DecryptResponse.plaintext_crc32c. Para manter um registo de uma soma de verificação, serializar a mesma juntamente com os dados relevantes e transmitir o objeto composto ao Cloud KMS para encriptação. Quando desencripta dados, pode validar a soma de verificação em relação ao valor esperado calculado.
  • Se uma operação de desencriptação resultar em somas de verificação não correspondentes, crie a sua aplicação para tentar novamente a operação um número limitado de vezes, em caso de problemas transitórios.
  • Se uma operação de encriptação resultar em somas de verificação não correspondentes para os dados encriptados (o texto cifrado), rejeite o resultado encriptado e tente novamente.

Para pedidos de encriptação:

  • Se incluir o campo de soma de verificação no pedido, o servidor define um campo de validação relacionado na resposta para true indicar que recebeu a soma de verificação e tentou validar o respetivo valor.

  • Se incluir o campo de soma de verificação, mas a resposta definir o campo de validação como false, o servidor não recebeu o campo de soma de verificação e podem faltar outras informações na resposta. Tentar novamente o pedido um número limitado de vezes caso o erro seja transitório.

  • Se a soma de verificação foi recebida, mas não correspondeu, é devolvido um erro INVALID_ARGUMENT. O erro inclui o nome do campo e a soma de verificação que não corresponde. Por exemplo:

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

    Tentar novamente o pedido um número limitado de vezes caso o erro seja transitório.

Para pedidos de desencriptação, pode calcular uma soma de verificação e compará-la com o valor de DecryptResponse.plaintext_crc32c na resposta.

Os seguintes campos de soma de verificação estão incluídos nos pedidos e nas respostas da API Cloud Key Management Service.

Campo no pedido 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 aplicável GetPublicKeyResponse.pem_crc32c
Não aplicável GetPublicKeyResponse.public_key.crc32c_checksum
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 aplicável MacVerifyResponse.verified_success_integrity
DecapsulateRequest.ciphertext_crc32c DecapsulateResponse.verified_ciphertext_crc32c
Não aplicável DecapsulateResponse.shared_secret_crc32c

Validar nomes de recursos

As respostas para Encrypt, GetPublicKey, AsymmetricSign, AsymmetricDecrypt, Decapsulate, MacSign, e MacVerify, incluem um campo name que contém o nome do objeto da API Cloud Key Management Service relevante. Pode comparar o valor do campo name com o valor esperado e rejeitar os resultados que não correspondem.

Diagrama de validação de dados

Este diagrama mostra quando validar cada tipo de dados relacionados com operações criptográficas e quando validar dados de cada tipo de origem. Também pode ver um resumo dos campos de validação de dados.

Diagrama que mostra diferentes campos de validação de dados e as ações a que correspondem

Resumo do campo de validação de dados

Use estas tabelas ao criar a sua aplicação para determinar que campos pode usar para validar os seus dados antes e depois de cada operação criptográfica.

Encriptar

API Validação de entrada do lado do servidor Validação de recursos do lado do cliente Validação do resultado do lado do cliente Validaçã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

Desencriptar

API Validação de entrada do lado do servidor Validação de recursos do lado do cliente Validação do resultado do lado do cliente Validação do lado do cliente da entrada do lado do servidor
DecryptRequest ciphertext_crc32c, additional_authenticated_data_crc32c
DecryptResponse plaintext_crc32c

AsymmetricSign

API Validação de entrada do lado do servidor Validação de recursos do lado do cliente Validação do resultado do lado do cliente Validação do lado do cliente da entrada do lado do servidor
AsymmetricSignRequest digest_crc32c
AsymmetricSignResponse name signature_crc32c verified_digest_crc32c

AsymmetricDecrypt

API Validação de entrada do lado do servidor Validação de recursos do lado do cliente Validação do resultado do lado do cliente Validação do lado do cliente da entrada do lado do servidor
AsymmetricDecryptRequest ciphertext_crc32c
AsymmetricDecryptResponse plaintext_crc32c verified_ciphertext_crc32c

Decapsulate

API Validação de entrada do lado do servidor Validação de recursos do lado do cliente Validação do resultado do lado do cliente Validação do lado do cliente da entrada do lado do servidor
DecapsulateRequest ciphertext_crc32c
DecapsulateResponse shared_secret_crc32c verified_ciphertext_crc32c

PublicKey

API Validação de entrada do lado do servidor Validação de recursos do lado do cliente Validação do resultado do lado do cliente Validação do lado do cliente da entrada do lado do servidor
PublicKey name pem_crc32c, public_key.crc32c_checksum

MacSign

API Validação de entrada do lado do servidor Validação de recursos do lado do cliente Validação do resultado do lado do cliente Validação do lado do cliente da entrada do lado do servidor
MacSignRequest data_crc32c
MacSignResponse mac_crc32c verified_data_crc32c

MacVerify

API Validação de entrada do lado do servidor Validação de recursos do lado do cliente Validação do resultado do lado do cliente Validaçã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

O que se segue?