Introducción
Para almacenar y encriptar datos a la escala de Google, es necesario usar un servicio central de gestión de claves criptográficas con varias capas de claves para los datos encriptados. Un ejemplo de varias capas de claves es el encriptado envolvente, que es el proceso de encriptar una clave con otra.
Puedes cifrar los datos tanto en la capa de aplicación, que se encarga de mostrar los datos a los usuarios, como en la capa de almacenamiento, que proporciona el almacenamiento físico de los datos.
De forma predeterminada, en la capa de almacenamiento, Google Cloud cifra el contenido de los clientes almacenado en reposo mediante el cifrado envolvente, con el servicio de gestión de claves interno de Google como almacén de claves central. Si almacenas y cifras datos por tu cuenta, puedes usar Cloud Key Management Service como almacén de claves centralizado en la capa de aplicación, que es el tema principal de este artículo.
Cloud KMS almacena las claves en una jerarquía de claves diseñada para facilitar el acceso a los recursos de la jerarquía de claves, que se rige por la gestión de identidades y accesos. A continuación, se muestran los niveles principales de una jerarquía de claves de Cloud KMS:
Consulta más información sobre la jerarquía de claves en la jerarquía de objetos.
Claves de cifrado de datos
La clave que se usa para cifrar los datos se denomina clave de cifrado de datos (DEK).
Estas son las prácticas recomendadas para gestionar las DEKs:
- Generar DEKs de forma local.
- Cuando se almacenen, asegúrate siempre de que las DEKs estén cifradas en reposo.
- Para facilitar el acceso, almacena la DEK cerca de los datos que cifra.
- Genera una DEK cada vez que escribas los datos. Esto significa que no tienes que rotar las DEKs.
- No uses la misma DEK para cifrar datos de dos usuarios diferentes.
- Usa un algoritmo seguro, como el estándar de cifrado avanzado (AES) de 256 bits en modo Galois/Counter (GCM).
Claves de cifrado de claves
La DEK se cifra (también se conoce como encapsulada) con una clave de cifrado de claves (KEK). El proceso de cifrado de una clave con otra se conoce como cifrado envolvente.
A continuación, se indican las prácticas recomendadas para gestionar las KEKs:
Almacena las KEK de forma centralizada.
Definir la granularidad de las DEKs que cifran en función de su caso práctico. Por ejemplo, supongamos que tienes una carga de trabajo que requiere varias DEKs para cifrar los fragmentos de datos de la carga de trabajo. Podrías usar una sola KEK para envolver todas las DEKs que se encargan del cifrado de esa carga de trabajo.
Rota las claves con regularidad y también después de un incidente sospechoso. Para obtener más información, consulta Rotación de claves.
Equilibrio entre DEKs y KEKs
La existencia de un menor número de KEKs que de DEKs y el uso de un servicio central de gestión de claves posibilita el almacenamiento y cifrado de datos a gran escala. Un servicio de claves centralizado también es un punto único para auditar y restringir el acceso a los datos con mayor facilidad.
En función de tu situación y del volumen de datos que vayas a cifrar, puedes elegir un modelo similar. Se puede usar una sola KEK para proteger muchas DEKs. Este modelo permite que cada objeto de datos tenga su propia DEK sin aumentar de forma masiva el volumen de claves almacenadas en un servicio de gestión de claves centralizado.
Cloud Key Management Service se diseñó para gestionar KEKs, por lo que el tamaño máximo de entrada de datos para las funciones Encrypt
y Decrypt
es de 64 KiB. Sin embargo, si sabes que los datos no se acercarán a ese límite, puedes usar Cloud KMS para encriptarlos y desencriptarlos directamente.
Cómo cifrar datos mediante el cifrado envolvente
El proceso de cifrado de datos consiste en generar una DEK de forma local, cifrar los datos con la DEK, usar una KEK para envolver la DEK y, a continuación, almacenar los datos cifrados y la DEK envuelta. La KEK nunca sale de Cloud KMS.
Para cifrar datos mediante el cifrado envolvente, sigue estos pasos:
Genera una DEK de forma local. Puedes hacerlo con una biblioteca de código abierto como OpenSSL, especificando un tipo de cifrado y una contraseña a partir de los cuales generar la clave. También puedes especificar un salt y un digest que quieras usar.
Usa esta DEK de forma local para cifrar tus datos.
Por ejemplo, puedes usar OpenSSL como se muestra en el ejemplo de cifrado del mensaje. Como práctica recomendada, usa el cifrado estándar de cifrado avanzado (AES) de 256 bits en modo Galois/Counter (GCM).
Genera una clave en Cloud KMS o usa una clave ya creada, que actuará como KEK. Usa esta clave para cifrar (envolver) la DEK.
Almacena los datos cifrados y la DEK envuelta.
Cómo descifrar datos mediante el cifrado envolvente
El proceso de desencriptación de datos consiste en recuperar los datos encriptados y la DEK encapsulada, identificar la KEK que encapsuló la DEK, usar la KEK para desencapsular la DEK y, a continuación, usar la DEK desencapsulada para desencriptar los datos. La KEK nunca sale de Cloud KMS.
Para descifrar datos mediante el cifrado envolvente, sigue estos pasos:
Obtén los datos cifrados y la DEK encapsulada.
Usa la clave almacenada en Cloud KMS para desencapsular la DEK cifrada.
Usa la DEK de texto sin formato para descifrar los datos cifrados. Si usas OpenSSL como antes, consulta el ejemplo de descifrado del mensaje.
Para ver un ejemplo de código que muestra cómo cifrar y descifrar con el cifrado de envolvente, consulta Cifrado del lado del cliente con Tink y Cloud KMS.
Integración con servicios de Google Cloud
Varios Google Cloud productos están integrados con Cloud KMS para admitir la función de claves de cifrado gestionadas por el cliente (CMEK). Las CMEK con Cloud KMS añaden una capa adicional de protección a tus datos, te permiten controlar tus claves de encriptado y aprovechan las ventajas de gestión de claves de Cloud KMS. Consulta Usar Cloud KMS con otros servicios para ver una lista completa de los productos que admiten CMEK.
Otras opciones para los servicios de Google Cloud
En el caso de los datos almacenados en Google Cloud productos que no admiten CMEK, puedes implementar tu propio cifrado de capa de aplicación. Para ello, debes implementar tu propio cifrado envolvente, tal como se ha descrito anteriormente, de forma que almacenes los datos cifrados localmente en Google Cloud. También puedes usar Cloud KMS para cifrar los datos que almacenes en otros proveedores de servicios en la nube o en instalaciones locales.
Además de admitir CMEK, los siguientes productos admiten la función de clave de cifrado proporcionada por el cliente (CSEK).
Producto | Tema de CSEK |
---|---|
Cloud Storage | Claves de cifrado proporcionadas por el cliente |
Compute Engine | Encriptar discos con claves de cifrado proporcionadas por el cliente |
Con CSEK, proporcionas tu propia clave AES-256 para que actúe como KEK, y tu clave protege las DEKs que protegen tus datos. Tu clave CSEK está protegida por una capa adicional de protección mediante una clave de Cloud KMS.
Ahora que puedes importar claves en Cloud KMS, puedes importar tus claves y usarlas con servicios habilitados para CMEK en lugar de depender de CSEK.