¿Cómo se implementan en el mundo real los ataques de texto simple elegidos contra el BCE?

9

Al leer sobre los ataques contra AES, he visto innumerables ejemplos de por qué el BCE es malo y la lógica que lo respalda, pero no puedo entender cómo funcionan estos ataques en el mundo real.

Entonces, el gran ejemplo que veo que se usa mucho es un token de sesión que está cifrado con AES-ECB, y como un token de sesión (cookie, por ejemplo) podemos inyectar repetidamente el texto plano elegido y monitorear los cambios en el texto cifrado, asumiendo que el token de sesión siempre está cifrado bajo la misma clave. Pero, ¿cómo podemos inferir el texto en claro correcto?

Por ejemplo, digamos que inyecto 64 A como mi nombre de usuario, y en el volcado hexadecimal de la cookie que se devuelve puedo ver el indicador que repite bloques de 16 bytes que indican de manera bastante concluyente que el cifrado es AES-ECB. Puedo cambiar las últimas 16 A para que, en cambio, sean 15 A's a B, así que ahora sé que no solo se ve el texto cifrado para 16 A's, sino también cómo se ve el texto cifrado para todas las A y B.

Pero después de eso me quedo atascado y no puedo ver cómo este ataque se expande para ser práctico. Hasta ahora, todo lo que puedo ver es que sabemos cómo se ve el último byte, y un montón de A's.

Las buenas explicaciones que he visto hasta ahora han sido: enlace a pesar de que me pierde alrededor de los 42 minutos, y enlace

EDITAR: Después de pensar en el problema, creo que una mejor manera de formular esta pregunta sería: suponiendo que el bloqueo que controlamos es una longitud arbitraria en el texto cifrado, y el texto cifrado total es una longitud arbitraria, ¿cómo se calcula el longitud del prefijo (el número de A) que se inyectará para que pueda descifrar cada byte sucesivo?

EDITAR: La edición anterior que forma una adición a la pregunta, "cómo calculamos la longitud del prefijo" es en realidad inexacta. Descubrí que es trivial calcular la longitud del prefijo del texto cifrado que controlamos no , y el ataque del BCE, tal como lo he visto, está diseñado para descifrar el texto que viene explícitamente después de el texto cifrado del texto plano elegido.

    
pregunta AlexH 29.06.2014 - 17:43
fuente

1 respuesta

12

Parece que estás bien encaminado para resolver esto. Nunca he explotado el texto simple elegido por el BCE, pero recientemente hice un exploit oracle de relleno, así que tengo una idea de cómo harías esto.

La idea básica es la fuerza bruta de un byte a la vez.

Supongamos que tenemos un ejemplo simple en el que no hay otros datos insertados, así que solo es "[username] [secreto]". Primero, establezca su nombre de usuario a 16 A's. Luego, cambia el último carácter a B. De hecho, revise los 256 valores posibles para el byte final y mantenga un registro de los textos cifrados.

Ahora configura tu nombre de usuario a 15A. El bloque de texto simple estará formado por tus 15 A y un byte del secreto. El texto cifrado coincidirá con uno de los textos cifrados que generó anteriormente, y de eso puede deducir un byte del secreto.

Ahora establezca su nombre de usuario en un valor de 16 caracteres: 14 A, el byte de texto sin formato que conoce, y recorra los 256 valores posibles para el byte final. Graba todos los textos cifrados. El siguiente paso es configurar su nombre de usuario a 14 A, y nada más. Del texto cifrado generado puede deducir el segundo byte del secreto.

¡Continúa y muy pronto tendrás el secreto completo!

En un escenario práctico, es probable que haya otras cosas que dificulten la explotación, pero esta es la idea básica.

    
respondido por el paj28 29.06.2014 - 20:24
fuente

Lea otras preguntas en las etiquetas