Encriptação do lado do cliente para filas

As bibliotecas de cliente do Armazenamento de Filas do Azure para .NET e Python suportam a encriptação de dados nas aplicações cliente antes de carregar para o Armazenamento do Azure e a desencriptação de dados durante a transferência para o cliente. As bibliotecas de cliente também suportam a integração com o Azure Key Vault para a gestão de chaves da conta de armazenamento.

Importante

O Armazenamento do Azure suporta encriptação do lado do serviço e do lado do cliente. Para a maioria dos cenários, a Microsoft recomenda a utilização de funcionalidades de encriptação do lado do serviço para facilitar a utilização na proteção dos seus dados. Para saber mais sobre a encriptação do lado do serviço, veja Encriptação do Armazenamento do Azure para dados inativos.

Acerca da encriptação do lado do cliente

A biblioteca de cliente do Armazenamento de Filas do Azure utiliza o AES para encriptar os dados dos utilizadores. Existem duas versões de encriptação do lado do cliente disponíveis na biblioteca de cliente:

Aviso

A utilização da versão 1 da encriptação do lado do cliente já não é recomendada devido a uma vulnerabilidade de segurança na implementação do modo CBC da biblioteca de cliente. Para obter mais informações sobre esta vulnerabilidade de segurança, veja Armazenamento do Azure a atualizar a encriptação do lado do cliente no SDK para resolver vulnerabilidades de segurança. Se estiver a utilizar a versão 1, recomendamos que atualize a sua aplicação para utilizar a versão 2 e migrar os seus dados. Veja a secção seguinte, Mitigar a vulnerabilidade de segurança nas suas aplicações, para obter mais orientações.

Mitigar a vulnerabilidade de segurança nas suas aplicações

Devido a uma vulnerabilidade de segurança detetada na implementação do modo CBC pela biblioteca de cliente do Armazenamento de Filas, a Microsoft recomenda que realize imediatamente uma ou mais das seguintes ações:

  • Considere utilizar funcionalidades de encriptação do lado do serviço em vez de encriptação do lado do cliente. Para obter mais informações sobre as funcionalidades de encriptação do lado do serviço, veja Encriptação do Armazenamento do Azure para dados inativos.

  • Se precisar de utilizar a encriptação do lado do cliente, migre as aplicações da encriptação do lado do cliente v1 para a encriptação do lado do cliente v2.

A tabela seguinte resume os passos que terá de seguir se optar por migrar as suas aplicações para a encriptação do lado do cliente v2:

Estado de encriptação do lado do cliente Ações recomendadas
A aplicação está a utilizar a encriptação do lado do cliente numa versão da biblioteca de cliente que suporta apenas encriptação do lado do cliente v1. Atualize a aplicação para utilizar uma versão da biblioteca de cliente que suporte encriptação do lado do cliente v2. Veja Matriz de suporte do SDK para encriptação do lado do cliente para obter uma lista de versões suportadas.

Atualize o código para utilizar a encriptação do lado do cliente v2.
A aplicação está a utilizar a encriptação do lado do cliente com uma versão da biblioteca de cliente que suporta encriptação do lado do cliente v2. Atualize o código para utilizar a encriptação do lado do cliente v2.

Além disso, a Microsoft recomenda que siga os seguintes passos para ajudar a proteger os seus dados:

  • Configure as suas contas de armazenamento para utilizar pontos finais privados para proteger todo o tráfego entre a sua rede virtual (VNet) e a sua conta de armazenamento através de uma ligação privada. Para obter mais informações, veja Utilizar pontos finais privados para o Armazenamento do Azure.
  • Limitar o acesso de rede apenas a redes específicas.

Matriz de suporte do SDK para encriptação do lado do cliente

A tabela seguinte mostra quais as versões das bibliotecas de cliente para .NET e Python que suportam as versões da encriptação do lado do cliente:

.NET Python
Encriptação do lado do cliente v2 e v1 Versões 12.11.0 e posterior Versões 12.4.0 e posterior
Encriptação do lado do cliente apenas v1 Versões 12.10.0 e anterior Versões 12.3.0 e anterior

Se a sua aplicação estiver a utilizar a encriptação do lado do cliente com uma versão anterior da biblioteca de cliente .NET ou Python, primeiro tem de atualizar o código para uma versão que suporte encriptação do lado do cliente v2. Em seguida, tem de desencriptar e voltar a encriptar os seus dados com encriptação do lado do cliente v2. Se necessário, pode utilizar uma versão da biblioteca de cliente que suporte encriptação do lado do cliente v2 lado a lado com uma versão anterior da biblioteca de cliente enquanto está a migrar o código.

Como funciona a encriptação do lado do cliente

