Criptografia autenticada com dados associados (AEAD)

A primitiva de criptografia autenticada com dados associados (AEAD) é a mais comum para criptografia de dados e atende à 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 que foi criptografado sem ser detectado.
  • Simétrica: 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ístico.

Dados associados

A AEAD pode ser usada para vincular o 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.

Escolher um tipo de chave

Embora recomendemos AES128_GCM para a maioria dos usos, há vários tipos de chaves para diferentes necessidades. Para segurança de 256 bits, substitua AES128 por AES256 abaixo. De modo geral:

  • AES128_CTR_HMAC_SHA256 com um vetor de inicialização (IV) de 16 bytes é o modo mais conservador com limites adequados.
  • O AES128_EAX é um pouco menos conservador e um pouco mais rápido que o AES128_CTR_HMAC_SHA256.
  • O AES128_GCM geralmente é o modo mais rápido, com os limites mais rígidos sobre o número e o tamanho de mensagens. Quando esses limites de texto simples e comprimentos de dados associados (abaixo) são excedidos, o AES128_GCM falha e vaza material chave.
  • O AES128_GCM_SIV é quase tão rápido quanto o AES128_GCM. Ele tem os mesmos limites de AES128_GCM no número e no tamanho de mensagens, mas, quando esses limites são excedidos, ele falha de uma forma menos catastrófica: ele pode vazar apenas o fato de que duas mensagens são iguais. Isso torna o uso mais seguro do que o AES128_GCM, mas ele é menos usado na prática. Para usar isso no Java, é necessário instalar o Conscrypt.
  • O XChaCha20Poly1305 tem um limite muito maior no número de mensagens e tamanho da mensagem do que o AES128_GCM, mas, quando falha (muito improvável), também vazamento de material de chave. Ele não é acelerado por hardware, então pode ser mais lento que os modos AES em situações em que a aceleração de hardware está disponível.

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 escolhidos ou textos criptografados escolhidos tem probabilidade de sucesso maior que 2-32.

Exemplos de casos de uso

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