Claves de encriptación proporcionadas por el cliente

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. Si deseas encontrar ejemplos en los que se usa esta característica, consulta Usar claves de encriptación proporcionadas por el cliente.

Descripción general

Como una capa adicional sobre las claves de encriptación administradas por Google, puedes optar por proporcionar tu propia clave AES-256, codificada en Base64 estándar. 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 de Google. En su lugar, debes proporcionar tu clave para cada operación de Cloud Storage y esta se eliminará de los servidores de Google 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.

¿Cuándo se usa la clave?

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

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

Cloud Storage usa claves del servidor estándar para encriptar los metadatos restantes del objeto, incluido el nombre. Esto te permite leer y actualizar metadatos generales, además de enumerar 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 con la solicitud de los metadatos del objeto, la suma de verificación CRC32C y el hash MD5 de este se incluyen en los metadatos.

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 sobre 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:

  • El Servicio de transferencia de almacenamiento de Cloud, Cloud Dataflow y Cloud Dataproc por el momento no son compatibles con los objetos encriptados con claves de encriptación proporcionadas por el cliente.

  • No puedes usar Google Cloud Platform Console para descargar objetos encriptados con una clave de encriptación proporcionada por el cliente. De forma similar, cuando usas Google Cloud Platform Console para subir un objeto, no puedes usar una clave de encriptación proporcionada por el cliente. Puedes realizar estas acciones con claves de encriptación administradas por el cliente.

  • Para usar las claves de encriptación proporcionadas por el cliente con gsutil, debes tener gsutil 4.18 o posterior.

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

  • 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.

Herramientas para usar las claves de encriptación

Hay varias formas en las que puedes usar las claves de encriptación proporcionadas por el cliente con Cloud Storage. Las siguientes son algunas de ellas:

  • Empresas asociadas
  • Las API de REST de JSON y de XML
  • La herramienta de línea de comandos de gsutil

Claves de encriptación con empresas asociadas

Hay varias opciones de socios externos para usar las claves de encriptación proporcionadas por el cliente. Estos socios facilitan la generación de una clave de encriptación y la asociación de esa clave con un objeto en Cloud Storage. Los socios que pueden suministrar claves para Cloud Storage incluyen Ionic Security y KeyNexus.

Para obtener más información, consulta la página de socios de Cloud Storage.

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. Google almacena el hash SHA256 de tu clave en los metadatos del objeto, desde donde puedes recuperarlo más tarde. Ni Google ni nadie puede usar este hash SHA256 para desencriptar tus datos. Se almacena como una forma de identificar de manera exclusiva la clave AES-256 que se usó para encriptar un objeto en particular.

Solicita encabezados

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 antes 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 gsutil

Para usar una clave de encriptación proporcionada por el cliente con gsutil, agrega la siguiente opción a la sección [GSUtil] de tu archivo de configuración boto:

Nombre de la opción Valor Descripción
encryption_key string Una string codificada en Base64 RFC 4648 de tu clave de encriptación AES-256.

De manera opcional, puedes especificar una o más claves de desencriptación. Aunque gsutil usa la opción encryption_key como clave de encriptación y desencriptación, las opciones decryption_key que especifiques solo se usan para desencriptar objetos. Para obtener más detalles, consulta la documentación de gsutil.

Siempre que tengas claves de encriptación o desencriptación en tu archivo de configuración boto, estas se usarán para todos los comandos de gsutil. Al momento de la desencriptación, gsutil calcula el hash SHA256 de las claves de encriptación y desencriptación proporcionadas y selecciona la clave correcta para usar de un objeto en particular mediante la búsqueda de coincidencias del hash SHA256 en los metadatos del objeto.

Recibirás un error si subes un objeto con una clave de encriptación proporcionada por el cliente y luego intentas realizar otra operación en el objeto (aparte de solicitar o actualizar metadatos o borrar el objeto) sin proporcionar la clave.

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 reescrituras son compatibles con la API de JSON, pero no de la API de XML. Consulta el cambio de una clave de encriptación para ver ejemplos de cambio de claves.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.