Criptografia autenticada com dados associados (AEAD)

A criptografia autenticada com dados associados (AEAD, na sigla em inglês) é o primitivo mais comum para criptografia de dados e é adequada para a maioria das necessidades.

O AEAD tem as seguintes propriedades:

  • Secrecy: nada sobre o texto simples é conhecido, exceto o tamanho dele.
  • Autenticidade: é impossível mudar o texto simples criptografado sem que isso seja detectado.
  • Simetria: a criptografia do texto simples e a descriptografia do texto criptografado são feitas com a mesma chave.
  • Ordem aleatória: a criptografia é aleatória. Duas mensagens com o mesmo texto simples geram textos criptografados diferentes. Os invasores não podem saber qual texto criptografado corresponde a um determinado texto simples. Se você quiser evitar isso, use AEAD determinística.

Dados associados

A AEAD pode ser usada para vincular texto criptografado a dados associados específicos. Suponha que você tenha um banco de dados com os campos user-id e encrypted-medical-history. Nesse cenário, user-id pode ser usado como dados associados ao criptografar encrypted-medical-history. Isso impede que um invasor mova o histórico médico de um usuário para outro.

Os dados associados são opcionais. Se especificado, a descriptografia só será bem-sucedida se os mesmos dados associados forem transmitidos para as chamadas de criptografia e descriptografia.

Escolher um tipo de chave

Embora recomendemos AES128_GCM para a maioria dos usos, há vários tipos de chave para necessidades diferentes. O AES128 oferece segurança de 128 bits, e o AES256 oferece segurança de 256 bits.

As duas restrições de segurança importantes ao escolher um modo são:

  1. QPS: quantas mensagens são criptografadas com a mesma chave?
  2. Tamanho da mensagem: qual é o tamanho das mensagens?

Tipos de chave compatíveis:

  • AES-CTR-HMAC (AES128_CTR_HMAC_SHA256, AES256_CTR_HMAC_SHA256) com um vetor de inicialização (IV, na sigla em inglês) de 16 bytes é o modo mais conservador com bons limites.
    • Comprometimento de chave.
  • O AES-EAX (AES128_EAX, AES256_EAX) é um pouco menos conservador e um pouco mais rápido que o AES128_CTR_HMAC_SHA256.
    • MLGR sem confirmação de chave.
  • O AES-GCM (AES128_GCM, AES256_GCM) geralmente é o modo mais rápido com os limites mais rígidos no número de mensagens (232) e no tamanho da mensagem (~64 GB por mensagem). Quando esses limites são excedidos, o AES-GCM falha catastroficamente ao vazar o texto simples e a parte de autenticação da chave interna do AES-GCM.
    • O AES-GCM não é robusto [ABN] nem confirma chaves [GLR]. É possível gerar um texto criptografado que pode ser descriptografado com duas chaves diferentes. Isso pode levar a ataques práticos [DGRW]. Analise cuidadosamente seu modelo de ameaças se a chave for escolhida pelo adversário.
  • O AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV) [RFC8452] é resistente ao uso indevido acidental de nonce e tem quase o mesmo desempenho do AES-GCM. Os limites do número de mensagens e do tamanho da mensagem para AES-GCM-SIV com IVs aleatórios são muito maiores do que os limites do AES-GCM. Quando esses limites são excedidos, o AES-GCM-SIV falha de maneira menos catastrófica: ele só vaza que duas mensagens são iguais. O AES-GCM-SIV é mais seguro, mas é menos usado na prática.
    • Limites para nonces aleatórios:
      • 232 mensagens, em que cada texto simples tem no máximo 8 GiB
      • 248 mensagens, em que cada texto simples tem no máximo 32 MiB
      • 264 mensagens, em que cada texto simples tem no máximo 128 KiB
    • Para usar em Java, instale o Conscrypt.
    • ADGKLS sem confirmação de chave.
  • O XChaCha20-Poly1305 (XCHACHA20_POLY1305) tem um limite muito maior para o número de mensagens e o tamanho delas do que o AES-GCM, mas quando falha (o que é muito improvável), ele também vaza material de chave. Ele não tem aceleração de hardware, portanto, pode ser mais lento do que os modos AES em situações em que a aceleração de hardware está disponível.
    • LGR sem confirmação de chave.

Saiba mais sobre o formato de transmissão do texto criptografado AEAD.

Garantias de segurança

As implementações de AEAD oferecem:

  • segurança CCA2.
  • Força de autenticação de pelo menos 80 bits.
  • A capacidade de criptografar pelo menos 232 mensagens com um total de 250 bytes. Nenhum ataque com até 232 textos simples ou criptografados escolhidos tem probabilidade de sucesso maior que 2-32.

Exemplos de casos de uso

Consulte Quero criptografar dados e Quero vincular o texto criptografado ao contexto.