Criptografia autenticada com dados associados (AEAD)

A criptografia autenticada com dados associados (AEAD, na sigla em inglês) é a primitiva 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 criptografado que foi criptografado sem que isso seja 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 quiser evitar isso, use o 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.

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

Recomendamos o AES128_GCM para a maioria dos usos, mas há vários tipos de chaves para diferentes necessidades. Para segurança de 256 bits, substitua AES128 por AES256 abaixo. Em geral:

  • AES128_CTR_HMAC_SHA256 com um vetor de inicialização (IV) de 16 bytes é o modo mais conservador com bons limites.
  • O AES128_EAX é um pouco menos conservador e mais rápido que o AES128_CTR_HMAC_SHA256.
  • O AES128_GCM geralmente é o modo mais rápido, com os limites mais rigorosos no número de mensagens e no tamanho delas. Quando esses limites de texto simples e comprimentos de dados associados (abaixo) são excedidos, o AES128_GCM falha e vaza material de chave.
  • O AES128_GCM_SIV é quase tão rápido quanto o AES128_GCM. Ele tem os mesmos limites que AES128_GCM no número de mensagens e tamanho da mensagem, mas quando esses limites são excedidos, ele falha de uma maneira menos catastrófica: pode vazar apenas o fato de que duas mensagens são iguais. Isso o torna mais seguro do que o AES128_GCM, mas é menos usado na prática. Para usar isso em Java, instale o Conscrypt.
  • O XChaCha20Poly1305 tem um limite muito maior no número de mensagens e no tamanho delas do que o AES128_GCM, mas quando ele falha (o que é muito improvável), também vaza material de chave. Ele não é acelerado por hardware, então pode ser mais lento do 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 ou cifrados escolhidos tem uma probabilidade de sucesso maior que 2-32.

Exemplos de casos de uso

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