Existem consequências reais de ataques de oráculo de preenchimento?

Aug 18 2020

Estou escrevendo um programa que criptografa dados em Python e ouvi falar sobre ataques de oráculo de preenchimento , mas acho que eles são superestimados (quero dizer, quais são os usos no mundo real?) Mesmo para as implementações antigas que são vulneráveis ​​(aquelas que dizem se o preenchimento está certo ou errado, como SSLv3).

Porque:

  1. Se tudo que eu preciso são dois textos cifrados $c(n-1)$, $c(n)$ quais são os dois últimos blocos de mensagens criptografadas, e um servidor para me dizer se o preenchimento do $c(n)$está correto ou o que quer que seja, isso não significa que o servidor apenas descriptografa tudo o que você enviar para ele (quero dizer, apenas envie a mensagem criptografada inteira conforme você a recebeu e leia a saída). Quer dizer, este é o bug do servidor que não pega uma chave em primeiro lugar e verifica se está correto.
  2. Vamos supor que tudo o que precisamos fazer é enviar essas duas mensagens criptografadas para saber e descriptografar o último bloco (o bloco de preenchimento). Isso só funciona se o texto simples de preenchimento for conhecido ou, pelo menos, não aleatório ou qualquer outro motivo.

Mas e quanto a, digamos, c2 e c3, que estão no meio de toda a mensagem? Conhecemos c3 e c2, mas não sabemos e nunca saberemos p3 ou p2 (texto simples), nem o estado intermediário IS3 ; ou seja, não podemos executar o XOR c2 com is3 para obter p3 , então esse ataque eu acho que apenas nos permite descriptografar o bloco de preenchimento com a única coisa nova que realmente conhecíamos é um estado intermediário de bloco de preenchimento.

Estou perguntando se esse ataque é apenas um ataque sem implicações no mundo real e sem recursos de descriptografia de dados reais (dados reais).

Respostas

7 MaartenBodewes Aug 18 2020 at 23:14

Quero dizer, este é o bug do servidor que não leva uma chave em primeiro lugar e verifique se está correto :)

O que você quer dizer com isso? A chave deve ser a correta, e os ataques de oráculo de preenchimento realmente alteram o texto cifrado criptografado com aquela chave no outro lado para executar o ataque.

mas que tal dizer c2, c3 que estão no meio de toda a mensagem, sabemos c3 e c2, mas não sabemos e nunca saberemos p3 (texto simples, é claro) nem estado intermediário IS3

Não, um ataque de oráculo de preenchimento é capaz de descriptografar completamente uma mensagem. Isso ocorre exatamente porque o XOR influencia o próximo bloco.

Observe que os ataques de oráculo de preenchimento são apenas uma forma de ataque de oráculo de texto simples . Por exemplo, você também pode executar ataques de oráculo de texto simples em XML-enc, mesmo sem usar o próprio preenchimento.

Estou perguntando se este ataque é apenas um sem implicações no mundo real e sem recursos de descriptografia de dados reais (dados reais).

Sim, isso está totalmente errado. Um ataque de oráculo de preenchimento pode descriptografar a mensagem inteira usando 128 tentativas por byte, e outros oráculos de texto simples podem ser ainda mais eficazes.

Além disso, fazer com que o receptor aceite um texto simples alterado é possivelmente tão perigoso quanto perder a confidencialidade. Por essa razão, você deve usar a criptografia autenticada - ou melhor, um protocolo que utiliza autenticada criptografia em vez de CBC não autenticado.

5 Gilles'SO-stopbeingevil' Aug 19 2020 at 07:33

Estou perguntando se este ataque é apenas um sem implicações no mundo real e sem recursos de descriptografia de dados reais (dados reais).

O ataque Lucky Thirteen é um ataque do mundo real contra TLS. Foi um ataque sério para as versões então atuais do protocolo TLS (TLS 1.0 na época - TLS 1.1 e 1.2 existiam, mas tinham muito pouca adoção). Portanto, não, os ataques de oráculo de preenchimento funcionam absolutamente no mundo real.

(aqueles que dizem se o preenchimento está certo ou errado como sslv3).

Lucky Thirteen afeta versões até TLS 1.2, que é a versão usada para a maioria das comunicações seguras hoje. Afeta apenas suítes de criptografia que usam CBC, que foram descontinuados precisamente por causa desse ataque, mas a maioria dos endpoints ainda permite isso, mesmo que prefiram conjuntos de criptografia AEAD. Muitas, mas não todas as implementações TLS populares, têm código que impede o ataque do Treze da Sorte (em detrimento do desempenho). Portanto, não, ataques de oráculo de preenchimento são relevantes para protocolos que ainda estão em uso generalizado.

Estou escrevendo um programa que criptografa dados em python e ouvi falar de ataques de oráculo de preenchimento, mas acho que eles são superestimados

Bem, é verdade que você não deve se preocupar com ataques de oráculo de preenchimento. Mas o motivo pelo qual você não deve se preocupar é que, como eles são bem conhecidos, sabemos como nos defender deles: não use preenchimento. E nenhum modo moderno de criptografia usa preenchimento. Basta usar qualquer modo AEAD comum, como GCM, CCM ou ChaCha20 + Poly1305. Ou melhor ainda, use uma biblioteca de alto nível como NaCl / libsodium ( PyNaCl em Python): se você está digitando as letras AES em seu código, está fazendo errado .