En esta página, se analiza el uso de campos en la API de Cloud Key Management Service para detectar y evitar cambios no deseados en los datos a medida que se trasladan entre los sistemas cliente y Cloud KMS. Estos lineamientos complementan las formas en que Google Cloud protege automáticamente tus datos tanto en reposo como en transporte público.
Protección automática de datos
Todos los datos en Google Cloud se encriptan automáticamente. en tránsito y en reposo en en Google Cloud.
Cloud KMS toma medidas adicionales para proteger las claves de encriptación en reposo encriptando 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 para detectar daños en los datos. Si se detectan 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. Por ejemplo, los daños en los datos durante la encriptación pueden generar que no se pueden desencriptar.
En este tema, se analizan formas de detectar y prevenir la corrupción de datos del cliente para y minimizar el riesgo de pérdida de datos.
Calcula y verifica sumas de comprobación
La solicitud y respuesta de cada operación criptográfica incluyen
Suma de verificación CRC32C
campos, como plaintext_crc32c
. Puedes calcular la suma de comprobació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 comprobación relevante y muestra un error INVALID_ARGUMENT
si la suma de comprobación no coincide con el valor que calculó el servidor.
Ten en cuenta las siguientes pautas cuando calcules y compares sumas de comprobación:
- Calcular sumas de comprobación, con una codificación binaria, en cuanto se envíen los datos o recibidos.
- No almacenes sumas de comprobación de texto sin formato sin encriptar desde o hacia la API de Cloud Key Management Service. Para
por ejemplo, no almacenes el contenido sin encriptar del
Campos
EncryptRequest.plaintext_crc32c
oDecryptResponse.plaintext_crc32c
. Para mantener un registro de una suma de comprobación, serializarla junto con los datos relevantes y pasar el objeto compuesto a Cloud KMS para encriptarlo. Cuando desencriptar los datos, puedes verificar la suma de comprobación con valor. - Si una operación de desencriptación da como resultado sumas de comprobación no coincidentes, diseña tu que la aplicación vuelva a intentar la operación una cantidad limitada de veces, en caso de que los problemas transitorios.
- Si una operación de encriptación genera sumas de comprobación (el texto cifrado), descarta el resultado encriptado y vuelve a intentarlo.
Para las solicitudes de encriptación, haz lo siguiente:
Si incluyes el campo de suma de comprobación en la solicitud, el servidor establece un de verificación en la respuesta a
true
para indicar que recibió la suma de comprobación e intentó verificar su valor.Si incluyes el campo de suma de comprobación, pero la respuesta establece el campo de verificación en
false
, el servidor no recibió el campo de suma de comprobación y es posible que falte otra 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 comprobación, pero no coincidió, se mostrará un error
INVALID_ARGUMENT
. que se devuelven. El error incluye el nombre del campo y la suma de comprobación que no la coincidencia. 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 comprobación y compararla con
valor de DecryptResponse.plaintext_crc32c
en la respuesta.
Los siguientes campos de suma de comprobación se incluyen en las solicitudes a la API de Cloud Key Management Service y las respuestas de esta.
Campo en la solicitud | Campo en la 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 |
Verifica los nombres de los recursos
Respuestas para
Encriptar,
GetPublicKey,
AsymmetricSign,
MacSign,
y
MacVerify,
incluir un campo name
que contenga el nombre 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 verificar cada tipo de datos relacionados con las claves las operaciones y cuándo verificar los datos de cada tipo de fuente. También puedes ver un resumen de los campos de verificación de datos.
Resumen del campo de verificación de datos
Usa estas tablas cuando diseñes tu aplicación para 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 |
verified_digest_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 |
MacVerify
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?
- Obtén más información sobre los conceptos simétricos y encriptación asimétrica
- Obtén más información sobre encriptar datos de aplicaciones
- Usa Registros de auditoría de Cloud