En este tema se describe cómo cifrar datos de forma local y subirlos a Cloud Storage con Tink y Cloud Key Management Service (Cloud KMS). Tink es una biblioteca de criptografía de código abierto escrita por criptógrafos e ingenieros de seguridad de Google.
Información general
El cifrado del lado del cliente es cualquier cifrado que se realice antes de enviar los datos a la nube. Cuando usas el cifrado del lado del cliente, eres responsable de crear y gestionar tus claves de cifrado, así como de cifrar tus datos antes de enviarlos a la nube.
En este tema, se implementa el cifrado de envolvente del lado del cliente con Tink mediante una clave de cifrado en Cloud KMS.
Puedes encontrar una versión de este tutorial basada en Terraform en el repositorio de GitHub kms-solutions.
Antes de empezar
- Crea una clave de encriptado simétrica de Cloud KMS para el encriptado. Anota el URI de la clave. Necesitarás estos datos más adelante.
- Instala Tink para usarlo con Cloud KMS.
- Crea un segmento en Cloud Storage para subir tus datos cifrados.
Roles obligatorios
Para asegurarte de que tu cuenta de servicio tiene los permisos necesarios para usar las claves de Cloud KMS con Tink,
pídele a tu administrador que le conceda a tu cuenta de servicio el rol de
Encargado del encriptado y desencriptado de la clave criptográfica Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter
)
de IAM en tu clave.
Es posible que tu administrador también pueda conceder a tu cuenta de servicio los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Encriptado envolvente con Tink
En el encriptado de envolvente, la clave de Cloud KMS actúa como clave de encriptado de claves (KEK). Es decir, se usa para cifrar las claves de cifrado de datos (DEK), que a su vez se usan para cifrar los datos reales.
Después de crear una KEK en Cloud KMS, para cifrar cada mensaje, debes hacer lo siguiente:
- Genera una clave de cifrado de datos (DEK) de forma local.
- Usa la DEK de forma local para cifrar el mensaje.
- Usa Cloud KMS para encriptar (envolver) la DEK con la KEK.
- Almacena los datos cifrados y la DEK envuelta.
No es necesario que implementes este proceso de cifrado de envolvente desde cero cuando uses Tink.
Para usar Tink en el cifrado envolvente, debes proporcionar a Tink un URI de clave y credenciales. El URI de la clave apunta a tu KEK en Cloud KMS y las credenciales permiten que Tink use la KEK. Tink genera la DEK, encripta los datos, encapsula la DEK y, a continuación, devuelve un solo texto cifrado con los datos encriptados y la DEK encapsulada.
Tink admite el encriptado envolvente en Python, Java, C++ y Go mediante la primitiva de encriptado autenticado con datos asociados (AEAD).
Conectar Tink y Cloud KMS
Para cifrar las DEKs generadas por Tink con tu KEK en Cloud KMS, debes obtener el URI de tu KEK. En Cloud KMS, el URI de la KEK tiene el siguiente formato:
gcp-kms://projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION
Consulta Obtener un ID de recurso de Cloud KMS para obtener más información sobre cómo obtener la ruta de tu clave.
Inicializar Tink y cifrar datos
Tink usa primitivas, que son componentes básicos criptográficos que gestionan los detalles de sus algoritmos subyacentes, para que puedas realizar tareas de forma segura. Cada primitivo ofrece una API que gestiona una tarea específica. Aquí usamos AEAD, por lo que usamos la primitiva AEAD de Tink.
Python
Python
Para saber cómo instalar y usar la biblioteca de cliente de Cloud KMS, consulta Bibliotecas de cliente de Cloud KMS.
Para autenticarte en Cloud KMS, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Java
Java
Para saber cómo instalar y usar la biblioteca de cliente de Cloud KMS, consulta Bibliotecas de cliente de Cloud KMS.
Para autenticarte en Cloud KMS, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Para obtener más información sobre los primitivos y las interfaces compatibles con Tink, consulta la página Empezar de Tink.
Siguientes pasos
- Más información sobre Tink
- Consulta cómo usar el cifrado del lado del cliente con Cloud SQL.