Como AWS KMS e AWS Encryption SDK Superam os Limites da Criptografia Simétrica

Entendendo o Desafio da Criptografia em Escala

Aplicações que operam em larga escala e lidam com volumes significativos de dados criptografados enfrentam um desafio técnico importante: acompanhar os limites de criptografia e gerenciar a rotação de chaves de forma eficiente. Este artigo explora como a AWS Key Management Service (AWS KMS) e o AWS Encryption SDK resolvem automaticamente os limites de criptografia do padrão AES-GCM (Advanced Encryption Standard em Galois Counter Mode), utilizando métodos de derivação de chaves. Isso elimina a necessidade de os desenvolvedores rastrearem manualmente esses limites.

A abordagem utiliza chaves derivadas que são geradas a partir de uma chave principal por meio de um valor aleatório chamado nonce. Dessa forma, cada operação de criptografia usa uma chave única, permitindo que a chave principal seja reutilizada por muito mais tempo. Métodos similares de derivação de chaves têm sido propostos em esquemas recentes como o (KC-)XAES, DNDK v2, e outros trabalhos acadêmicos da comunidade criptográfica.

Os Limites da Criptografia Simétrica

Criptografia AEAD e AES-GCM

Algoritmos de criptografia simétrica protegem grandes volumes de dados, tanto em trânsito quanto em repouso. Os cifras modernos também autenticam os dados usando uma tag de autenticação — essas são chamadas de cifras AEAD (Authenticated Encryption with Additional Data). Exemplos incluem o AES-GCM e o ChaCha20/Poly1305.

O AES-GCM é o algoritmo de criptografia mais amplamente utilizado e foi padronizado pelo NIST na especificação SP 800-38D. Este algoritmo utiliza uma chave de 128 ou 256 bits (K), um vetor de inicialização (IV) de 96 bits e criptografa um texto simples (P), autenticando também dados adicionais (AAD). O resultado é um texto cifrado (C) e uma tag de autenticação (T).

Na descriptografia, o receptor recupera o texto simples original utilizando a chave, o IV e os dados autenticados, depois valida a tag para garantir a integridade da mensagem.

Limite de Invocações de Criptografia

Um requisito crítico para a segurança do AES-GCM é que o par (chave K, IV) nunca se repita durante toda a vida útil da chave. Se isso acontecer, as propriedades de segurança do algoritmo são comprometidas. A especificação SP 800-38D exige que a implementação mantenha uma probabilidade de reutilização inferior a 1 em 4,29 bilhões (menor que 2⁻³²).

Isso pode ser alcançado utilizando um IV determinístico que não se repete ou um IV aleatório. Se um IV aleatório é usado, torna-se necessário trocar a chave após 2³² criptografias. Protocolos comuns como TLS ou IKEv2/IPsec evitam colisões do par (K, IV) usando IVs determinísticos que começam com um valor aleatório e são incrementados para cada conexão.

Limite de Volume de Dados

Além do limite de invocações, existe também um limite relacionado ao volume total de dados que pode ser criptografado com a mesma chave. O contador de blocos no AES-GCM é de 32 bits, o que resulta em um limite de 2³²-2 bytes (aproximadamente 68,72 GB) por operação de criptografia, ou seja, por cada par único (K, IV).

Quando não se restringe o volume total de dados criptografados, reduz-se a garantia de segurança de indistinguibilidade — a capacidade de um adversário de não conseguir distinguir entre dois textos cifrados diferentes. Quanto maior a proteção de indistinguibilidade, menor é o total de bytes que podem ser criptografados sob uma única chave.

A especificação do NIST sugere um limite de 2⁶⁸ bytes protegidos sob uma chave única, o que fornece uma probabilidade de indistinguibilidade de 50%. Porém, margens de segurança mais conservadoras baseadas em diferentes análises criptográficas são frequentemente utilizadas. A AWS adota uma abordagem ainda mais conservadora, impondo por padrão uma probabilidade de indistinguibilidade negligenciável (menor que 2⁻³²).

Quando se atinge os limites de dados do AES-GCM para uma determinada margem de segurança, é necessário fazer a rotação da chave simétrica. Em aplicações modernas de criptografia em larga escala, esses limites (por exemplo, 2³² criptografias com IVs aleatórios ou o volume máximo de dados por chave) podem ser atingidos. Rastrear esses limites em sistemas distribuídos com muitas sessões concorrentes adiciona complexidade operacional significativa. A AWS compartilhou essas dificuldades em um documento detalhado e uma apresentação no terceiro Workshop do NIST sobre Modos de Cifra em Blocos de 2023.

Como AWS KMS Utiliza Chaves Derivadas

A AWS KMS é um serviço gerenciado que permite criar e controlar as chaves utilizadas para criptografar e assinar dados. A API Encrypt do KMS suporta criptografia simétrica e assimétrica. Para criptografia com chaves simétricas, o AWS KMS utiliza AES-GCM com chaves de 256 bits para criptografar um texto simples de até 4 KB.

Quando uma solicitação ao KMS Encrypt é feita, ela inclui o texto simples e o identificador da chave simétrica gerenciada pelo cliente armazenada no KMS. A chamada da API de Encrypt usa a chave para derivar uma chave de criptografia simétrica antes de criptografar o texto simples.

O processo funciona da seguinte forma: a AWS KMS gera um nonce aleatório de 128 bits e produz uma chave simétrica de 256 bits a partir da chave principal especificada, utilizando uma função de derivação de chaves (KDF). Essa função recebe a chave, um rótulo e contexto, um nonce específico da invocação, e um comprimento de saída desejado, produzindo material de chave do tamanho especificado.

