Claves de encriptado proporcionadas por el cliente

Configuración

En esta página se explica cómo funcionan las claves de cifrado proporcionadas por el cliente. Para ver otras opciones de cifrado, consulta Opciones de cifrado de datos.

Información general

Además del cifrado estándar de Cloud Storage, puedes proporcionar tu propia clave de cifrado AES-256, codificada en Base64 estándar. Esta clave se conoce como clave de cifrado proporcionada por el cliente. Si proporcionas una clave de cifrado proporcionada por el cliente, Cloud Storage no almacenará tu clave de forma permanente en sus servidores ni la gestionará de ninguna otra forma.

En su lugar, proporciona tu clave para cada operación de Cloud Storage y tu clave se elimina de los servidores de Cloud Storage una vez que se completa la operación. Cloud Storage solo almacena un hash criptográfico de la clave para que las solicitudes futuras se puedan validar con el hash. Tu clave no se puede recuperar a partir de este hash, y el hash no se puede usar para descifrar tus datos.

Te recomendamos que hagas una copia de seguridad de cada llave en una ubicación segura y que tomes precauciones para asegurarte de que no se compartan con terceros que no sean de confianza. Si se ve comprometido algún archivo o máquina que contenga tu clave de cifrado, debes rotar la clave inmediatamente en todos los objetos cifrados con la clave comprometida.

¿Cuándo se usa la clave?

Cuando aplicas una clave de cifrado proporcionada por el cliente a un objeto, Cloud Storage usa la clave para cifrar:

  • Los datos del objeto.
  • Suma de verificación CRC32C del objeto.
  • El hash MD5 del objeto.

El cifrado estándar de Cloud Storage se usa para cifrar los metadatos restantes del objeto, incluido su nombre. Esto te permite leer y actualizar metadatos generales, así como enumerar, sobrescribir y eliminar objetos, sin necesidad de la clave de cifrado proporcionada por el cliente. Sin embargo, para llevar a cabo cualquiera de estas acciones, debes tener permisos suficientes.

Por ejemplo, si un objeto está cifrado con una clave de cifrado proporcionada por el cliente, la clave 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 comprobación CRC32C ni el hash MD5 del objeto. Si proporcionas tu clave con la solicitud de los metadatos del objeto, la suma de comprobación CRC32C y el hash MD5 del objeto se incluirán en los metadatos.

Comportamiento de reescritura

Si reescribes un objeto cifrado con una clave de cifrado proporcionada por el cliente sin proporcionar una clave para cifrar el objeto reescrito, ocurre lo siguiente:

Comprobación de HTTPS

Si quieres proteger tus datos mientras se transfieren por Internet durante las operaciones de lectura y escritura, usa Seguridad en la capa de transporte, comúnmente conocida como TLS o HTTPS. TLS es obligatorio cuando proporcionas una clave de cifrado. Si usas accidentalmente tu clave de cifrado a través de una conexión no cifrada (HTTP), es posible que un atacante intercepte tu clave. Por este motivo, la API Cloud Storage devuelve un mensaje de error para advertirte de que tu clave puede estar en peligro. Si esto ocurre, debes rotar tus claves inmediatamente.

Restricciones

Se aplican las siguientes restricciones al usar claves de cifrado proporcionadas por el cliente:

  • No puedes usar la consola para descargar objetos cifrados con una clave de cifrado proporcionada por el cliente. Google Cloud Del mismo modo, cuando usas la consola deGoogle Cloud para subir un objeto, no puedes cifrarlo con una clave de cifrado proporcionada por el cliente.

  • Storage Transfer Service y Cloud Dataflow no admiten objetos encriptados con claves de encriptado proporcionadas por el cliente.

  • Solo puedes definir claves de cifrado proporcionadas por el cliente en objetos concretos. No puedes definir una clave de cifrado proporcionada por el cliente predeterminada para un contenedor.

  • Si realizas una operación compose en objetos encriptados con claves de encriptado proporcionadas por el cliente, los objetos de componente deben encriptarse con la misma clave y debes proporcionar la clave con la solicitud de composición. El objeto compuesto resultante se cifra con la misma clave.

  • Cuando se sirve un objeto encriptado con una clave de encriptado proporcionada por el cliente, Cloud Storage ignora los metadatos Cache-Control asociados al objeto y lo sirve con Cache-Control definido como private, max-age=0.

Claves de cifrado con APIs REST

Cuando usas una clave de cifrado proporcionada por el cliente y trabajas directamente con la API JSON o XML, debes proporcionar tanto la clave AES-256 como un hash SHA256 de la clave. Debes almacenar de forma segura tanto la clave AES-256 como el hash SHA256 de la clave. Cloud Storage almacena el hash SHA256 de tu clave en los metadatos del objeto, donde puedes recuperarlo más adelante. Cloud Storage (ni nadie más) puede usar este hash SHA256 para descifrar tus datos. Se almacena como una forma de identificar de forma única la clave AES-256 que se ha usado para cifrar un objeto concreto.

