O primitivo AEAD de streaming fornece criptografia autenticada para dados de streaming. Ela é útil quando os dados a serem criptografados são muito grandes para serem processados em uma única etapa. Os casos de uso típicos incluem criptografia de arquivos grandes ou streams de dados ao vivo.
A criptografia é feita em segmentos, que são vinculados à sua localização dentro de um texto criptografado e não podem ser removidos ou reordenados. Os segmentos de um texto criptografado não podem ser inseridos em outro. Para modificar um texto criptografado existente, todo o fluxo de dados precisa ser criptografado novamente.1
A descriptografia é rápida porque apenas uma parte do texto criptografado é descriptografada e autenticada de cada vez. É possível acessar textos simples parciais sem processar todo o texto criptografado.
As implementações de AEAD de streaming atendem à definição AEAD e são seguras pela OAE2. Eles têm 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.
Dados associados
A AEAD de streaming 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_HKDF_1MB para a maioria dos usos. De modo geral:
- AES128_GCM_HKDF_1MB (ou AES256_GCM_HKDF_1MB) é a opção mais rápida. Ele pode criptografar 264 arquivos com até 264 bytes cada. Cerca de 1 MB de memória é consumido durante o processo de criptografia e descriptografia.
- O AES128_GCM_HKDF_4KB consome cerca de 4 KB de memória e é uma boa opção caso seu sistema não tenha muita memória.
- AES128_CTR_HMAC_SHA256_1MB (ou AES256_CTR_HMAC_SHA256_1MB) é uma opção mais conservadora.
Garantias de segurança
As implementações de streaming AEAD oferecem:
- Segurança CCA2.
- Força de autenticação de pelo menos 80 bits.
- Capacidade de criptografar pelo menos 264 mensagens3 com um total de 251 bytes2 . Nenhum ataque com até 232 textos simples ou criptografados escolhidos tem probabilidade de sucesso maior do que 2 a 32.
Exemplo de caso de uso
Consulte Quero criptografar arquivos grandes ou fluxos de dados.
-
Um motivo para essa restrição é o uso da cifra AES-GCM. Criptografar um segmento de texto simples diferente no mesmo local seria equivalente a reutilizar o IV, o que viola as garantias de segurança do AES-GCM. Outra razão é que isso evita ataques de reversão, em que o invasor pode tentar restaurar uma versão anterior do arquivo sem detecção. ↩
-
São aceitos 232 segmentos, cada um contendo
segment_size - tag_size
bytes de texto simples. Para segmentos de 1 MB, o tamanho total do texto simples é de 232 * (220-16) ~= 251 bytes.↩ -
O streaming AEAD se torna inseguro quando uma combinação de chave derivada (128 bits) e prefixo de uso único (valor de valor de uso único aleatório independente) é repetida. Temos resistência a colisão de 184 bits, o que significa aproximadamente 264 mensagens para que a probabilidade de sucesso seja menor que 2 a 32. ↩