Criptografia do lado do cliente para filas
As bibliotecas de cliente do Armazenamento de Filas do Azure para .Net e Python dão suporte à criptografia de dados em aplicativos cliente antes do upload no Armazenamento do Azure e à descriptografia de dados durante o download para o cliente. As bibliotecas de cliente também dão suporte à integração com o Azure Key Vault para o gerenciamento de chaves de contas de armazenamento.
Importante
O Armazenamento de Filas dá suporte à criptografia do lado do serviço e do lado do cliente. Para a maioria dos cenários, a Microsoft recomenda o uso de recursos de criptografia do lado do serviço para facilitar o uso na proteção de dados. Para saber mais sobre a criptografia do lado do serviço, confira Criptografia do Armazenamento do Azure para dados inativos.
Sobre a criptografia do lado do cliente
A biblioteca de clientes do Armazenamento de Filas do Azure usa o AES para criptografar dados do usuário. Duas versões da criptografia do lado do cliente estão disponíveis na biblioteca de clientes:
- A versão 2 usa o GCM (Modo de Galois/Contador) com o AES.
- A versão 1 usa o modo CBC (Encadeamento de Blocos de Criptografia) com o AES.
Aviso
O uso da versão 1 da criptografia do lado do cliente não é mais recomendado devido a uma vulnerabilidade de segurança na implementação do modo CBC da biblioteca de clientes. Para saber mais sobre essa vulnerabilidade de segurança, confira Armazenamento do Azure atualiza a criptografia do lado do cliente no SDK para resolver a vulnerabilidade de segurança. Se você está usando a versão 1, recomendamos atualizar o aplicativo para usar a versão 2 e migrar os dados. Consulte a seção a seguir, Atenuar a vulnerabilidade de segurança em seus aplicativos, para obter mais diretrizes.
Atenuar a vulnerabilidade de segurança em seus aplicativos
Devido a uma vulnerabilidade de segurança descoberta na implementação da biblioteca de clientes do Armazenamento de Filas no modo CBC, a Microsoft recomenda que você execute uma ou mais das seguintes ações imediatamente:
Considere usar recursos de criptografia do lado do serviço em vez da criptografia do lado do cliente. Para saber mais sobre os recursos de criptografia do lado do cliente, confira Criptografia do Armazenamento do Azure para dados inativos.
Se você precisar usar a criptografia do lado do cliente, migre seus aplicativos da criptografia do lado do cliente v1 para a criptografia do lado do cliente v2.
A seguinte tabela resume as etapas que você precisará executar se optar por migrar seus aplicativos para a criptografia do lado do cliente v2:
Status da criptografia do lado do cliente | Ações recomendadas |
---|---|
O aplicativo está usando a criptografia do lado do cliente com uma versão da biblioteca de clientes que dá suporte apenas à criptografia do lado do cliente v1. | Atualize o aplicativo para usar uma versão da biblioteca de clientes com suporte para a criptografia do lado do cliente v2. Confira a matriz de suporte do SDK para criptografia do lado do cliente para ver uma lista de versões com suporte. Atualize seu código para usar a criptografia do lado do cliente v2. |
O aplicativo está usando a criptografia do lado do cliente com uma versão da biblioteca de clientes com suporte para a criptografia do lado do cliente v2. | Atualize seu código para usar a criptografia do lado do cliente v2. |
Além disso, a Microsoft recomenda que você execute as seguintes etapas para ajudar a proteger seus dados:
- Configure suas contas de armazenamento para usar pontos de extremidade privados para proteger todo o tráfego entre sua VNet (rede virtual) e sua conta de armazenamento por meio de um link privado. Para mais informações, confira Usar pontos de extremidade privados para o Armazenamento do Microsoft Azure.
- Limite o acesso à rede somente para redes específicas.
Matriz de suporte do SDK para criptografia do lado do cliente
A seguinte tabela mostra quais versões das bibliotecas de clientes para .NET e Python dão suporte a quais versões da criptografia do lado do cliente:
.NET | Python | |
---|---|---|
Criptografia do lado do cliente v2 e v1 | Versões 12.11.0 e posteriores | Versões 12.4.0 e posteriores |
Criptografia do lado do cliente v1 apenas | Versões 12.10.0 e anteriores | Versões 12.3.0 e anteriores |
Se o aplicativo estiver usando a criptografia do lado do cliente com uma versão anterior da biblioteca de clientes .NET ou Python, primeiro você precisará atualizar o código para uma versão com suporte para a criptografia do lado do cliente v2. Em seguida, você precisará descriptografar e criptografar novamente os dados com a criptografia do lado do cliente v2. Se necessário, você poderá usar uma versão da biblioteca de clientes com suporte para a criptografia do lado do cliente v2 lado a lado com uma versão anterior da biblioteca de clientes enquanto estiver migrando seu código.
Como a criptografia do lado do cliente funciona
As bibliotecas de clientes do Armazenamento de Filas do Azure usam a criptografia de envelope para criptografar e descriptografar dados no lado do cliente. A criptografia de envelope criptografa uma chave com uma ou mais chaves adicionais.
As bibliotecas de clientes do Armazenamento de Filas usam o Azure Key Vault para proteção das chaves usadas para criptografia do lado do cliente. Para obter mais informações sobre o Azure Key Vault, confira O que é o Azure Key Vault?.
Criptografia e descriptografia com a técnica de envelope
A criptografia com a técnica de envelope funciona da seguinte maneira:
A biblioteca de clientes do Armazenamento do Azure gera uma CEK (chave de criptografia de conteúdo) que é uma chave simétrica de uso único.
Os dados do usuário são criptografados usando a CEK.
O CEK é empacotada (criptografada) usando o KEK (Chave de Criptografia de Chave). A KEK é identificada por um identificador de chave e pode ser um par de chaves assimétricas ou uma chave simétrica. Você pode gerenciar a KEK localmente ou armazená-la no Azure Key Vault.
A biblioteca de clientes do Armazenamento do Azure em si nunca tem acesso à KEK. Ela simplesmente invoca o algoritmo de disposição de chave fornecido pelo Cofre da Chave. Os usuários podem escolher usar provedores personalizados para desempacotamento/quebra da chave, se desejado.
Em seguida, os dados criptografados são carregados no Armazenamento de Filas do Azure. A chave encapsulada, junto com alguns metadados de criptografia adicionais, é interpolada com os metadados criptografados.
A descriptografia com a técnica de envelope funciona da seguinte maneira:
- A biblioteca de clientes do Armazenamento do Azure presume que o usuário esteja gerenciando a KEK localmente ou em um Azure Key Vault. O usuário não precisa conhecer a chave específica que foi usada para criptografia. Em vez disso, um resolvedor de chave que resolve diferentes identificadores de chaves pode ser configurado e usado.
- A biblioteca de clientes baixa os dados criptografados junto com demais materiais de criptografia que são armazenados no Armazenamento do Azure.
- A CEK encapsulada é desencapsulada (descriptografada) usando a KEK. A biblioteca de clientes não tem acesso à KEK durante esse processo, mas invoca apenas o algoritmo de desencapsulamento do Azure Key Vault ou outro repositório de chaves.
- A biblioteca de clientes usa a CEK para descriptografar os dados de usuário criptografados.
Criptografia/descriptografia de mensagens
Uma vez que a fila de mensagens pode ser de qualquer formato, a biblioteca de cliente define um formato personalizado que inclui o vetor de inicialização (IV) e a chave de criptografia do conteúdo criptografado (CEK) no texto da mensagem.
Durante a criptografia, a biblioteca de cliente gera um IV aleatório de 16 bytes com um CEK aleatória de 32 bytes e executa criptografia de envelope do texto da mensagem de fila usando essas informações. O CEK encapsulado e alguns metadados adicionais de criptografia são adicionados à mensagem da fila criptografada. Essa mensagem modificada fica armazenada no serviço.
<MessageText>{"EncryptedMessageContents":"6kOu8Rq1C3+M1QO4alKLmWthWXSmHV3mEfxBAgP9QGTU++MKn2uPq3t2UjF1DO6w","EncryptionData":{…}}</MessageText>
Durante a descriptografia, a chave encapsulada é extraída da mensagem da fila e envolta. O IV também é extraído da mensagem da fila e usado juntamente com a chave desencapsulada para descriptografar os dados de mensagem da fila. Os metadados de criptografia são pequenos (abaixo de 500 bytes), por isso embora contem para o limite de 64 KB de uma mensagem da fila, esse impacto é administrável. A mensagem criptografada é codificada em Base64, conforme mostrado no trecho acima, o que também expande o tamanho da mensagem que está sendo enviada.
Devido à natureza de curta duração das mensagens na fila, não deve ser necessário descriptografar e criptografar novamente as mensagens da fila depois de atualizar para a criptografia do lado do cliente v2. As mensagens menos seguras são rotacionadas no curso do consumo normal da fila.
Criptografia do lado do cliente e desempenho
Tenha em mente que criptografar seu armazenamento de dados resulta em uma sobrecarga adicional no desempenho. Quando você usa a criptografia do lado do cliente em seu aplicativo, a biblioteca de clientes deve gerar com segurança a CEK e o IV, criptografar o conteúdo em si, comunicar-se com o repositório de chaves escolhido para o envelopamento de chaves e formatar e carregar metadados adicionais. Essa sobrecarga varia dependendo da quantidade de dados que está sendo criptografada. Recomendamos que os clientes sempre testem seus aplicativos a fim de verificar o desempenho durante o desenvolvimento.