¿Hay consecuencias reales de los ataques de relleno de oráculo?
Estoy escribiendo un programa que cifra datos en Python y escuché acerca de los ataques de relleno de Oracle , pero creo que están sobrevalorados (quiero decir, ¿cuáles son los usos del mundo real?) Incluso para las implementaciones antiguas que son vulnerables (las que dicen si el relleno es correcto o incorrecto como SSLv3).
Porque:
- Si todo lo que necesito son dos textos cifrados $c(n-1)$, $c(n)$ que son los dos últimos bloques de mensajes cifrados, y un servidor para decirme si el relleno de descifrado $c(n)$es correcto o lo que sea, ¿no significa eso que el servidor simplemente descifra todo lo que le envías (quiero decir, envía todo el mensaje cifrado como lo recibiste y lee el resultado)? Quiero decir, este es el error del servidor que no necesita una clave en primer lugar y verifica si es correcta.
- Supongamos que todo lo que tenemos que hacer es enviar esos dos mensajes cifrados para conocer y descifrar el último bloque (el bloque de relleno). Esto solo funciona porque el texto plano de relleno se conoce o al menos no es aleatorio o por cualquier motivo.
Pero, ¿qué pasa con, digamos, c2 y c3 que están en el medio de todo el mensaje? Conocemos c3 y c2, pero no sabemos y nunca conoceremos ni p3 ni p2 (texto plano), ni el estado intermedio IS3 ; es decir, no podemos XOR c2 con is3 para obtener p3 , por lo que este ataque creo que solo nos permite descifrar el bloque de relleno con lo único nuevo que realmente sabíamos que era un estado intermedio del bloque de relleno.
Estoy preguntando si este ataque es solo uno sin implicaciones en el mundo real y sin capacidades reales de descifrado de datos (datos reales).
Respuestas
Quiero decir que este es el error del servidor que no necesita una clave en primer lugar y verifica si es correcta :)
¿Que quieres decir con eso? La clave debe ser la correcta, y los ataques de relleno de Oracle realmente cambian el texto cifrado con esa clave en el otro lado para realizar el ataque.
pero ¿qué pasa con c2, c3 que están en el medio de todo el mensaje, sabemos c3 y c2 pero no sabemos y nunca sabremos p3 (texto sin formato, por supuesto) ni el estado intermedio IS3?
No, un ataque de relleno de Oracle puede descifrar completamente un mensaje. Esto es precisamente porque el XOR influye en el siguiente bloque.
Tenga en cuenta que los ataques de oráculo de relleno son solo una forma de ataque de oráculo de texto sin formato . Por ejemplo, también puede realizar ataques de Oracle de texto sin formato en XML-enc, incluso sin usar el relleno en sí.
Estoy preguntando si este ataque es solo uno sin implicaciones en el mundo real y sin capacidades reales de descifrado de datos (datos reales).
Sí, eso es total y completamente incorrecto. Un ataque de oráculo de relleno puede descifrar todo el mensaje usando 128 intentos por byte, y otros oráculos de texto plano pueden ser incluso más efectivos.
Además de eso, hacer que el receptor acepte un texto sin formato modificado es posiblemente tan peligroso como perder la confidencialidad. Por esa razón, debe utilizar cifrado autenticado, o más bien un protocolo que utilice cifrado autenticado en lugar de CBC no autenticado.
Estoy preguntando si este ataque es solo uno sin implicaciones en el mundo real y sin capacidades reales de descifrado de datos (datos reales).
El ataque Lucky Thirteen es un ataque del mundo real contra TLS. Fue un ataque serio para las versiones actuales del protocolo TLS (TLS 1.0 en ese momento; TLS 1.1 y 1.2 existían pero tuvieron muy poca adopción). Así que no, los ataques de relleno de Oracle funcionan absolutamente en el mundo real.
(los que dicen si el relleno es correcto o incorrecto, como sslv3).
Lucky Thirteen afecta a versiones hasta TLS 1.2, que es la versión utilizada para la mayoría de las comunicaciones seguras en la actualidad. Solo afecta a los conjuntos de cifrado que usan CBC, que están obsoletos precisamente debido a este ataque, pero la mayoría de los puntos finales aún lo permiten, incluso si prefieren los conjuntos de cifrado AEAD. Muchas, pero no todas, las implementaciones populares de TLS tienen código que previene el ataque Lucky Thirteen (a expensas del rendimiento). Entonces, no, los ataques de relleno de Oracle son relevantes para los protocolos que todavía se usan ampliamente.
Estoy escribiendo un programa que encripta datos en Python y escuché sobre los ataques de relleno de Oracle, pero creo que están sobrevalorados
Bueno, es cierto que no debes preocuparte por los ataques de Oracle. Pero la razón por la que no debes preocuparte es que, dado que son bien conocidos, sabemos cómo defendernos de ellos: no uses relleno. Y ningún modo moderno de cifrado utiliza relleno. Simplemente use cualquier modo AEAD común, como GCM, CCM o ChaCha20 + Poly1305. O incluso mejor, use una biblioteca de alto nivel como NaCl / libsodium ( PyNaCl en Python): si está escribiendo las letras AES en su código, lo está haciendo mal .