Claves de encriptación proporcionadas por el cliente

Configuración

En esta página, se analizan las claves de encriptación proporcionadas por el cliente. Para conocer otras opciones de encriptación, consulta Opciones de encriptación de datos.

Descripción general

Puedes optar por proporcionar tu propia clave de encriptación AES-256, codificada en Base64 estándar, como una capa adicional sobre la encriptación estándar de Cloud Storage. Esta clave se conoce como clave de encriptación proporcionada por el cliente. Si brindas una clave de encriptación proporcionada por el cliente, Cloud Storage no almacenará ni administrará tu clave de forma permanente en los servidores.

En su lugar, debes proporcionar tu clave para cada operación de Cloud Storage y esta se borrará definitivamente de los servidores de Cloud Storage una vez que se complete la operación. Cloud Storage almacena solo un hash criptográfico de la clave para que las solicitudes futuras puedan validarse en función del hash. Tu clave no se puede recuperar del hash y este no se puede usar para desencriptar tus datos.

Te recomendamos crear una copia de seguridad de cada clave en una ubicación segura y tomar precauciones para asegurarte de que las claves no se compartan con terceros que no sean de confianza. Si algún archivo o máquina que contiene la clave de encriptación está comprometido, debes realizar la rotación de la clave de inmediato para todos los objetos encriptados con la clave comprometida.

¿Cuándo se usa la clave?

Cuando aplicas una clave de encriptación proporcionada por el cliente a un objeto, esta se usa para la encriptación en Cloud Storage de lo siguiente:

  • Los datos del objeto
  • La suma de verificación CRC32C del objeto
  • El hash MD5 del objeto

Cloud Storage usa la encriptación en reposo predeterminada para encriptar los metadatos restantes del objeto, incluido el nombre del objeto. Esto te permite leer y actualizar metadatos generales, además de enumerar, sobrescribir y borrar objetos, sin necesidad de la clave de encriptación proporcionada por el cliente. Sin embargo, para realizar cualquiera de estas acciones, debes tener suficientes permisos.

Por ejemplo, si un objeto se encripta con una clave de encriptación proporcionada por el cliente, esta debe usarse para realizar operaciones en el objeto, como descargarlo o moverlo. Si intentas leer los metadatos del objeto sin proporcionar la clave, recibirás metadatos como el nombre del objeto y Content-Type, pero no la suma de verificación CRC32C o el hash MD5. Si proporcionas tu clave cuando solicitas los metadatos del objeto, la suma de verificación CRC32C y el hash MD5 de este se incluyen en los metadatos.

Comportamiento de reescritura

Si reescribes un objeto encriptado con una clave de encriptación proporcionada por el cliente sin dar una clave para encriptar el objeto reescrito, sucede lo siguiente:

Verificación HTTPS

Para proteger tus datos a medida que viajan por Internet durante las operaciones de lectura y escritura, usa la seguridad de la capa de transporte, más conocida como TLS o HTTPS. Se requiere TLS cuando proporcionas una clave de encriptación. Si usas tu clave de encriptación por accidente en una conexión no encriptada (HTTP), es posible que un atacante la intercepte. Debido a esta posibilidad, la API de Cloud Storage muestra un mensaje de error que te advierte que tu clave puede estar comprometida. Si esto ocurre, debes cambiar tus claves de inmediato.

Restricciones

Las siguientes restricciones se aplican cuando se usan claves de encriptación proporcionadas por el cliente:

  • No puedes usar la consola de Google Cloud para descargar objetos encriptados con una clave de encriptación proporcionada por el cliente. Del mismo modo, cuando usas la consola de Google Cloud para subir un objeto, no puedes usar una clave de encriptación proporcionada por el cliente.

  • El Servicio de transferencia de almacenamiento de Cloud y Cloud Dataflow no admiten objetos encriptados con claves de encriptación proporcionadas por el cliente.

  • Solo puedes establecer claves de encriptación proporcionadas por el cliente en objetos individuales. No puedes configurar una clave de encriptación proporcionada por el cliente como predeterminada para un bucket.

  • Si realizas una operación compose en objetos encriptados mediante claves de encriptación proporcionadas por el cliente, los objetos componentes deben usar la misma clave, la cual debes proporcionar con la solicitud de redacción. El objeto compuesto resultante se encripta con la misma clave.

  • Cuando se entrega un objeto encriptado mediante una clave de encriptación proporcionada por el cliente, en Cloud Storage se ignoranlos metadatos Cache-Control asociados con el objeto y se entrega el objeto con Cache-Control configurado como private, max-age=0.

Claves de encriptación con API de REST

Cuando usas una clave de encriptación proporcionada por el cliente y trabajas de forma directa con la API de JSON o de XML, debes proporcionar la clave AES-256 y un hash SHA256 de la clave. Debes almacenar de forma segura la clave AES-256 y el hash SHA256 de la clave. Cloud Storage almacena el hash SHA256 de tu clave en los metadatos del objeto, desde donde puedes recuperarlo más tarde. Ni Cloud Storage ni nadie puede usar este hash SHA256 para desencriptar tus datos. Se almacena como una forma de identificar de manera inequívoca la clave AES-256 que se usó para encriptar un objeto en particular.

