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
ouDecryptResponse.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.
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?
- Saiba mais acerca da encriptação simétrica e assimétrica
- Saiba mais sobre como encriptar dados de aplicações
- Use os registos de auditoria do Cloud