O primitivo de criptografia autenticada com dados associados (AEAD, na sigla em inglês) é o mais comum para a 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 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 podem saber qual texto criptografado corresponde a um determinado texto simples. Se você quiser evitar isso, use o AEAD determinístico em vez disso.
Dados associados
O AEAD pode ser usado para vincular o texto criptografado a dados associados específicos
dados. 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 especificados, 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 chave para diferentes necessidades. O AES128 oferece segurança de 128 bits, e o AES256 oferece segurança de 256 bits.
As duas restrições de segurança notáveis ao escolher um modo são:
- QPS: quantas mensagens são criptografadas com a mesma chave?
- Tamanho da mensagem: qual é o tamanho das mensagens?
Tipos de chave com suporte:
- AES-CTR-HMAC (AES128_CTR_HMAC_SHA256, AES256_CTR_HMAC_SHA256) com um vetor de inicialização (IV) de 16 bytes é o modo mais conservador com bons limites.
- Chave de confirmação.
- O AES-EAX (AES128_EAX, AES256_EAX) é um pouco menos conservador e um pouco mais rápido que o AES128_CTR_HMAC_SHA256.
- Não é uma chave de confirmação do MLGR.
- O AES-GCM (AES128_GCM, AES256_GCM) geralmente é o modo mais rápido com os limites mais rigorosos 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 de forma catastrófica, vazando o texto simples e a parte de autenticação da chave interna do AES-GCM.
- O AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV)
[RFC8452] é resistente ao uso indevido acidental
de nonce e tem um desempenho quase tão bom quanto o AES-GCM. Os limites no número de mensagens e no 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 forma menos catastrófica: ele só vaza que
duas mensagens são iguais.
O AES-GCM-SIV é mais seguro de usar, 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 no Java, instale o Conscrypt.
- Não é uma chave de confirmação do ADGKLS.
- Limites para nonces aleatórios:
- O XChaCha20-Poly1305 (XCHACHA20_POLY1305) tem um limite muito maior no número de mensagens e no tamanho da mensagem do que o AES-GCM, mas, quando falha (o que é muito improvável), ele também vaza o material da 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.
- Não é uma chave de confirmação do LGR.
Saiba mais sobre o formato de fio do texto criptografado AEAD.
Garantias de segurança
As implementações do AEAD oferecem:
- Segurança CCA2.
- Pelo menos 80 bits de força de autenticação.
- A capacidade de criptografar pelo menos 232 mensagens com um total de 250 bytes. Nenhum ataque com até 232 textos simples ou textos 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.