As bibliotecas de cliente do Armazenamento de Filas do Azure utilizam a encriptação de envelopes para encriptar e desencriptar os dados do lado do cliente. A encriptação de envelope encripta uma chave com uma ou mais chaves adicionais.

As bibliotecas de cliente do Armazenamento de Filas dependem do Azure Key Vault para proteger as chaves que são utilizadas para a encriptação do lado do cliente. Para obter mais informações sobre o Azure Key Vault, consulte O que é o Azure Key Vault?.

Encriptação e desencriptação através da técnica de envelope

A encriptação através da técnica de envelope funciona da seguinte forma:

  1. A biblioteca de cliente do Armazenamento do Azure gera uma chave de encriptação de conteúdo (CEK), que é uma chave simétrica de utilização única.

  2. Os dados do utilizador são encriptados com o CEK.

  3. Em seguida, o CEK é moldado (encriptado) com a chave de encriptação de chaves (KEK). O KEK é identificado por um identificador de chave e pode ser um par de chaves assimétricas ou uma chave simétrica. Pode gerir o KEK localmente ou armazená-lo num Key Vault do Azure.

    A biblioteca de cliente do Armazenamento do Azure nunca tem acesso ao KEK. A biblioteca invoca o algoritmo de encapsulamento de chaves fornecido pelo Key Vault. Se pretender, os utilizadores podem optar por utilizar fornecedores personalizados para encapsulamento/desembrulhação de chaves.

  4. Em seguida, os dados encriptados são carregados para o Armazenamento de Filas do Azure. A chave encapsulada juntamente com alguns metadados de encriptação adicionais é interpolada com os dados encriptados.

A desencriptação através da técnica de envelope funciona da seguinte forma:

  1. A biblioteca de cliente do Armazenamento do Azure pressupõe que o utilizador está a gerir o KEK localmente ou num Key Vault do Azure. O utilizador não precisa de saber a chave específica que foi utilizada para encriptação. Em vez disso, pode ser configurada e utilizada uma resolução de chaves que resolve diferentes identificadores de chaves.
  2. A biblioteca de cliente transfere os dados encriptados juntamente com qualquer material de encriptação armazenado no Armazenamento do Azure.
  3. Em seguida, o CEK moldado é desembrulhado (desencriptado) com o KEK. A biblioteca de cliente não tem acesso à KEK durante este processo, mas invoca apenas o algoritmo de desembrulhação do Key Vault do Azure ou de outro arquivo de chaves.
  4. A biblioteca de cliente utiliza o CEK para desencriptar os dados de utilizador encriptados.

Encriptação/desencriptação de mensagens

Uma vez que as mensagens de fila podem ter qualquer formato, a biblioteca de cliente define um formato personalizado que inclui o Vetor de Inicialização (IV) e a chave de encriptação de conteúdo encriptado (CEK) no texto da mensagem.

Durante a encriptação, a biblioteca de cliente gera um IV aleatório de 16 bytes juntamente com um CEK aleatório de 32 bytes e executa a encriptação de envelope do texto da mensagem de fila com estas informações. O CEK encapsulado e alguns metadados de encriptação adicionais são adicionados à mensagem de fila encriptada. Esta mensagem modificada (mostrada abaixo) é armazenada no serviço.

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

Durante a desencriptação, a chave encapsulada é extraída da mensagem de fila e desembrulhada. O IV também é extraído da mensagem de fila e utilizado juntamente com a chave desembrulhada para desencriptar os dados da mensagem de fila. Os metadados de encriptação são pequenos (menos de 500 bytes), pelo que, embora conte para o limite de 64 KB para uma mensagem de fila, o impacto deve ser gerível. A mensagem encriptada é codificada com Base64, conforme mostrado no fragmento acima, que também irá expandir o tamanho da mensagem que está a ser enviada.

Devido à natureza de curta duração das mensagens na fila, não deve ser necessário desencriptar e reencriptar mensagens de fila depois de atualizar para a encriptação do lado do cliente v2. Todas as mensagens menos seguras serão rodadas no decorrer do consumo normal de filas.

Encriptação e desempenho do lado do cliente

Tenha em atenção que a encriptação dos dados de armazenamento resulta numa sobrecarga de desempenho adicional. Quando utiliza a encriptação do lado do cliente na sua aplicação, a biblioteca de cliente tem de gerar de forma segura o CEK e o IV, encriptar o conteúdo em si, comunicar com o seu arquivo de chaves escolhido para enveloping de chaves e formatar e carregar metadados adicionais. Esta sobrecarga varia consoante a quantidade de dados que estão a ser encriptados. Recomendamos que os clientes testem sempre as suas aplicações para desempenho durante o desenvolvimento.

Passos seguintes