¿Qué es un padding oracle attack?

Autor: | Última modificación: 1 de agosto de 2022 | Tiempo de Lectura: 4 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

¿Sabes qué es un padding oracle attack? Se trata de un ciberataque criptográfico cuyo concepto es bastante simple, pero a la vez muy poderoso y demuestra que es posible romper un criptosistema a partir de una cantidad mínima de información.

En este post, te explicaremos qué es un padding oracle attack, en qué principios se basa y cómo funciona su proceso.

¿Qué es un padding oracle attack?

Un padding oracle attack es un ciberataque criptográfico para el modo cifrado CBC que permite descifrar un mensaje completo a partir de una dosis mínima de información acerca de su padding.

El padding oracle attack se basa en una vulnerabilidad del modo CBC que consiste en que un sistema dé la retroalimentación de si el padding de un mensaje es correcto o no. Se trata de una cantidad mínima de información sobre el mensaje y parece no poner en riesgo su contenido. Lo cierto es que si este dato se usa de la forma adecuada, sirve para desencriptar todo un mensaje cifrado con CBC.

Para entender qué es un padding oracle attack es necesario saber cómo funciona el modo de operación de cifrado por bloques CBC y qué es el padding en criptografía. Por eso, para explicarte cómo funciona un padding oracle attack, primero haremos un breve repaso de estos conceptos.

¿Cómo funciona el modo de cifrado CBC?

El modo de operación de cifrado por bloques CBC (Cipher-block chaining) es un algoritmo que permite encriptar un conjunto de bloques a partir de un valor conocido como vector de inicialización. CBC funciona del siguiente modo:

  1. Al primer bloque de texto plano se le hace una operación XOR con el vector de inicialización (IV).
  2. Al resultado de la operación anterior se le encripta con el algoritmo de bloque para generar el primer bloque de texto cifrado.
  3. Al primer bloque de texto cifrado se le hace una operación XOR con el segundo bloque de texto plano.
  4. El resultado de la operación anterior se encripta con el algoritmo de bloque para generar el segundo bloque de texto cifrado.
  5. Se repite el proceso la cantidad de veces que sea necesaria hasta cifrar el mensaje completo.
  6. Los bytes de información que falten para completar el tamaño del último bloque se rellenan con un sistema de padding.

Es decir que, en el modo CBC, a cada bloque de texto plano se le hace una operación XOR con el bloque de texto cifrado anterior y, para comenzar el algoritmo, se utiliza un vector de inicialización (IV).

🔴 ¿Quieres entrar de lleno a la Ciberseguridad? 🔴

Descubre el Ciberseguridad Full Stack Bootcamp de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada

👉 Prueba gratis el Bootcamp en Ciberseguridad por una semana

Ahora bien, el uso de un IV hace que el modo CBC sea más seguro que su antecesor, el ECB (electronic code-book), pero esto no implica que esté exento de vulnerabilidades. De hecho, uno de sus principales fallos es ser vulnerable al ataque de cambio de bits o bit-flipping, que se utiliza en el padding oracle attack.

Padding

Otro concepto que es necesario conocer para entender qué es un padding oracle attack es qué es el padding.

El padding es el sistema que utiliza un modo de operación de cifrado para rellenar los bits que hacen falta para completar el último bloque del mensaje. De hecho, en la mayoría de casos, cuando la cantidad de bits es exacta igualmente se incluye un bloque completo de padding al final para indicar que el mensaje ha terminado.

El sistema de padding que utiliza el modo CBC es el Public Key Cryptography Standard (PKCS #7), el cual funciona de la siguiente forma:

  • Si solo falta un byte de padding, se utiliza el valor 01.
  • Si faltan dos bytes, se utiliza el valor 0202.
  • Si faltan tres bytes, se utiliza el valor 030303.

Y así sucesivamente. Por estar expresado en sistema hexadecimal:

  • Si faltan quince bytes, se utiliza el valor 0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f. Es decir, la función chr(15).
  • Si los bytes son exactos, se agrega todo un nuevo bloque de dieciséis bytes con el valor 10101010101010101010101010101010. Es decir, la función chr(16).

¿Cómo funciona el padding oracle attack?

Un padding oracle attack se basa en el simple hecho de saber si el padding de un mensaje es correcto o no, ya que los sistemas con CBC podrían indicarnos este dato. Con solo saber esto y hacer un ataque de cambio de bits, sería posible descubrir todo el contenido del mensaje. A eso nos referimos con qué es un padding oracle attack, que funcionaría de la forma que explicamos a continuación.

Supón que consigues un paquete de datos encriptado y que sigues el siguiente proceso:

  1. Cambias el último byte de información del penúltimo bloque del mensaje. Esto generará un bloque de texto plano basura, pero por el modo en el que funciona CBC, también tendrá un impacto en el bloque de texto plano anterior. Allí, solamente cambiará el byte que modificaste.
  2. Pruebas las 256 opciones de entrada posibles para dicho byte, hasta que el programa te informe de que has ingresado el padding correcto.
  3. A partir de este información, puedes descifrar ese byte de información, debido a las propiedades de la función XOR que se ejecuta entre el texto cifrado y el texto plano.
  4. Finalmente, para desencriptar todo el mensaje, se repite el proceso byte por byte, aumentando de 1 en 1la cantidad del valor anterior de cada uno.

¿Cómo aprender más?

Ahora sabes qué es un padding oracle attack y cómo funciona este ciberataque criptográfico. Si quieres aprender más y convertirte en experto en ciberseguridad no puedes perderte nuestro Ciberseguridad Full Stack Bootcamp, con el que podrás especializarte en hacking ético en menos de 7 meses. ¡Apúntate ya!

¡CONVOCATORIA ABIERTA!

Ciberseguridad

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado