Criptografia autenticada com dados associados (AEAD)

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

O AEAD tem as seguintes propriedades:

  • Confidencialidade: nada é conhecido sobre o texto simples, exceto o tamanho dele.
  • Autenticidade: é impossível mudar o texto simples criptografado que está por trás do texto criptografado sem ser 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 sabem qual texto criptografado corresponde a um determinado texto simples. Se você quiser evitar isso, use AEAD Deterministic.

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 evita que um invasor transfira o histórico médico de um usuário para outro.

Escolha um tipo de chave

Recomendamos AES128_GCM para a maioria dos usos, mas há vários tipos de chave para diferentes necessidades (para segurança de 256 bits, substitua AES128 por AES256 abaixo). De modo geral:

  • O AES128_CTR_HMAC_SHA256 com um vetor de inicialização (IV, na sigla em inglês) de 16 bytes é o modo mais conservador com limites bons.
  • 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 rigorosos para o número de mensagens e o tamanho delas. Quando esses limites em texto simples e tamanhos de dados associados (abaixo) são excedidos, o AES128_GCM falha e vaza o material da chave.
  • O AES128_GCM_SIV é quase tão rápido que o AES128_GCM, com limites muito bons para uma grande quantidade de mensagens, mas é um pouco menos estabelecido. Para usar isso em Java, é necessário instalar o Conscrypt.
  • O XChaCha20Poly1305 tem um limite muito maior de mensagens e tamanho de mensagem do que o AES128_GCM, mas quando ocorre uma falha (muito improvável), ele também vaza material da chave. Ela não é acelerada 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 o seguinte:

  • 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 do que 2 a 32.

Exemplos de casos de uso

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