Encabezados de la solicitud

Incluye los siguientes encabezados HTTP en tu solicitud JSON o XML:

Nombre del encabezado Valor Descripción
x-goog-encryption-algorithm string El algoritmo de encriptación que se usará. Debes usar el valor AES256.
x-goog-encryption-key string Una string codificada en Base64 RFC 4648 de tu clave de encriptación AES-256.
x-goog-encryption-key-sha256 string Una string codificada en Base64 RFC 4648 del hash SHA256 de tu clave de encriptación.

Si realizas una operación de reescritura con la API de JSON, los encabezados enumerados arriba se usan para encriptar el objeto de destino y los siguientes encabezados se usan a fin de desencriptar el objeto de origen:

Nombre del encabezado Valor Descripción
x-goog-copy-source-encryption-algorithm string El algoritmo de encriptación que se usará. Debes usar el valor AES256.
x-goog-copy-source-encryption-key string Una string codificada en Base64 RFC 4648 de la clave de encriptación del objeto de origen AES-256.
x-goog-copy-source-encryption-key-sha256 string Una string codificada en Base64 RFC 4648 del hash SHA256 de la clave de encriptación del objeto de origen.

Respuesta

JSON

Cuando se usa la API de JSON, los metadatos de una clave de encriptación proporcionada por el cliente se muestran en el cuerpo de la respuesta, que incluye las siguientes propiedades:

Nombre de la propiedad Valor Descripción
customerEncryption objeto Información sobre la encriptación que se usó para la solicitud.
customerEncryption.encryptionAlgorithm string El algoritmo de encriptación que se usó. Siempre contiene el valor AES256.
customerEncryption.keySha256 string Una string codificada en Base64 RFC 4648 del hash SHA256 de tu clave de encriptación. Puedes usar este hash SHA256 para identificar de forma exclusiva la clave de encriptación AES-256 necesaria a fin de desencriptar el objeto, que debes almacenar de forma segura.

XML

Cuando se usa la API de XML, la respuesta incluye los siguientes encabezados:

Nombre del encabezado Valor Descripción
x-goog-encryption-algorithm string El algoritmo de encriptación que se usó. Siempre contiene el valor AES256.
x-goog-encryption-key-sha256 string Una string codificada en Base64 RFC 4648 del hash SHA256 de tu clave de encriptación. Puedes usar este hash SHA256 para identificar de forma exclusiva la clave de encriptación AES-256 necesaria a fin de desencriptar el objeto, que debes almacenar de forma segura.

Recibes un error HTTP 400 en los siguientes casos:

  • Subes un objeto mediante una clave de encriptación proporcionada por el cliente y tratas de realizar otra operación en el objeto (aparte de solicitar o actualizar la mayoría de los metadatos o borrar el objeto) sin proporcionar la clave.
  • Subes un objeto mediante una clave de encriptación proporcionada por el cliente y tratas de realizar otra operación en el objeto con una clave incorrecta.
  • Subes un objeto sin proporcionar una clave de encriptación proporcionada por el cliente y tratas de realizar otra operación en el objeto con una clave de encriptación proporcionada por el cliente.
  • Especificas un algoritmo de encriptación, una clave o un hash SHA256 que no es válido.

Claves de encriptación con gcloud storage

Google Cloud CLI admite el uso de claves de encriptación proporcionadas por el cliente. Cuando uses gcloud CLI con Claves de encriptación proporcionadas por el cliente, ten en cuenta lo siguiente:

  • La clave especificada como la clave de encriptación se usa en comandos como clave de encriptación y, cuando es necesario, como clave de desencriptación.

  • De manera opcional, puedes especificar hasta 100 claves de desencriptación, que solo se usan para desencriptar objetos.

  • Durante la desencriptación, se calcula el hash SHA256 de cualquier clave de encriptación y desencriptación proporcionada, y se selecciona la clave correcta para usar de un objeto en particular a través de la búsqueda de coincidencias del hash SHA256 en los metadatos del objeto.

  • Cuando se agrega o rota una Clave de encriptación proporcionada por el cliente para un objeto existente, el objeto se reescribe como parte de la solicitud. Esto es así incluso en el comando gcloud storage objects update.

  • Los comandos de enumeración que pueden mostrar el hash MD5 o CRC32C para los objetos encriptados con una clave proporcionada por el cliente realizan una solicitud GET de metadatos adicional para cada objeto. Estas solicitudes adicionales pueden hacer que la enumeración sea mucho más lenta que enumerar los objetos encriptados con la encriptación estándar de Cloud Storage.

  • En situaciones en las que la clave de encriptación puede o cambia durante una operación de escritura o copia completada de forma parcial, como cuando vuelves a ejecutar una carga de cp después de forzar la salida o encontrar un tiempo de espera de red, la operación se reinicia para garantizar que el objeto de destino se escriba con la clave nueva.

Cambio de clave de encriptación

Si un objeto se encripta con una clave de encriptación proporcionada por el cliente, puedes cambiar la clave de este mediante la reescritura del objeto. Las operaciones de reescritura son compatibles con la API de JSON, pero no con la API de XML. Consulta Rotar tu clave de encriptación para ver ejemplos de cambio de claves.

Próximos pasos