Solo para decirlo a mi manera, primero, un "oráculo" en criptografía se basa en el concepto de un oráculo mitológico; una persona con una línea directa a una deidad, y por lo tanto con acceso a información que los simples mortales no tienen. En la criptografía, los oráculos son "cajas negras" que pueden realizar tareas que serían difíciles para el atacante y, por lo tanto, pueden proporcionar información a un atacante que normalmente es difícil de obtener.
Un oráculo de relleno, específicamente, puede decirle al atacante si un mensaje que ingresa está correctamente rellenado (la mayoría de los modos de cifrado de bloque utilizan algún tipo de relleno de datos extraíble para garantizar que la longitud del mensaje sea un múltiplo exacto del tamaño del bloque del cifrado ). Para ello, intenta descifrar el mensaje y se comporta de manera diferente cuando un bloque se rellena o no se rellena correctamente, tales diferencias de comportamiento son visibles para el atacante. El oráculo de relleno suele ser un participante involuntario; el atacante normalmente secuestra una implementación de cifrado inicializada, alimentándolo con mensajes especialmente diseñados de su elección en lo que se conoce como un ataque de texto cifrado elegido.
Un tipo de ataque relacionado es un ataque de tiempo; es una forma en que una implementación de descifrado se puede convertir en un oráculo de relleno, midiendo el tiempo que lleva determinar si el bloque está correctamente rellenado. Algunos modos de cifrado, como CBC, se pueden descifrar en cualquier orden, por lo que algunas implementaciones descifran el último bloque primero para verificar el relleno del mensaje, en un intento de "fallar rápido" en los mensajes dañados. Sin embargo, un atacante puede usar la diferencia entre el tiempo que tarda en verificar el relleno y en intentar descifrar el mensaje completo para determinar cuál de los dos sucedió, incluso si el error que se le muestra al atacante es el mismo en ambos casos.
Para protegerse contra estos tipos de ataques, no debe haber una diferencia discernible en el comportamiento entre un intento de descifrar un mensaje que no esté correctamente rellenado en comparación con uno que sí lo está. La forma más conocida de hacerlo es incorporar una suma de comprobación segura conocida como Código de autenticación de mensaje. Este MAC se produce normalmente mediante un "hash con clave" seguro, que utiliza la misma clave que cifró el mensaje. El mensaje se cifra primero, y luego el texto cifrado, junto con la información sobre cómo se cifró, como el algoritmo de cifrado, el modo de cifrado, el tamaño de la clave, el tamaño del bloque y el IV, se procesa mediante el uso del algoritmo MAC y la misma clave.
Para descifrar, el algoritmo primero vuelve a calcular el MAC dado el texto cifrado y la información de cifrado compartida entre las dos computadoras. Si el MAC computado no coincide con el que se incluye con el texto cifrado, el descifrado falla; o el mensaje, el MAC o ambos se han cambiado en el tránsito por algún medio, ya sea benigno (corrupción de datos) o malévolo (intento de ataque).
Se cree que las posibilidades de que un atacante, al no saber la clave, sea capaz de cambiar el texto cifrado y su MAC de manera consistente sean difíciles, y con eso me refiero a aproximadamente 1 en 2 ^ (tamaño de clave) posibilidad, por lo que la estrategia de cambiar sistemáticamente el mensaje se vuelve menos eficiente que simplemente intentar cada clave posible. Además, debido a que la misma operación, que casi siempre lleva el mismo tiempo, puede detectar cualquier problema de datos posteriores al cifrado que haría que el mensaje no fuera válido, un atacante no puede distinguir la diferencia hecha por cualquier cambio sistemático en el texto cifrado y MAC ; o coincide (es extremadamente improbable; vea arriba) o no ( mucho es más probable).