Para o AWS KMS, a função KDF é o Counter Mode KDF conforme a especificação SP 800-108r1 do NIST, que produz 256 bits de material de chave utilizando HMAC-SHA256 como função pseudoaleatória. A chave derivada é produzida com uma chamada ao HMAC-SHA256 com a chave principal:

Subsequentemente, o AWS KMS gera um IV aleatório de 96 bits e criptografa o texto simples de entrada com AES-GCM. O resultado inclui o IV, o nonce, o texto cifrado e a tag de autenticação. Estes componentes são retornados em um blob de texto cifrado (CiphertextBlob) que pode ser descriptografado em chamadas posteriores à API Decrypt.

Intuitivamente, o nonce aleatório de 128 bits usado para derivar uma chave única de criptografia sob uma chave gerenciada permite que o chamador ultrapasse significativamente o limite de 2³² invocações de criptografia sob essa chave. Além disso, o limite de 4 KB no tamanho da carga útil para uma chamada AWS Encrypt garante que o volume total de dados criptografados sob uma chave de criptografia permaneça bem abaixo dos limites totais de criptografia do NIST ou de outras margens mais conservadoras. Para mais detalhes sobre os fundamentos matemáticos e criptográficos desse esquema, consulte o artigo Key Management Systems at the Cloud Scale.

Como AWS Encryption SDK Aplica Modos de Chave Derivada

O AWS Encryption SDK é uma biblioteca de criptografia do lado do cliente usada para criptografar e descriptografar dados. Pode ser configurado para usar cache de chaves de dados, reduzindo chamadas de API ao criptografar múltiplas cargas úteis.

Usar uma chave derivada baseada em nonce para cada invocação de AES-GCM elimina a necessidade de os clientes acompanharem o volume total de dados que criptografam sob uma única chave de dados. Embora o AWS Encryption SDK ofereça muita flexibilidade para acomodar diversos cenários de criptografia, a configuração padrão lida com derivação de chaves e dimensionamento de frames automaticamente, elimando a necessidade de ajustar essas configurações para a maioria dos casos de uso.

Para derivar uma chave diferente para cada invocação, assim como o AWS KMS, o SDK utiliza um valor aleatório gerado, a chave principal e contexto específico da invocação na KDF. O valor aleatório tem 256 bits na configuração padrão. A KDF subjacente é a Função de Derivação de Chaves baseada em HMAC (HKDF — HMAC-based Extract-and-Expand Key Derivation Function) com SHA512 como o hash padrão.

A chave derivada é produzida com uma chamada ao HKDF com a chave principal, usando um rótulo constante e um contexto que consiste em constantes concatenadas com um valor aleatório de 256 bits. Subsequentemente, o AWS Encryption SDK usa a chave derivada para criptografar o conteúdo do usuário, dividido em frames de 4 KB por padrão.

Cada frame de texto simples é criptografado com AES-GCM usando um IV determinístico que consiste em um contador de frames, onde o ID do frame é menor que 2³². O dado autenticado adicional (AAD) é específico do frame de dados do Encryption SDK. Na descriptografia, o receptor deriva a chave da mesma forma e descriptografa o texto cifrado para produzir o texto simples do frame, validando a tag de autenticação.

O tamanho padrão de 4 KB por frame garante que por padrão não mais que 2⁴⁴ bytes (2³² frames de 4 KB cada) possam ser criptografados sob uma única chave de criptografia. Isso está bem abaixo do limite sugerido pelo NIST (2⁶⁸ bytes), mesmo com cache de chaves de dados. Também está bem abaixo do requisito conservador da AWS de probabilidade de indistinguibilidade menor que 2⁻³².

O limite de invocações por chave, mesmo com cache de chaves de dados, excede as contagens de criptografia na maioria das aplicações em larga escala.

Considerações sobre Versões Anteriores

Enquanto a configuração padrão do AWS Encryption SDK faz escolhas conservadoras, se você estiver usando a versão legada 1.0 ou fizer alterações de configuração, poderá ter garantias de segurança menores. Por exemplo, um tamanho máximo customizado de frame de 2³²-1 bytes levaria a um tamanho total de texto simples maior, que ainda está abaixo do limite sugerido pelo NIST de 2⁶⁸ bytes, mas não necessariamente abaixo de outras margens conservadoras.

Vale notar que a configuração padrão do AWS Encryption SDK também fornece propriedades de segurança menos conhecidas, como compromisso de chave. A string de comprometimento é produzida de forma similar à chave derivada, utilizando a chave principal e HKDF.

Conclusão

Ao derivar uma chave única para cada chamada de criptografia, a AWS KMS e o AWS Encryption SDK eliminam a necessidade de rastrear manualmente os limites do AES-GCM. Para compreender os fundamentos acadêmicos dos limites do AES-GCM, consulte a especificação SP 800-38D e o rascunho draft-irtf-cfrg-aead-limits.

Para leitura adicional sobre a análise criptográfica do esquema de derivação de chaves utilizado no KMS, consulte Key Management Systems at the Cloud Scale. Para mais detalhes sobre a derivação de chaves AES-GCM do Encryption SDK, veja a referência de algoritmos do AWS Encryption SDK.

Fonte

How AWS KMS and AWS Encryption SDK overcome symmetric encryption bounds (https://aws.amazon.com/blogs/security/how-aws-kms-and-aws-encryption-sdk-overcome-symmetric-encryption-bounds/)

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *