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 de carregar no Armazenamento do Azure e descriptografar dados durante o download para o cliente. As bibliotecas de cliente também oferecem suporte à integração com o Azure Key Vault para gerenciamento de chaves de conta de armazenamento.
Importante
O Armazenamento do Azure 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 seus dados. Para saber mais sobre a criptografia do lado do serviço, consulte Criptografia do Armazenamento do Azure para dados em repouso.
Sobre a criptografia do lado do cliente
A biblioteca de cliente do Armazenamento de Filas do Azure usa AES para criptografar dados do usuário. Há duas versões de criptografia do lado do cliente disponíveis na biblioteca do cliente:
- A versão 2 usa o modo Galois/Counter Mode (GCM) com AES.
- A versão 1 usa o modo Cipher Block Chaining (CBC) com 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 do cliente. Para obter mais informações sobre esta vulnerabilidade de segurança, consulte Armazenamento do Azure atualizando a criptografia do lado do cliente no SDK para resolver a vulnerabilidade de segurança. Se você estiver usando a versão 1, recomendamos que atualize seu aplicativo para usar a versão 2 e migrar seus dados. Consulte a seção a seguir, Mitigar a vulnerabilidade de segurança em seus aplicativos, para obter mais orientações.
Reduza a vulnerabilidade de segurança em seus aplicativos
Devido a uma vulnerabilidade de segurança descoberta na implementação do modo CBC da biblioteca de cliente de armazenamento em filas, a Microsoft recomenda que você execute uma ou mais das seguintes ações imediatamente:
Considere o uso de recursos de criptografia do lado do serviço em vez da criptografia do lado do cliente. Para obter mais informações sobre recursos de criptografia do lado do serviço, consulte Criptografia do Armazenamento do Azure para dados em repouso.
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 tabela a seguir resume as etapas que você precisa seguir se optar por migrar seus aplicativos para a criptografia do lado do cliente v2:
Status de criptografia do lado do cliente | Ações recomendadas |
---|---|
O aplicativo está usando a criptografia do lado do cliente, uma versão da biblioteca do cliente que suporta apenas a criptografia do lado do cliente v1. | Atualize seu aplicativo para usar uma versão da biblioteca de cliente que ofereça suporte à criptografia do lado do cliente v2. Consulte Matriz de suporte do SDK para criptografia do lado do cliente para obter uma lista de versões suportadas. 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 do cliente que oferece suporte à 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ê siga 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 rede virtual (VNet) e sua conta de armazenamento por meio de um link privado. Para obter mais informações, consulte Usar pontos de extremidade privados para o Armazenamento do Azure.
- Limite o acesso à rede apenas a redes específicas.
Matriz de suporte do SDK para criptografia do lado do cliente
A tabela a seguir mostra quais versões das bibliotecas de cliente para .NET e Python suportam quais versões de 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 somente | Versões 12.10.0 e anteriores | Versões 12.3.0 e anteriores |
Se seu aplicativo estiver usando criptografia do lado do cliente com uma versão anterior da biblioteca de cliente .NET ou Python, você deve primeiro atualizar seu código para uma versão que ofereça suporte à criptografia do lado do cliente v2. Em seguida, você deve descriptografar e criptografar novamente seus dados com a criptografia do lado do cliente v2. Se necessário, você pode usar uma versão da biblioteca de cliente que ofereça suporte à criptografia do lado do cliente v2 lado a lado com uma versão anterior da biblioteca do cliente enquanto estiver migrando seu código.
Como funciona a criptografia do lado do cliente
As bibliotecas de cliente do Armazenamento de Filas do Azure usam criptografia de envelope para criptografar e descriptografar seus dados no lado do cliente. A criptografia de envelope criptografa uma chave com uma ou mais chaves adicionais.
As bibliotecas de cliente do Armazenamento de Filas dependem do Cofre da Chave do Azure para proteger as chaves usadas para criptografia 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:
A biblioteca de cliente do Armazenamento do Azure gera uma chave de criptografia de conteúdo (CEK), que é uma chave simétrica de uso único.
Os dados do usuário são criptografados usando o CEK.
O CEK é então encapsulado (criptografado) usando a chave de criptografia de chave (KEK). O KEK é identificado por um identificador de chave e pode ser um par de chaves assimétricas ou uma chave simétrica. Você pode gerenciar o KEK localmente ou armazená-lo em um Cofre de Chaves do Azure.
A própria biblioteca de cliente do Armazenamento do Azure nunca tem acesso ao KEK. A biblioteca invoca o algoritmo de encapsulamento de chaves fornecido pelo Cofre de Chaves. Os usuários podem optar por usar provedores personalizados para empacotamento/desempacotamento de chaves, se desejarem.
Os dados criptografados são então carregados no Armazenamento de Filas do Azure. A chave encapsulada, juntamente com alguns metadados de criptografia adicionais, é interpolada com os dados criptografados.
A desencriptação através da técnica de envelope funciona da seguinte forma:
- A biblioteca de cliente do Armazenamento do Azure pressupõe que o usuário esteja gerenciando o KEK localmente ou em um Cofre de Chaves do Azure. O usuário não precisa saber a chave específica que foi usada para criptografia. Em vez disso, um resolvedor de chaves que resolve diferentes identificadores de chave para chaves pode ser configurado e usado.
- A biblioteca de cliente baixa os dados criptografados junto com qualquer material de criptografia armazenado no Armazenamento do Azure.
- O CEK embrulhado) é então desembrulhado (desencriptado) usando o KEK. A biblioteca de cliente não tem acesso ao KEK durante esse processo, mas apenas invoca o algoritmo de desempacotamento do Cofre de Chaves do Azure ou outro armazenamento de chaves.
- A biblioteca de cliente usa o CEK para descriptografar os dados criptografados do usuário.
Encriptação/desencriptação de mensagens
Como as mensagens de fila podem 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 de conteúdo criptografado (CEK) no texto da mensagem.
Durante a criptografia, a biblioteca do cliente gera um IV aleatório de 16 bytes junto com um CEK aleatório de 32 bytes e executa a criptografia de envelope do texto da mensagem da fila usando essas informações. O CEK encapsulado e alguns metadados de criptografia adicionais são adicionados à mensagem de fila criptografada. Esta mensagem modificada é armazenada no serviço.
<MessageText>{"EncryptedMessageContents":"6kOu8Rq1C3+M1QO4alKLmWthWXSmHV3mEfxBAgP9QGTU++MKn2uPq3t2UjF1DO6w","EncryptionData":{…}}</MessageText>
Durante a desencriptação, a chave encapsulada é extraída da mensagem da fila e desempacotada. O IV também é extraído da mensagem da fila e usado junto com a chave desempacotada para descriptografar os dados da mensagem da fila. Os metadados de criptografia são pequenos (menos de 500 bytes), portanto, embora contem para o limite de 64 KB para uma mensagem de fila, o impacto deve ser gerenciável. A mensagem criptografada é codificada em Base64, como mostrado no trecho acima, que expande o tamanho da mensagem que está sendo enviada.
Devido à natureza de curta duração das mensagens na fila, descriptografar e criptografar novamente as mensagens da fila após a atualização para a criptografia do lado do cliente v2 não deve ser necessário. Quaisquer mensagens menos seguras são alternadas durante o consumo normal da fila.
Criptografia e desempenho do lado do cliente
Lembre-se de que criptografar seus dados de armazenamento resulta em sobrecarga de desempenho adicional. Quando você usa a criptografia do lado do cliente em seu aplicativo, a biblioteca do cliente deve gerar com segurança o CEK e o IV, criptografar o próprio conteúdo, se comunicar com o armazenamento de chaves escolhido para o envelopamento de chaves e formatar e carregar metadados adicionais. Essa sobrecarga varia dependendo da quantidade de dados que estão sendo criptografados. Recomendamos que os clientes sempre testem o desempenho de seus aplicativos durante o desenvolvimento.
Próximos passos
- Armazenamento do Azure atualizando a criptografia do lado do cliente no SDK para resolver a vulnerabilidade de segurança
- Azure Storage encryption for data at rest (Encriptação do Armazenamento do Azure para dados inativos)
- Documentação do Azure Key Vault