En esta página se explica cómo usar los campos de la API Cloud Key Management Service para detectar y evitar cambios no deseados en los datos a medida que se mueven entre los sistemas cliente y Cloud KMS. Estas directrices complementan las formas en las que Google Cloud protege automáticamente tus datos en reposo y en tránsito.
Protección de datos automática
Todos los datos de Google Cloud se cifran automáticamente en tránsito y en reposo en Google Cloud.
Cloud KMS toma medidas adicionales para proteger las claves de encriptado en reposo. Para ello, encripta cada clave de encriptado con otra clave criptográfica llamada clave de encriptado de claves (KEK). Para obtener más información sobre esta técnica, consulta el artículo sobre el cifrado de envolvente.
Cada operación criptográfica de Cloud KMS incluye comprobaciones automáticas de corrupción de datos. Si se detecta corrupción, la operación se cancela y se registra un error detallado.
Estas protecciones automáticas son importantes, pero no evitan que los datos se dañen en el lado del cliente. Por ejemplo, si los datos se dañan durante el cifrado, no se podrán descifrar.
En este tema se describen formas de detectar y evitar que se dañen los datos del lado del cliente para minimizar el riesgo de pérdida de datos.
Calcular y verificar sumas de comprobación
La solicitud y la respuesta de cada operación criptográfica incluyen campos de suma de comprobación CRC32C, como plaintext_crc32c
. Puedes calcular la suma de comprobación y comparar los valores calculados y devueltos.
En el servidor, la API Cloud Key Management Service asigna el valor true
a los campos booleanos, como verified_plaintext_crc32c
, para indicar que ha recibido la suma de comprobación correspondiente y devuelve un error INVALID_ARGUMENT
si la suma de comprobación no coincide con el valor calculado por el servidor.
Ten en cuenta las siguientes directrices al calcular y comparar sumas de comprobación:
- Calcula las sumas de comprobación con una codificación binaria en cuanto se envíen o reciban los datos.
- No almacenes sumas de comprobación de texto sin cifrar en la API de Cloud Key Management Service ni desde ella. Por ejemplo, no almacenes el contenido sin cifrar de los campos
EncryptRequest.plaintext_crc32c
oDecryptResponse.plaintext_crc32c
. Para mantener un registro de una suma de comprobación, serialízala junto con los datos pertinentes y envía el objeto compuesto a Cloud KMS para que lo cifre. Cuando descifre datos, podrá verificar la suma de comprobación con el valor esperado que haya calculado. - Si una operación de descifrado da como resultado sumas de comprobación que no coinciden, diseña tu aplicación para que vuelva a intentar la operación un número limitado de veces en caso de que haya problemas transitorios.
- Si una operación de cifrado da como resultado sumas de comprobación no coincidentes para los datos cifrados (el texto cifrado), descarta el resultado cifrado y vuelve a intentarlo.
Para las solicitudes de cifrado:
Si incluye el campo de suma de comprobación en la solicitud, el servidor asigna el valor
true
a un campo de verificación relacionado en la respuesta para indicar que ha recibido la suma de comprobación y ha intentado verificar su valor.Si incluye el campo de suma de comprobación, pero la respuesta asigna el valor
false
al campo de verificación, significa que el servidor no ha recibido el campo de suma de comprobación y que puede que falte otra información en la respuesta. Vuelve a intentar enviar la solicitud un número limitado de veces por si el error es transitorio.Si se ha recibido la suma de comprobación, pero no coincide, se devuelve un error
INVALID_ARGUMENT
. El error incluye el nombre del campo y la suma de comprobación que no coincide. Por ejemplo:The checksum in field plaintext_crc32c did not match the data in field plaintext.
Vuelve a intentar enviar la solicitud un número limitado de veces por si el error es transitorio.
En el caso de las solicitudes de descifrado, puedes calcular una suma de comprobación y compararla con el valor de DecryptResponse.plaintext_crc32c
en la respuesta.
Los siguientes campos de suma de comprobación se incluyen en las solicitudes y respuestas de la API de Cloud Key Management Service.
Campo de la solicitud | Campo de respuesta |
---|---|
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 |
No aplicable | GetPublicKeyResponse.pem_crc32c |
No aplicable | DecryptResponse.plaintext_crc32c |
MacSignRequest.data_crc32c |
MacSignResponse.verified_data_crc32c |
MacVerifyRequest.data_crc32c |
MacVerifyResponse.verified_data_crc32c |
MacVerifyRequest.mac_crc32c |
MacVerifyResponse.verified_mac_crc32c |
No aplicable | MacVerifyResponse.verified_success_integrity |
Verificar nombres de recursos
Las respuestas de
Encrypt,
GetPublicKey,
AsymmetricSign,
MacSign,
y
MacVerify,
incluyen un campo name
que contiene el nombre del objeto de la API de Cloud Key Management Service correspondiente. Puedes comparar el valor del campo name
con el valor que esperas y descartar los resultados que no coincidan.
Diagrama de verificación de datos
En este diagrama se muestra cuándo se debe verificar cada tipo de datos relacionados con las operaciones criptográficas y cuándo se deben verificar los datos de cada tipo de fuente. También puedes ver un resumen de los campos de verificación de datos.
Resumen de los campos de verificación de datos
Usa estas tablas al diseñar tu aplicación para determinar qué campos puedes usar para verificar tus datos antes y después de cada operación criptográfica.
Cifrar
API | Verificación de entradas del lado del servidor | Verificación de recursos del lado del cliente | Verificación de la salida del lado del cliente | Verificación del lado del cliente de las entradas del lado del servidor |
---|---|---|---|---|
EncryptRequest |
plaintext_crc32c , additional_authenticated_data_crc32c |
|||
EncryptResponse |
name |
ciphertext_crc32c |
verified_plaintext_crc32c , verified_additional_authenticated_data_crc32c |
Descifrar
API | Verificación de entradas del lado del servidor | Verificación de recursos del lado del cliente | Verificación de la salida del lado del cliente | Verificación del lado del cliente de las entradas del lado del servidor |
---|---|---|---|---|
DecryptRequest |
ciphertext_crc32c , additional_authenticated_data_crc32c |
|||
DecryptResponse |
plaintext_crc32c |
AsymmetricSign
API | Verificación de entradas del lado del servidor | Verificación de recursos del lado del cliente | Verificación de la salida del lado del cliente | Verificación del lado del cliente de las entradas del lado del servidor |
---|---|---|---|---|
AsymmetricSignRequest |
digest_crc32c |
|||
AsymmetricSignResponse |
name |
signature_crc32c |
verified_digest_crc32c |
AsymmetricDecrypt
API | Verificación de entradas del lado del servidor | Verificación de recursos del lado del cliente | Verificación de la salida del lado del cliente | Verificación del lado del cliente de las entradas del lado del servidor |
---|---|---|---|---|
AsymmetricDecryptRequest |
ciphertext_crc32c |
|||
AsymmetricDecryptResponse |
plaintext_crc32c |
verified_ciphertext_crc32c |
PublicKey
API | Verificación de entradas del lado del servidor | Verificación de recursos del lado del cliente | Verificación de la salida del lado del cliente | Verificación del lado del cliente de las entradas del lado del servidor |
---|---|---|---|---|
PublicKey |
name |
pem_crc32c |
MacSign
API | Verificación de entradas del lado del servidor | Verificación de recursos del lado del cliente | Verificación de la salida del lado del cliente | Verificación del lado del cliente de las entradas del lado del servidor |
---|---|---|---|---|
MacSignRequest |
data_crc32c |
|||
MacSignResponse |
mac_crc32c |
verified_data_crc32c |
MacVerify
API | Verificación de entradas del lado del servidor | Verificación de recursos del lado del cliente | Verificación de la salida del lado del cliente | Verificación del lado del cliente de las entradas del lado del servidor | |
---|---|---|---|---|---|
MacVerifyRequest |
data_crc32c |
mac_crc32c |
|||
MacVerifyResponse |
verified_data_crc32c |
verified_mac_crc32c |
verified_success_integrity |
Siguientes pasos
- Más información sobre el cifradosimétrico y asimétrico
- Consulta más información sobre cómo cifrar datos de aplicaciones.
- Usar Registros de auditoría de Cloud