Encabezados de solicitud

Incluya los siguientes encabezados HTTP en su solicitud JSON o XML:

Nombre del encabezado Valor Descripción
x-goog-encryption-algorithm cadena Algoritmo de cifrado que se va a usar. Debes usar el valor AES256.
x-goog-encryption-key cadena Una cadena codificada en Base64 RFC 4648 de tu clave de cifrado AES-256.
x-goog-encryption-key-sha256 cadena Una cadena codificada en Base64 RFC 4648 del hash SHA256 de tu clave de cifrado.

Si realizas una operación de reescritura con la API JSON, los encabezados indicados arriba se usan para cifrar el objeto de destino y los siguientes encabezados se usan para descifrar el objeto de origen:

Nombre del encabezado Valor Descripción
x-goog-copy-source-encryption-algorithm cadena Algoritmo de cifrado que se va a usar. Debes usar el valor AES256.
x-goog-copy-source-encryption-key cadena Cadena codificada en Base64 RFC 4648 de la clave de cifrado AES-256 del objeto de origen.
x-goog-copy-source-encryption-key-sha256 cadena Cadena codificada en Base64 RFC 4648 del hash SHA256 de la clave de cifrado del objeto de origen.

Respuesta

JSON

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

Nombre de la propiedad Valor Descripción
customerEncryption objeto Información sobre el cifrado usado en la solicitud.
customerEncryption.encryptionAlgorithm cadena El algoritmo de cifrado que se ha usado. Siempre contiene el valor AES256.
customerEncryption.keySha256 cadena Una cadena codificada en Base64 RFC 4648 del hash SHA256 de tu clave de cifrado. Puedes usar este hash SHA256 para identificar de forma única la clave de cifrado AES-256 necesaria para descifrar el objeto, que debes almacenar de forma segura.

XML

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

Nombre del encabezado Valor Descripción
x-goog-encryption-algorithm cadena El algoritmo de cifrado que se ha usado. Siempre contiene el valor AES256.
x-goog-encryption-key-sha256 cadena Una cadena codificada en Base64 RFC 4648 del hash SHA256 de tu clave de cifrado. Puedes usar este hash SHA256 para identificar de forma única la clave de cifrado AES-256 necesaria para descifrar el objeto, que debes almacenar de forma segura.

Recibes un error HTTP 400 en los siguientes casos:

  • Subes un objeto con una clave de cifrado proporcionada por el cliente e intentas realizar otra operación en el objeto (que no sea solicitar o actualizar la mayoría de los metadatos o eliminar el objeto) sin proporcionar la clave.
  • Subes un objeto con una clave de cifrado proporcionada por el cliente e intentas realizar otra operación en el objeto con una clave incorrecta.
  • Subes un objeto sin proporcionar una clave de cifrado proporcionada por el cliente e intentas realizar otra operación en el objeto con una clave de cifrado proporcionada por el cliente.
  • Especifica un algoritmo de cifrado, una clave o un hash SHA256 que no es válido.

Claves de cifrado con gcloud storage

La CLI de Google Cloud admite el uso de claves de encriptado proporcionadas por el cliente. Cuando uses la CLI de gcloud con claves de encriptado proporcionadas por el cliente, ten en cuenta lo siguiente:

  • La clave especificada como clave de cifrado se usa en los comandos como clave de cifrado y, cuando es necesario, como clave de descifrado.

  • También puede especificar hasta 100 claves de descifrado, que solo se utilizan para descifrar objetos.

  • Al descifrar, se calcula el hash SHA256 de las claves de cifrado y descifrado proporcionadas, y se selecciona la clave correcta que se debe usar para un objeto concreto comparando el hash SHA256 con los metadatos del objeto.

  • Cuando se añade o se rota una clave de cifrado proporcionada por el cliente para un objeto, el objeto se vuelve a escribir como parte de la solicitud. Esto es así incluso en el caso del comando gcloud storage objects update.

  • Los comandos de lista que pueden devolver el hash MD5 o CRC32C de los objetos cifrados con una clave proporcionada por el cliente realizan una solicitud de metadatos GET adicional para cada objeto. Estas solicitudes adicionales pueden hacer que la lista sea considerablemente más lenta que la de los objetos encriptados con el cifrado estándar de Cloud Storage.

  • En situaciones en las que la clave de cifrado puede cambiar o cambia durante una operación de escritura o copia completada parcialmente (por ejemplo, cuando vuelves a ejecutar una cpcarga después de forzar el cierre o de que se agote el tiempo de espera de la red), la operación se reinicia para asegurarse de que el objeto de destino se escribe con la nueva clave.

Rotación de claves de cifrado

Si un objeto está cifrado con una clave de cifrado proporcionada por el cliente, puedes rotar la clave del objeto reescribiendo el objeto. Las reescrituras se admiten a través de la API JSON, pero no de la API XML. Consulta Rotar una clave de cifrado para ver ejemplos de rotación de claves.

Siguientes pasos