En criptografía , la confusión y la difusión son dos propiedades de un cifrado seguro identificadas por Claude Shannon en su informe clasificado de 1945 Una teoría matemática de la criptografía . [1] Estas propiedades, cuando están presentes, trabajan juntas para frustrar la aplicación de la estadística y otros métodos de criptoanálisis .
La confusión en un cifrado simétrico consiste en oscurecer la correlación local entre la entrada ( texto simple ) y la salida ( texto cifrado ) al variar la aplicación de la clave a los datos, mientras que la difusión consiste en ocultar las estadísticas del texto simple al extenderlas sobre un área más grande de texto cifrado. [2] Aunque los cifrados pueden ser solo de confusión ( cifrado de sustitución , bloc de un solo uso ) o solo de difusión ( cifrado de transposición ), cualquier cifrado de bloque "razonable" utiliza tanto la confusión como la difusión. [2] Estos conceptos también son importantes en el diseño de funciones hash criptográficas y generadores de números pseudoaleatorios , donde la decorrelación de los valores generados es la característica principal. La difusión (y su efecto de avalancha ) también es aplicable a funciones hash no criptográficas .
La confusión significa que cada dígito binario (bit) del texto cifrado debe depender de varias partes de la clave, ocultando las conexiones entre ambas. [3]
La propiedad de confusión oculta la relación entre el texto cifrado y la clave.
Esta propiedad dificulta encontrar la clave a partir del texto cifrado y, si se cambia un solo bit de una clave, se verá afectado el cálculo de la mayoría o de todos los bits del texto cifrado.
La confusión aumenta la ambigüedad del texto cifrado y la utilizan tanto los cifrados de bloque como los de flujo.
En las redes de sustitución-permutación , la confusión la generan los cuadros de sustitución . [4]
La difusión significa que si cambiamos un solo bit del texto simple, entonces aproximadamente la mitad de los bits del texto cifrado deberían cambiar, y de manera similar, si cambiamos un bit del texto cifrado, entonces aproximadamente la mitad de los bits del texto simple deberían cambiar. [5] Esto es equivalente a la expectativa de que los esquemas de cifrado exhiban un efecto de avalancha .
El propósito de la difusión es ocultar la relación estadística entre el texto cifrado y el texto simple. Por ejemplo, la difusión garantiza que ningún patrón en el texto simple, como bits redundantes, sea evidente en el texto cifrado. [3] Los cifrados en bloque logran esto al "difundir" la información sobre la estructura del texto simple a lo largo de las filas y columnas del cifrado.
En las redes de sustitución-permutación, la difusión se realiza mediante cajas de permutación (también conocidas como capas de permutación [4] ). A principios del siglo XXI, se llegó a un consenso según el cual los diseñadores preferían que la capa de permutación estuviera formada por funciones booleanas lineales , aunque también se pueden utilizar funciones no lineales. [4]
En las definiciones originales de Shannon, la confusión se refiere a hacer que la relación entre el texto cifrado y la clave simétrica sea lo más compleja y compleja posible; la difusión se refiere a disipar la estructura estadística del texto simple en la mayor parte del texto cifrado . Esta complejidad generalmente se implementa a través de una serie bien definida y repetible de sustituciones y permutaciones . La sustitución se refiere al reemplazo de ciertos componentes (generalmente bits) con otros componentes, siguiendo ciertas reglas. La permutación se refiere a la manipulación del orden de los bits de acuerdo con algún algoritmo. Para ser efectiva, cualquier falta de uniformidad de los bits del texto simple debe redistribuirse en estructuras mucho más grandes en el texto cifrado, lo que hace que esa falta de uniformidad sea mucho más difícil de detectar.
En particular, para una entrada elegida aleatoriamente, si se invierte el bit i , entonces la probabilidad de que cambie el bit de salida j debe ser la mitad, para cualquier i y j (esto se denomina criterio de avalancha estricto ). De manera más general, se puede requerir que al invertir un conjunto fijo de bits se cambie cada bit de salida con una probabilidad de la mitad.
Uno de los objetivos de la confusión es hacer que sea muy difícil encontrar la clave, incluso si se tiene una gran cantidad de pares de texto simple y texto cifrado producidos con la misma clave. Por lo tanto, cada bit del texto cifrado debería depender de la clave completa y, en diferentes formas, de diferentes bits de la clave. En particular, cambiar un bit de la clave debería cambiar el texto cifrado por completo.
El diseño de un cifrado de bloques moderno utiliza tanto la confusión como la difusión, [2] donde la confusión cambia los datos entre la entrada y la salida aplicando una transformación no lineal dependiente de la clave (los cálculos lineales son más fáciles de revertir y, por lo tanto, son más fáciles de descifrar).
La confusión implica inevitablemente cierta difusión, [6] por lo que un diseño con una caja S de entrada muy amplia puede proporcionar las propiedades de difusión necesarias, [ cita requerida ] pero será muy costoso de implementar. Por lo tanto, los cifrados prácticos utilizan cajas S relativamente pequeñas, que operan en pequeños grupos de bits ("bundles" [7] ). Por ejemplo, el diseño de AES tiene cajas S de 8 bits, Serpent de 4 bits, BaseKing y 3-way de 3 bits. [8] Las cajas S pequeñas casi no proporcionan difusión, por lo que los recursos se gastan en transformaciones de difusión más simples. [6] Por ejemplo, la estrategia de camino ancho popularizada por el diseño de Rijndael , implica una transformación de mezcla lineal que proporciona alta difusión, [9] aunque las pruebas de seguridad no dependen de que la capa de difusión sea lineal. [10]
Una de las estructuras de cifrado más investigadas utiliza la red de sustitución-permutación (SPN), donde cada ronda incluye una capa de permutaciones no lineales locales ( S-boxes ) para la confusión y una transformación de difusión lineal (normalmente una multiplicación por una matriz sobre un campo finito ). [11] Los cifrados de bloques modernos siguen en su mayoría el modelo de capa de confusión/capa de difusión, y la eficiencia de la capa de difusión se estima utilizando el llamado número de rama , un parámetro numérico que puede alcanzar el valor de s haces de entrada para la transformación de difusión perfecta. [12] Dado que las transformaciones que tienen un alto número de ramas (y por lo tanto requieren una gran cantidad de paquetes como entradas) son costosas en su implementación, la capa de difusión a veces (por ejemplo, en el AES) está compuesta por dos subcapas, "difusión local" que procesa subconjuntos de los paquetes de manera albañil (cada subconjunto se transforma independientemente) y "dispersión" que hace que los bits que estaban "cerca" (dentro de un subconjunto de paquetes) se vuelvan "distantes" (se extienden a diferentes subconjuntos y, por lo tanto, se difunden localmente dentro de estos nuevos subconjuntos en la siguiente ronda). [13]
El estándar de cifrado avanzado (AES) tiene excelentes capacidades de confusión y difusión. Sus tablas de búsqueda de confusión son muy no lineales y son buenas para destruir patrones. [14] Su etapa de difusión extiende cada parte de la entrada a cada parte de la salida: al cambiar un bit de entrada, se modifican en promedio la mitad de los bits de salida. Tanto la confusión como la difusión se repiten varias veces para cada entrada para aumentar la cantidad de codificación. La clave secreta se mezcla en cada etapa para que un atacante no pueda precalcular lo que hace el cifrado.
Nada de esto sucede cuando una codificación simple de una etapa se basa en una clave. Los patrones de entrada fluirían directamente a la salida. Puede parecer aleatorio a simple vista, pero el análisis encontraría patrones obvios y el código podría descifrarse.