Cifrado de cliente para colas

Las bibliotecas cliente de Azure Queue Storage para .NET y Python admiten el cifrado de datos dentro de las aplicaciones cliente antes de cargarlos en Azure Storage y el descifrado de datos mientras estos se descargan en el cliente. Las bibliotecas cliente también admite la integración con Azure Key Vault para la administración de las claves de la cuenta de almacenamiento.

Importante

Azure Storage admite tanto el cifrado del lado servicio como del lado cliente. En la mayoría de los escenarios, Microsoft recomienda usar características de cifrado del servicio para facilitar su uso en la protección de los datos. Para aprender más sobre el cifrado del lado servicio, consulte Cifrado de Azure Storage para datos en reposo.

Acerca del cifrado de cliente

La biblioteca cliente de Azure Queue Storage usa AES para cifrar los datos del usuario. Hay dos versiones del cifrado de cliente disponibles en la biblioteca cliente:

Advertencia

El uso de la versión 1 del cifrado de cliente ya no se recomienda debido a una vulnerabilidad de seguridad en la implementación de la biblioteca cliente del modo CBC. Para más información sobre esta vulnerabilidad de seguridad, consulte Actualización de Azure Storage del cifrado del lado cliente en el SDK para abordar la vulnerabilidad de seguridad. Si actualmente usa la versión 1, se recomienda actualizar la aplicación para usar la versión 2 y migrar los datos. A continuación, consulte la sección sobre cómo mitigar la vulnerabilidad de seguridad en las aplicaciones para obtener instrucciones adicionales.

Mitigación de la vulnerabilidad de seguridad en las aplicaciones

Debido a una vulnerabilidad de seguridad detectada en la implementación de la biblioteca cliente de Queue Storage del modo CBC, Microsoft recomienda realizar una o varias de las siguientes acciones inmediatamente:

  • Considere la posibilidad de usar características de cifrado del servicio en lugar del cifrado de cliente. Para más información sobre las características de cifrado del servicio, consulte Cifrado de Azure Storage para datos en reposo.

  • Si necesita usar el cifrado de cliente, migre las aplicaciones de la versión 1 del cifrado de cliente a la versión 2 del cifrado de cliente.

En la tabla siguiente se resumen los pasos que deberá seguir si decide migrar las aplicaciones a la versión 2 del cifrado de cliente:

Estado de cifrado de cliente Acciones recomendadas
La aplicación usa el cifrado de cliente con una versión de la biblioteca cliente que solo admite la versión 1 del cifrado de cliente. Actualice la aplicación para que use una versión de la biblioteca cliente que admita la versión 2 del cifrado de cliente. Consulte la sección sobre la matriz de compatibilidad del SDK para el cifrado de cliente para obtener una lista de las versiones admitidas.

Actualice el código para usar la versión 2 del cifrado de cliente.
La aplicación usa el cifrado de cliente con una versión de la biblioteca cliente que admite la versión 2 del cifrado de cliente. Actualice el código para usar la versión 2 del cifrado de cliente.

Además, Microsoft recomienda seguir los pasos siguientes para ayudar a proteger los datos:

  • Configure las cuentas de almacenamiento para usar puntos de conexión privados con el fin de proteger todo el tráfico entre la red virtual (VNet) y la cuenta de almacenamiento a través de un vínculo privado. Para obtener más información, consulte Uso de puntos de conexión privados para Azure Storage.
  • Limite el acceso a la red solo para redes específicas.

Matriz de compatibilidad del SDK para el cifrado de cliente

En la tabla siguiente se muestran las versiones de las bibliotecas cliente para .NET y Python que admiten las versiones del cifrado del lado cliente:

.NET Python
Versiones 1 y 2 del cifrado de cliente Versiones 12.11.0 y posteriores Versiones 12.4.0 y posteriores
Solo la versión 1 del cifrado de cliente Versiones 12.10.0 y anteriores Versiones 12.3.0 y anteriores

Si la aplicación usa el cifrado del lado cliente con una versión anterior de la biblioteca cliente de .NET o Python, primero debe actualizar el código a una versión que admita el cifrado del lado cliente v2. A continuación, debe descifrar y volver a cifrar los datos con la versión 2 del cifrado de cliente. Si es necesario, puede usar una versión de la biblioteca cliente que admita la versión 2 del cifrado de cliente en paralelo con una versión anterior de la biblioteca cliente mientras migra el código.

Funcionamiento del cifrado de cliente

Las bibliotecas cliente de Azure Queue Storage usan el cifrado de sobres para cifrar y descifrar los datos en el lado cliente. El cifrado de sobres cifra una clave con una o varias claves adicionales.

