En criptografía , un ataque de distinción es cualquier forma de criptoanálisis sobre datos cifrados por un cifrador que permite a un atacante distinguir los datos cifrados de los datos aleatorios. [1] Los cifrados de clave simétrica modernos están diseñados específicamente para ser inmunes a este tipo de ataques. [2] En otras palabras, los esquemas de cifrado modernos son permutaciones pseudoaleatorias y están diseñados para tener indistinguibilidad del texto cifrado . Si se encuentra un algoritmo que puede distinguir la salida de la aleatoria más rápido que una búsqueda de fuerza bruta , entonces eso se considera una ruptura del cifrado.
Un concepto similar es el ataque de distinción de clave conocida , mediante el cual un atacante conoce la clave y puede encontrar una propiedad estructural en el cifrado, donde la transformación de texto simple a texto cifrado no es aleatoria. [3]
Para demostrar que una función criptográfica es segura, a menudo se la compara con un oráculo aleatorio . Si una función fuera un oráculo aleatorio, entonces un atacante no podría predecir ninguno de los resultados de la función. Si una función se puede distinguir de un oráculo aleatorio, tiene propiedades no aleatorias. Es decir, existe una relación entre diferentes resultados, o entre entrada y salida, que puede ser utilizada por un atacante, por ejemplo, para encontrar (una parte de) la entrada.
Ejemplo
Sea T una secuencia de bits aleatorios, generada por un oráculo aleatorio y S una secuencia generada por un generador de bits pseudoaleatorios . Dos partes utilizan un sistema de cifrado para cifrar un mensaje M de longitud n como el XOR bit a bit de M y los siguientes n bits de T o S respectivamente. La salida del cifrado utilizando T es verdaderamente aleatoria. Ahora bien, si la secuencia S no se puede distinguir de T, la salida del cifrado con S también parecerá aleatoria. Si la secuencia S es distinguible, entonces el cifrado de M con S puede revelar información de M.
Se dice que dos sistemas S y T son indistinguibles si no existe ningún algoritmo D, conectado a S o a T, capaz de decidir si está conectado a S o a T.
Un ataque de distinción se da mediante un algoritmo como D. En líneas generales, se trata de un ataque en el que se le da al atacante una caja negra que contiene una instancia del sistema atacado con una clave desconocida o un objeto aleatorio en el dominio que el sistema pretende emular. Si el algoritmo es capaz de determinar si el sistema o el objeto aleatorio está en la caja negra, se ha producido un ataque. Por ejemplo, un ataque de distinción a un cifrado de flujo como RC4 podría ser uno que determine si un flujo dado de bytes es aleatorio o generado por RC4 con una clave desconocida.
Itsik Mantin y Adi Shamir dieron ejemplos clásicos de ataques distintivos a un cifrador de flujo popular, quienes demostraron que el segundo byte de salida de RC4 estaba fuertemente sesgado hacia cero. [4] En otro ejemplo, Souradyuti Paul y Bart Preneel de COSIC demostraron que el valor XOR de la primera y la segunda salida de RC4 también es no uniforme. Es significativo que ambos sesgos teóricos anteriores se puedan demostrar mediante simulación por computadora. [5]