Verificar la integridad de los datos de extremo a extremo

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

En esta página, se analiza el uso de los campos en la API de 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. Estos lineamientos complementan las formas en que Google Cloud protege tus datos de forma automática en reposo y en tránsito.

Protección automática de datos

Todos los datos de Google Cloud se encriptan de forma automática en tránsito y en reposo dentro de Google Cloud.

Cloud KMS toma medidas adicionales para proteger las claves de encriptación en reposo mediante la encriptación de cada clave de encriptación con otra clave criptográfica llamada clave de encriptación de claves (KEK). Para obtener más información sobre esta técnica, consulta Encriptación de sobre.

Cada operación criptográfica de Cloud KMS incluye verificaciones automáticas de daños de datos. Si se detecta daños, se anula la operación y se registra un error detallado.

Estas protecciones automáticas son importantes, pero no evitan la corrupción de datos del cliente. Por ejemplo, la corrupción de datos durante la encriptación puede generar datos que no se pueden desencriptar.

En este tema, se analizan las formas de detectar y evitar la corrupción de datos del cliente para minimizar el riesgo de pérdida de datos.

Cálculo y verificación de las sumas de verificación

Cada solicitud y respuesta de cada operación criptográfica incluye campos CRC32C checksum, como plaintext_crc32c. Puedes calcular la suma de verificación y comparar los valores calculados y mostrados.

En el servidor, la API de Cloud Key Management Service establece campos booleanos, como verified_plaintext_crc32c, en true para indicar que recibió la suma de verificación relevante, y muestra un error INVALID_ARGUMENT si la suma de verificación no coincide con el valor calculado por el servidor.

Ten en cuenta los siguientes lineamientos para calcular y comparar sumas de verificación:

  • Calcula las sumas de verificación mediante una codificación binaria en cuanto se envíen o reciban datos.
  • No almacenes sumas de verificación de texto simple sin encriptar en la API de Cloud Key Management Service o desde ella. Por ejemplo, no almacenes el contenido sin encriptar de los campos EncryptRequest.plaintext_crc32c o DecryptResponse.plaintext_crc32c. A fin de mantener un registro de una suma de verificación, debes serializarlo con los datos relevantes y pasar el objeto compuesto a Cloud KMS para su encriptación. Cuando desencriptas datos, puedes verificar la suma de verificación en función del valor esperado calculado.
  • Si una operación de desencriptación da como resultado sumas de verificación no coincidentes, diseña tu aplicación para que reintente la operación una cantidad limitada de veces, en caso de problemas transitorios.
  • Si una operación de encriptación da como resultado sumas de verificación no coincidentes para los datos encriptados (el cifrado), descarta el resultado encriptado y vuelve a intentarlo.

Para solicitudes de encriptación, haz lo siguiente:

  • Si incluyes el campo de suma de verificación en la solicitud, el servidor establece un campo de verificación relacionado en la respuesta a true para indicar que recibió la suma de verificación y que intentó verificar su valor.

  • Si incluyes el campo de suma de verificación, pero la respuesta establece el campo de verificación en false, el servidor no recibió el campo de suma de verificación y es posible que falte información en la respuesta. Vuelve a intentar la solicitud una cantidad limitada de veces en caso de que el error sea transitorio.

  • Si se recibió la suma de verificación, pero no coincidió, se muestra un error INVALID_ARGUMENT. El error incluye el nombre del campo y la suma de verificación que no coincidió. Por ejemplo:

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

    Vuelve a intentar la solicitud una cantidad limitada de veces en caso de que el error sea transitorio.

Para las solicitudes de desencriptación, puedes calcular una suma de verificación y compararla con el valor de DecryptResponse.plaintext_crc32c en la respuesta.

Los siguientes campos de suma de verificación se incluyen en las solicitudes y respuestas de la API de Cloud Key Management Service.

Campo en la solicitud Campo en 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
GetPublicKeyRequest.pem_crc32c GetPublicKeyResponse.verified_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

Verifica nombres de recursos

En las respuestas para Encrypt, GetPublicKey, AsymmetricSign, MacSign y MacVerify, se incluye un campo name que contiene el nombre del objeto de la API de Cloud Key Management Service relevante. 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 verificar cada tipo de datos relacionados con las operaciones criptográficas y cuándo verificar datos de cada tipo de fuente. También puedes ver un resumen de los campos de verificación de datos.

Diagrama que muestra diferentes campos de verificación de datos y las acciones a las que corresponden

Resumen del campo de verificación de datos

Usa estas tablas cuando diseñes tu aplicación a fin de determinar qué campos puedes usar para verificar tus datos antes y después de cada operación criptográfica.

Encrypt

API Verificación de entrada del servidor Verificación de recursos del cliente Verificación de salida del cliente Verificación del lado del cliente de la entrada del servidor
EncryptRequest plaintext_crc32c, additional_authenticated_data_crc32c
EncryptResponse name ciphertext_crc32c verified_plaintext_crc32c, verified_additional_authenticated_data_crc32c

Decrypt

API Verificación de entrada del servidor Verificación de recursos del cliente Verificación de salida del cliente Verificación del lado del cliente de la entrada del servidor
DecryptRequest ciphertext_crc32c, additional_authenticated_data_crc32c
DecryptResponse plaintext_crc32c

AsymmetricSign

API Verificación de entrada del servidor Verificación de recursos del cliente Verificación de salida del cliente Verificación del lado del cliente de la entrada del servidor
AsymmetricSignRequest digest_crc32c
AsymmetricSignResponse name signature_crc32c verificación_resumen_crc32c

AsymmetricDecrypt

API Verificación de entrada del servidor Verificación de recursos del cliente Verificación de salida del cliente Verificación del lado del cliente de la entrada del servidor
AsymmetricDecryptRequest ciphertext_crc32c
AsymmetricDecryptResponse plaintext_crc32c verified_ciphertext_crc32c

PublicKey

API Verificación de entrada del servidor Verificación de recursos del cliente Verificación de salida del cliente Verificación del lado del cliente de la entrada del servidor
PublicKey name pem_crc32c

MacSign

API Verificación de entrada del servidor Verificación de recursos del cliente Verificación de salida del cliente Verificación del lado del cliente de la entrada del servidor
MacSignRequest data_crc32c
MacSignResponse mac_crc32c verified_data_crc32c

Verificar Mac

API Verificación de entrada del servidor Verificación de recursos del cliente Verificación de salida del cliente Verificación del lado del cliente de la entrada del servidor
MacVerifyRequest data_crc32c mac_crc32c
MacVerifyResponse verified_data_crc32c verified_mac_crc32c verified_success_integrity

¿Qué sigue?