Las bibliotecas cliente de Queue Storage se basan en Azure Key Vault para proteger las claves que se usan para el cifrado del lado cliente. Para más información sobre Azure Key Vault, vea ¿Qué es Azure Key Vault?.

Cifrado y descifrado a través de la técnica de sobres

El cifrado funciona de la siguiente manera a través de la técnica de sobres:

  1. La biblioteca cliente de Azure Storage genera una clave de cifrado de contenido (CEK), que es una clave simétrica de un solo uso.

  2. Los datos de usuario se cifran mediante la CEK.

  3. Se encapsula la CEK (cifrada) con la clave de cifrado de clave (KEK). La KEK se identifica mediante un identificador de clave y puede ser un par de clave asimétrico o una clave simétrica. Puede administrar la KEK de forma local o almacenarla en una instancia de Azure Key Vault.

    La propia biblioteca cliente de Azure Storage no tiene nunca acceso a la KEK. La biblioteca invoca el algoritmo de encapsulado de clave proporcionado por Key Vault. Los usuarios pueden elegir utilizar proveedores personalizados para el ajuste y desajuste clave si lo desean.

  4. A continuación, se cargan los datos cifrados en Azure Queue Storage. La clave encapsulada junto con algunos metadatos de cifrado adicionales se interpola con los datos cifrados.

El descifrado funciona de la siguiente manera a través de la técnica de sobres:

  1. La biblioteca cliente de Azure Storage asume que el usuario está administrando la KEK, ya sea localmente o en una instancia de Azure Key Vault. El usuario no necesita conocer la clave específica que se usó para el cifrado. En su lugar, se puede configurar y usar una resolución de clave que resuelva distintos identificadores de clave para las claves.
  2. La biblioteca cliente descarga los datos cifrados junto con cualquier material de cifrado que esté almacenado en Azure Storage.
  3. A continuación, la CEK encapsulada se desencapsula (descifra) mediante la KEK. La biblioteca cliente no tiene acceso a la KEK durante este proceso, sino que solo invoca el algoritmo de desencapsulado de Azure Key Vault u otro almacén de claves.
  4. La biblioteca cliente usa la CEK para descifrar los datos de usuario cifrados.

Cifrado y descifrado de mensajes

Dado que la cola de mensajes puede tener cualquier formato, la biblioteca de cliente define un formato personalizado que incluye el vector de inicialización (IV) y la clave de cifrado de contenido (CEK) cifrada en el texto del mensaje.

Durante el cifrado, la biblioteca de cliente genera un vector de inicialización aleatorio de 16 bytes junto con una CEK aleatoria de 32 bytes y realiza el cifrado de sobres del texto del mensaje de cola con esta información. La CEK encapsulada y algunos metadatos de cifrado adicionales se incluyen entonces en el mensaje de cola cifrado. Este mensaje modificado (que se muestra a continuación) se almacena en el servicio.

<MessageText>{"EncryptedMessageContents":"6kOu8Rq1C3+M1QO4alKLmWthWXSmHV3mEfxBAgP9QGTU++MKn2uPq3t2UjF1DO6w","EncryptionData":{…}}</MessageText>

Durante el descifrado, la clave encapsulada se extrae del mensaje de cola y se desencapsula. El vector de inicialización también se extrae del mensaje de cola y se utiliza junto con la clave desencapsulada para descifrar los datos de mensaje de cola. Los metadatos de cifrado son pequeños (menos de 500 bytes), por lo que, aunque se tienen en cuenta para el límite de 64 KB de un mensaje de la cola, el impacto debería ser fácil de administrar. El mensaje cifrado está codificado en Base64, como se muestra en el fragmento de código anterior, lo que también expandirá el tamaño del mensaje que se envía.

Debido a la naturaleza de corta duración de los mensajes de la cola, no es necesario descifrar y volver a cifrar los mensajes de cola después de actualizar al cifrado del lado cliente v2. Cualquier mensaje menos seguro se rotará durante el consumo normal de la cola.

Rendimiento y cifrado de cliente

Tenga en cuenta que el cifrado de sus resultados de datos de almacenamiento da lugar a la sobrecarga de rendimiento adicional. Cuando se usa el cifrado de cliente en la aplicación, la biblioteca cliente debe generar de forma segura la CEK y el vector de inicialización, cifrar el propio contenido, comunicarse con el almacén de claves elegido para el encapsulado de claves y dar formato y cargar metadatos adicionales. Esta sobrecarga varía según la cantidad de datos que se cifran. Se recomienda que los clientes prueben siempre sus aplicaciones para obtener un rendimiento durante el desarrollo.

Pasos siguientes