Por que não ' devo usar a criptografia de ECB?
On Fevereiro 18, 2021 by adminEstou usando Java para gerar strings criptografadas e recebo este aviso no momento da compilação:
O modo de criptografia ECB não deve ser usado
Então, estou me perguntando por que não devo usar o ECB e o que posso usar em seu lugar ?
Comentários
- Os comentários não são para discussão prolongada; esta conversa foi movida para o chat .
- Você trabalha com zoom?;)
Resposta
Por que não devo usar a criptografia do BCE?
O principal motivo para não usar a criptografia do modo do BCE é que não é semanticamente seguro — ou seja, apenas observar o texto cifrado criptografado pelo BCE pode vazar informações sobre o texto simples (mesmo além de seu comprimento, que todos os esquemas de criptografia que aceitam textos simples arbitrariamente longos vazarão até certo ponto).
Específico Sim, o problema com o modo ECB é que criptografar o mesmo bloco (de 8 ou 16 bytes, ou o tamanho do bloco da cifra subjacente) de texto simples usando o modo ECB sempre produz o mesmo bloco de texto cifrado. Isso pode permitir que um invasor:
- detecte se duas mensagens criptografadas por ECB são idênticas;
- detecte se duas mensagens criptografadas por ECB compartilham um prefixo comum;
- detectar se duas mensagens criptografadas com ECB compartilham outras substrings comuns, desde que essas substrings estejam alinhadas nos limites do bloco; ou
- detecte se (e onde) uma única mensagem criptografada por ECB contém dados repetitivos (como longas corridas de espaços ou bytes nulos, campos de cabeçalho repetidos ou frases repetidas coincidentemente no texto).
Há “uma boa demonstração gráfica dessa fraqueza na Wikipedia, onde a mesma imagem (bruta, não compactada) é criptografada usando o modo ECB e um modo de criptografia semanticamente seguro (como CBC, CTR, CFB ou OFB):
Embora este cenário seja um tanto artificial (normalmente não se criptografaria imagens brutas como esta), demonstra bem o problema com o modo ECB: áreas repetitivas na imagem de entrada resultam em padrões repetitivos na saída criptografada, de modo que muitos recursos de grande escala da imagem permanecem reconhecíveis apesar da criptografia. No mundo real, um criptanalista atacando um ECB- criptografia baseada esquema seria mais provável de procurar por esses padrões em um dump hexadecimal do texto cifrado, mas o princípio é o mesmo.
Um caso real dessa fraqueza da criptografia de ECB contribuindo para um comprometimento de dados do mundo real é fornecido pelo vazamento do banco de dados de senha da Adobe de 2013, conforme descrito nesta resposta . Aqui, um elemento que contribuiu para a gravidade do vazamento foi que, em vez de fazer o hash corretamente , a Adobe criptografou as senhas usando o modo ECB. Isso permitiu que os invasores localizassem rapidamente as senhas compartilhadas por várias contas, ou compartilhando um prefixo comum com outras senhas (como senha1 e senha2 ), e também revelou o comprimento aproximado de cada senha.
O modo de criptografia do BCE também tem outros pontos fracos, como o fato de ser altamente maleável : como cada bloco de texto simples é criptografado separadamente, um invasor pode facilmente gerar novos textos cifrados válidos juntando blocos de textos cifrados previamente observados.
No entanto, a maleabilidade é apenas um problema se a criptografia ECB for usada sem um código de autenticação de mensagem e, nesta situação, é compartilhado (até certo ponto) por todos os outros modos de criptografia não autenticados , como os mencionados CBC, CTR, CFB e OFB. Portanto, não pode realmente ser considerado uma fraqueza específica do modo de ECB, embora tenda a ser um problema adicional quando sempre que o modo ECB for usado.
O que devo usar no lugar?
Você deve usar qualquer criptografia autenticada modo, como GCM , EAX ou OCB .
Pessoalmente, para mensagens curtas, gosto bastante do modo SIV ( RFC 5279 ), que fornece uma camada extra de resistência ao uso indevido. (Muitos outros modos de criptografia serão danificados se o mesmo IV / nonce for acidentalmente usado para criptografar várias mensagens. O modo SIV retém todas as suas propriedades de segurança nesta situação, exceto pelo vazamento se as mensagens criptografadas são idênticas.)
Você também pode usar qualquer modo tradicional de criptografia semanticamente seguro (como CBC ou CTR ), combinado com um código de autenticação de mensagem (como HMAC ) usando o Encrypt -então-MAC . (Ou seja, você deve primeiro criptografar a mensagem, depois calcular um MAC do texto cifrado e anexá-lo ao texto cifrado.) Desde que verifique o MAC antes de tentar descriptografar a mensagem, essa construção o protegerá de as várias vulnerabilidades desses modos para ataques ativos (texto cifrado escolhido).
Para criptografia de disco ou aplicativos semelhantes que exigem a capacidade de modificar partes do texto cifrado sem criptografar novamente todos os dados, você deve usar um modo de cifragem projetado para essa finalidade, como XTS . Observe que esses modos geralmente não têm resistência a ataques ativos e podem ter outros pontos fracos que devem ser entendidos antes de usá-los. Se possível, eles devem ser combinados com alguma forma de proteção de integridade, como um MAC em uma árvore hash .
Comentários
- O que você sugeriria nos casos em que se deseja ser capaz de ler / gravar blocos de um armazenamento de dados em sequência arbitrária, de preferência enquanto faz um mapa de blocos de todos para um uns bloqueiam? Minha tendência seria criptografar xorando os dados do bloco com um hash muito simples do número do bloco, desfazendo / repetindo a operação xor se ela gerar um bloco único, usando ECB no resultado e xorando com o complemento do resultado de criptografar um bloco de um único [esse complemento só precisa ser calculado uma vez para cada chave]. Isso parece uma boa abordagem?
- @supercat: Essa ' s basicamente criptografia de disco , então você pode usar modos projetados para isso. Acredito que o XTS seja considerado uma boa escolha, embora, como todos os modos de criptografia de disco, tenha suas limitações (que você deve entender antes de usá-lo). Se possível, deve ser combinado com um MAC de algum tipo para defesa contra ataques ativos.
- @IlmariKaronen: acho que dizendo " don ' t usar ECB " é um pouco exagero. Eu entendo os riscos, mas muitas vezes (a menos que seu documento – o que você está criptografando – seja ' muito secreto e o adversário não ' tem muitos recursos, etc.), você deve estar bem.
- @giorgim: Há ' realmente não é um bom motivo para usar o ECB (exceto como um bloco de construção para outros modos). Praticamente qualquer biblioteca de criptografia fornece pelo menos o modo CBC ou CTR, e se não, eles ' são triviais para implementar você mesmo. Coloque um HMAC (ou CMAC) em cima disso e você ' estará pronto para ir.
- @giorgim: Mesmo se você não ' t tiver qualquer modo MAC ou AE disponível, usar CBC ainda é estritamente melhor do que ECB. Se você tiver uma função MAC, CBC-then-MAC é um modo AE perfeitamente bom.
Resposta
Você não deve usar o modo ECB porque ele criptografará blocos de mensagem idênticos (ou seja, a quantidade de dados criptografados em cada invocação da cifra de bloco) para blocos de texto cifrado idênticos. Isso é um problema porque revelará se os mesmos blocos de mensagens são criptografados várias vezes. A Wikipedia tem uma ilustração muito boa desse problema .
Comentários
- Comentários não são para discussão extensa; esta conversa foi movida para bate-papo .
Resposta
Como @Guut Boy mencionou, o ECB não é semanticamente seguro, no sentido de que se uma mensagem com blocos idênticos for criptografada, então um invasor obtém uma certa vantagem de ter informações em texto simples, observando apenas CipherText.
Use preferencialmente o modo CBC para criptografar mensagens longas. Este modo introduz um parâmetro adicional chamado IV (Valor inicial), você inicializa com o número da sessão para evitar ataques no caso de criptografar a mesma mensagem duas vezes.
Comentários
- IV significa vetor de inicialização, não valor inicial.
- 1. Este não é um bom conselho. Usando criptografia sem a autenticação desconsidera cerca de uma década de conselhos de criptógrafos. Melhor seria usar criptografia autenticada, como Ilmari Karonen recomenda. 2. Esta resposta parece ter sido substituída por Ilmari Karonen ' s resposta.
- Além disso, o fato é que o IV deve ser imprevisível para um invasor (ou seja, indistinguível de aleatório), e esta resposta diz que você deve usar o número da sessão, que geralmente não é aleatório.
Deixe uma resposta