Teoría de la Información y Teoría de Códigos Algoritmo DES Y Criptoanálisis Diferencial Carlos Sánchez Sánchez 3º de Grado en Ingeniería Informática Índice 1. Introducción 5 2. Cifrado por Bloques 6 3. El Algoritmo DES 8 4. Red De Feistel 9 5. Función de Feistel 12 6. S-Boxes 17 7. Generación de Claves 18 8. Fundamentos del Criptoanálisis Diferencial 21 9. Criptoanálisis Diferencial de las S-Boxes 23 10. Criptoanálisis Diferencial Completo (DES Simplificado) 27 11. Obtención de la Clave Completa 31 12. Resultados del Criptoanálisis Diferencial 32 13. Otros Ataques al Algoritmo DES 34 14. Mejoras al Algoritmo DES 35 Anexo A: Código en Mathematica 37 Anexo B: ablas S-Boxes 38 Bibliografía 40 40 3 1. Introducción En este trabajo se realizará una breve introducción al cifrado por bloques y las técnicas que se usan para después pasar a un estudio del algoritmo de cifrado Data Encryption Standard (DES) y una introducción al criptoanálisis diferencial. Una de las principales motivaciones de este trabajo es la importancia el algoritmo DES por ser el inicio de una gran cantidad de trabajos académicos que dieron como resultado el desarrollo del conocimiento sobre el cifrado de bloques y su criptoanálisis. Este algoritmo, aunque hoy se considera inseguro fue un estándar en los Estados Unidos durante más de 25 años. En un primer lugar se explicará qué consiste el cifrado por bloques para después pasar a las características propias del algoritmo DES. Una vez conocido el algoritmo se hará una introducción al criptoanálisis diferencial, un ataque a los códigos de bloques que apareció como un ataque al algoritmo DES. Además de explicar sus fundamentos se realizará una muestra del ataque a una versión simplicada del algoritmo. Finalmente se hará referencia a otros posibles ataques al algoritmo y algunas de las modicaciones y mejoras que se pueden sobre el DES. Además de la parte teórica se adjunta el código necesario en Mathematica tanto para cifrar/descifrar como para obtener la clave de la versión simplicada mediante el criptoanálisis diferencial. 5 2. Cifrado por Bloques El algoritmo DES es un algoritmo de cifrado simétrico y de bloques. Es simétrico ya que se utiliza la misma clave para cifrar y descifrar, a diferencia del cifrado asimétrico donde aparece una clave pública que cualquiera puede conocer y una privada que solo conocerá el destinatario. Al existir una única clave, esta solo podrá ser conocida por aquellas personas que puedan leer los mensajes. El hecho de ser un algoritmo de bloques signica que la información que deseamos cifrar se dividirá en bloques y se aplicará el algoritmo a cada uno de ellos. En contraposición a estos existen los algoritmos de ujo, en los que se cifra bit a bit. Una consecuencia del cifrado de bloques es que cifrar un bloque siempre tendrá el mismo resultado. Es decir, si usaramos bloques de 4 letras y ciframos el mensaje Hola, soy Pedro, que dividido en bloques sería Hola, , so, y Pe, dro. tendríamos el resultado: Hola = c1 , so = c2 y Pe = c3 dro. = c4 Y si posteriormente ciframos el mensaje Chao, soy Pedro, el resultado para los tres últimos bloques coincidiría: Chao = c5 , so = c2 y Pe = c3 dro. = c4 El descifrado se hará de forma similar. A cada bloque se le aplicará la función inversa, que dará como resultado el texto en plano para ese bloque. A lo anterior se le denomina cifrado invariante. Existen algunas soluciones que permiten que se realice un cifrado de varios bloques y evitar lo anterior, los veremos más adelante. Visto lo anterior será necesario denir un tamaño de bloque, aunque en el ejemplo lo hemos hecho por número de letras, el tamaño se dará habitualmente en bits. En caso de que el mensaje a transmitir no fuera múltiplo del tamaño de bloque se rellenaría con bytes extra. Para conseguir esto se suele utilizar un estándar. En caso de que el tamaño de bloque sea menor de 256 se suele utilizar el denido en PKCS#5, que es un estándar PKCS (Public-Key Cryptography Standards). [2] Según el estándar PKCS#5 si faltan n bytes para completar el bloque se añadirán n bytes con valor binario n. Por ejemplo, para cifrar el mensaje 0010 con un bloque de tamaño 3 bytes se añadirían 2 bytes con valor dos (00000010). Como en otros cifrados simétricos se tendrá una clave que será necesaria tanto en el cifrado como en el descifrado de los mensajes, llamaremos a esta clave K. 6 Teniendo en cuenta esto podemos denir el cifrado con un algoritmo de bloque M de tamaño n con una clave K de k bits como una función: E(M, K) : {0, 1}n × {0, 1}k → {0, 1}n Que dará como resultado un mensaje cifrado C . El descifrado será la función inversa de la anterior. D(C, K) = E −1 (C, K) : {0, 1}m × {0, 1}k → {0, 1}n Que dará como resultado, de nuevo, el valor M . Dado que es una función que da un valor de {0, 1}n a partir de otro también de {0, 1}n de lo anterior se tiene como resultado que cifrar un mensaje con la clave K siempre será una permutación de elementos de {0, 1}n . Hay, por tanto, 2n ! permutaciones posibles. Actualmente los diseños de cifrado por bloques suelen ser iterativos (se denominan iterative product cipher ), de modo que se combinan varias transformaciones simples, consiguiendo un resultado más seguro que el de sus componentes. Estas transformaciones serán una combinación de sustituciones, permutaciones y operaciones de aritmética modular. Este concepto fue presentado por Shannon en su publicación Communication Theory of Secrecy Systems (1949)[3]. 7 3. El Algoritmo DES El algoritmo DES, llamado así por sus siglas en inglés (Data Encryption Standard ) fue el estándar de encriptación de datos en Estados Unidos a partir de 1976. Actualmente, como ya se adelantó, el algoritmo no se considera seguro y ha sido ya sustiuido, en concreto por el algoritmo AES. Estudiaremos sus principales características técnicas y trataremos de conocer los motivos reales de preocupación que hay ante este algoritmo, además de algunos ataques, centrándonos en el criptoanálisis diferencial. El diseño del algoritmo fue realizado a principios de los 70 para satisfacer las necesidades de seguridad del gobierno de los EEUU. Entre 1973 y 1974 un equipo de IBM desarrollo el algoritmo DES basándose en el cifrador de Lucifer[6]. En un principio fue polémico dado que parte de su diseño no se hizo público, utilizaba una clave corta y fue una de las primeras propuestas de cifrado de bloques simétrico, además de haber sido modicada la propuesta inicial por la Agencia Nacional de Seguridad de Estados Unidos (NSA), según indica uno de los autores[4]. Sobre el algoritmo propuesto, durante 1975, Martin Hellman y Whiteld Die (autores del protocolo Die-Hellman) alegaron que la clave era demasiado corta y criticaron la modicación de la NSA. Entre estos cambios se incluía la reducción de la clave, lo que se sospechó que podía permitir a las agencias de inteligencia leer fácilmente mensajes cifrados . Pese a las alegaciones, durante 1976 fue aprobado el algorítmo DES como estándar y continuó siéndolo hasta 2002 cuando fue sustituido por el algoritmo AES. Pese a esto, algunas modicaciones del DES continúan utilizándose. Dado que es un algoritmo de cifrado por bloques, habrá que dar los parámetros propios de estos, el tamaño de bloque y el de clave. n = 64. El tamaño k = 64. El tamaño es de 64 bits. de la clave es de 64 bits, sin embargo, 8 de estos bits no se usarán en el cifrado, por lo que el valor real de la clave será de 48 bits. de bloque El algoritmo DES, igual que su predecesor Lucifer, se basa en una técnica denominada cifrador de Feistel. Los detalles de su implementación han sido obtenidos de la publicación por parte del Instituto Nacional de Estándares y Tecnología (NIST)[5]. 8 4. Red De Feistel El cifrador de Feistel, cuyo desarrollo comenzó Hosrst Feistel, establece la estructura que utilizan diversos algoritmos de cifrado. En el cifrado de Lucifer apareció por primera vez, y después, con algunas modicaciones, se utilizó en el DES. Consiste en un cifrado de bloques por iteración, en los que, como ya se ha dicho, se suceden una serie de operaciones sobre el texto en claro que permiten obtener un texto cifrado con mayor seguridad. Algunas ventajas de esta técnica son que el algoritmo de cifrado y el de descifrado sean prácticamente idénticos y que su implementación es muy sencilla en hardware. Se sigue una estructura denominada Red de Feistel. El bloque a cifrar se divide en dos partes de igual tamaño y a cada una de estas se le irán realizando las operaciones necesarias. Si nuestro mensaje a cifrar es un bloque de n bits M = m0 m1 . . . mn−1 (n par) obtendremos dos bloques R0 = m0 m1 . . . mn/2−1 y L0 = mn/2 mn/2+1 . . . mn−1 . A partir de aquí, estas dos partes se irán combinando mediante distintas operaciones, entre las que destaca la función Feistel (F ). En cada paso esta función dependerá de una clave Ki , que se puede obtener a partir de la clave K denida para el cifrado. Tanto la forma de obtener las claves Ki como la función F dependerán del algoritmo concreto y los estudiaremos más adelante para el algoritmo DES. La forma de actuar será la siguiente. En cada paso se tomará : Li+1 = Ri Ri+1 = L1 ⊗ F (K i , , Ri ) Para cada i = 0, ...r, siendo r el número de pasadas que se darán. 9 Se continuaría haciendo lo mismo para el número de pasadas deseado. 10 Serán necesarias r claves y el resultado nal será el mensaje cifrado C de n bits. Este mensaje sería: C = c0 c1 . . . cn−1 = Lr−1 Rr−1 Y: Lr−1 = c0 c1 . . . cn/2−1 = Rr−2 = Lr−3 ⊗ F (Kr−3 , Rr−3 ) = . . . Rr−1 = cn/2 . . . cn−1 = Lr−2 ⊗ F (Kr−2 , Rr−2 ) = Rr−3 ⊗ F (Kr−2 , Lr−3 ⊗ F (Kr−3 , Rr−3 )) = ... Que en último lugar dependen de R0 y L0 (es decir,M ) y K0 , . . . , Kr−2 (es decir, la clave K ), como era de esperar para un cifrado de bloques. En el caso concreto del algoritmo DES el número de pasadas es 16 (r = 16) y cada bloque Ri y Li será de 64/2 = 32bits. Las claves Ki serán cada una de 48 bits. 11 5. Función de Feistel Esta es la función de Feistel que se utiliza en el algoritmo DES. Deberá cumplir las propiedades de confusión y difusión. Estas fueron propuestas por Shannon ([3] p.708-709) y tienen como n proteger frente a analisis estadísticos, aumentando la complejidad de un posible ataque. La difusión es el hecho de que la estructura del mensaje sea disipada, es decir, que la parte afectada por un bit sea repartida en una cadena lo más larga posible y que se mezcle con la inuencia de un número mayor de bits. Con esto se consigue que el enemigo deba interceptar una cantidad mucho mayor de datos para llevar a cabo un ataque y que el trabajo para descubrirlo sea mayor. La confusión tiene como n hacer que la relación entre la clave y el cifrado sea muy compleja y por tanto más difícil de descubrir. La función de Feistel se divide en cuatro partes: Expansión. Recibe uno de los bloques de 32 bits y lo transforma en un bloque de 48 bits. Esta ampliación es necesaria ya que la clave Ki será también de 48 bits. Esto se conseguirá simplemente duplicando algunos de los bits recibidos según la tabla siguiente. Los números indican cada uno de los 32 bits y el resultado será la concatenación de las siguientes las, siendo las celdas en azul los bits añadidos: E 32 4 8 12 16 20 24 28 1 5 9 13 17 21 25 29 2 6 10 14 18 22 26 30 3 7 11 15 19 23 27 31 4 8 12 16 20 24 28 32 5 9 13 17 21 25 29 1 En la especicación del algoritmo esta operación se representa con la letra E. Por lo tanto para un bloque M se tendría E(M ). Si fuera M = 10110110100001100110010101111010. El resultado de la operación sería: E 0 1 0 0 0 0 1 1 1 0 1 0 0 0 0 1 0 1 0 1 1 1 1 0 1 1 0 1 1 0 1 1 O, utilizando el código que se ha realizado: 12 1 0 0 0 0 1 1 0 0 1 0 0 0 0 1 1 XOR con la clave. Se hará la operación XOR entre los 48 bits resultantes y la clave. Tomemos como clave K = 111010001110001101100011011011011011011000101101 Tendremos como resultado de esta operación: K ⊗ E(R) = 101100011110001101101100110110010111110010011000 Sustitución. Los 48 bits que obtenemos serán divididos en 8 bloques de 6 bits (como se ve en la tabla anterior, siendo cada la de la tabla un bloque) y a cada uno se aplicará una operación de sustitución que da como resultado 4 bits. La función de sustitución no es lineal y en ello radica la seguridad del algoritmo, pues es el único elemento con esta característica. Si no fuera así el algoritmo completo sería lineal y se podría romper de forma sencilla. Cada uno de los operadores que realiza la sustitución se denomina S-box (substitution box ) y entre las 8 darán de nuevo 32 bits. La tabla para la primera de las S-Boxes es: S-Box 1 0 1 2 3 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 14 0 4 15 4 15 1 12 13 7 14 8 1 4 8 2 15 2 6 9 11 13 2 1 8 1 11 7 3 10 15 5 10 6 12 11 6 12 9 3 2 14 13 4 12 11 7 14 5 9 3 10 9 5 10 0 0 3 5 6 7 8 0 13 El resto de S-Boxes pueden ser consultadas en el Anexo II: Tablas S-Boxes, no se incluyen aquí por motivos de espacio. En este caso la función que realiza la sustitución será Si para la S-Box i. Sea B la entrada la salida será Si (B) Para una entrada de 6 bits B = b0 b1 b2 b3 b4 b5 el primer y último bit b0 b5 (22 = 4 valores entre 0 y 3) representan la la a elegir. Los cuatro centrales representan la columna (24 = 16 valores entre 0 y 15). Como se ve la tabla es de 4 × 16, por lo que incluye 64 celdas, pero los valores están entre 0 y 15 (24 = 16 valores) ya que que la salida debe ser de 4 bits. 13 Para la entrada que obtuvimos de la operación XOR, 101100, se tendría la la 2 (10 = 2) y la columna 6 (0110 = 6). Por tanto la salida será Si (7) = 2, 0010 en binario. Repitiendo lo mismo para el resto y concatenando el resultado, tendremos: Permutación. Finalmente se permuta la unión de los bloques de 4 bits dando los 32 bits nales. Esta operación se hará de forma que los bits de salida de cada S-Box estén en una S-Box diferente la siguiente iteración. La permutación de los 32 bits es la indicada por la tabla que se muestra a continuación. P 16 1 2 19 7 15 8 13 20 23 24 30 21 26 14 6 29 5 32 22 12 18 27 11 28 31 3 4 17 10 9 25 La función en este caso será P (L) y la salida se corresponderá con la permutación de los elementos de modo que el primero de P (L) sea el indicado por la priemra celda (16), el segundo el indicado por la segunda celda (7) y así hasta nalizar. La concatenación de los cuatro elementos se puede ver representada en la siguiente imagen. 14 Que se puede resumir en la función F (R, Ki ) = P (S(E(R) ⊕ Ki )) De lo anterior, la sustitución (S-Boxes) se corresponde con la propiedad de confusión, ya que no permite saber cual es la relación entre la entrada, la clave y la salida y la permutación nal con la difusión, ya que hace que se pierda la estructura de los bits de entrada al ser repartidos por la cadena nal. Las redes de Feisel han sido ampliamente estudiadas. Michael Luby y Charles Racko probaron que si la función F utilizada es una función pseudoaleatoria, con tres iteraciones es suciente para que el cifrado sea una permutación pseudoaleatoria[8][9]. Una función pseudoaleatoria es aquella que no es posible diferenciar de una verdaderamente aleatoria (modelo de oráculo) con algoritmos ecientes. La misma denición se aplica a permutaciones pseudoaleatorias, siendo las que no es posible distinguir de una permutación aleatoria con algoritmos ecientes. Estos resultados permitieron realizar funciones de este tipo con una mayor seguridad. Los vectores que hemos utilizado y los pasos seguidos serán los mismos para cualquier aplicación del algoritmo, variando únicamente el valor de la clave, por lo que todos ellos podrán ser públicos. El peso de la seguridad recaerá solamente en la ocultación de la clave privada. 15 El descifrado de un mensaje se realizaría de forma idéntica, en este caso utilizando como claves los mismos valores pero de forma inveresa. Es decir, las subclaves k 'j , j = 1 . . . 16 para descifrar serían aquellas tales que kj0 = k16−j+1 , siendo ki las utilizadas para cifrar. 16 6. S-Boxes Como se ha dicho, las S-Boxes hacen que el sistema no sea lineal. En caso de no ser así se podría realizar un ataque por texto plano conocido (Known-plaintext attack, KPA) en el que se puede obtener información de las claves a partir de un texto plano y el correspondiente cifrado. Para que las S-Boxes sean seguras hay que tener en consideración ciertas propiedades que fueron publicados por Coppersmith en 1994[10], uno de los integrantes del equipo que lo diseñó. Esta publicación se realizó tras la publicación del criptoanálisis diferencial que veremos y permitió descubrir que en las S-Boxes ya se habían tenido cuenta criterios para evitarlo, pues era ya conocido por sus diseñadores bajo el nombre de T-Attack. Los criterios incluyen lo siguiente: 1. La salida de una S-Box no debe ser cercana a una función lineal d la entrada. Esto signica que los bits de salida que son iguales al XOR de un subconjunto de los bits de entradas deben ser cercanos a 1/2. 2. Si se jan los bits de los extremos de una entrada y se varían los 4 bits centrales, cada una de las 16 posibles salidas debe ocurrir una vez. 3. Si dos entradas de una S-Box tienen un solo bit distinto, las salidas deben diferenciarse al menos en 2 bits. 4. Si dos entradas dieren en los 2 bits centrales las salidas deben tener al menos 2 bits distintos. 5. Si dos entradas dieren en los primeros dos bits y son iguales en sus ultimos dos bits, las salidas no deben ser las mismas. 6. Para cualquier diferencia entre pares de entrada, no más de 8 de las 32 posibles opciones deben dar la misma diferencia de salida. 17 7. Generación de Claves Hemos visto que es necesario generar 16 claves de 48 bits a partir de una clave de 64, con este mecanismo es posible reducir el tamaño de la clave que se almacena de 1152 bits a 64. Sin embargo el tamaño a efectos criptogácos no será tal. Aunque la clave es de 64 bits, 8 de ellos no intervienen, por lo que su valor criptográco quedará reducido a 56, y el modo en que se generan las 16 claves es conocido, por lo que la generación de subclaves no aumentará el valor criptográco. Las posibilidades para la clave, teniendo esto en cuenta, serán 256 . Para la generación de las claves se utilizarán dos vectores, PC-1 y PC-2. El primero se utilizará para reducir el tamaño de 64 a 56 bits y permutará estos valores. Se aplicará antes de comenzar con la generación de claves y dará como resultado dos cadenas de bits (C0 y D0 ) de 28 bits y cada una se permutará de la forma siguiente, se muestra el vector de la permutación igual que se hizo en el apartado anterior: PC-1 (generar C0 ) 54 1 10 19 49 58 2 11 41 50 59 3 33 42 51 60 25 34 43 52 17 26 35 44 9 18 27 36 PC-1 (generar D0 ) 63 7 14 21 55 62 6 13 47 54 61 5 39 46 53 28 31 38 45 20 23 30 37 12 15 22 29 4 A partir de aquí, los bits de cada uno de los dos vectores resultantes de la permutación PC-1 se irán rotando hacia la izquierda. El segundo de los vectores de permutación (PC-2) se aplicará a la concatenación de los mismo tras cada desplazamiento para generar cada una de las claves a partir de los dos anteriores: 14 3 23 16 41 30 44 46 17 28 19 7 52 40 49 42 PC-2 11 24 15 6 12 4 27 20 31 37 51 45 39 56 50 36 18 1 21 26 13 47 33 34 29 5 10 8 2 55 48 53 32 El número de rotaciones a la izquierda que se hará para cada vuelta es el siguiente: Iteración Bits desplaz. Iteración Bits desplaz. 1 1 9 1 2 1 10 2 3 2 11 2 4 2 12 2 5 2 13 2 6 2 14 2 7 2 15 2 8 2 16 1 En la imágen podemos ver este proceso: 19 Con el código que se incluye podemos generar estas claves. Con lo anterior tendríamos 16 claves, cada una de las cuales contiene 48 bits de los 56 de la clave original. Conocer cualquiera de estas subclaves reduce un ataque por fuerza bruta de las 256 posibilidades iniciales a solo 28 . Ya hemos denido el comportamiento completo del algoritmo. Por lo que uniendo todo lo anterior es posible cifrar y descifrar mensajes. En el código adjunto se encuentran las secciones de prueba de cifrado por bloques y de texto, que cifra un mensaje completo. 20 8. El Fundamentos del Criptoanálisis Diferencial se basa en el estudio de las diferencias entre pares de textos planos y cifrados. Es posible aplicarlo a los cifradores de Feistel y otros en los que se tiene una función sencilla que se repite varias veces. criptoanálisis diferencial Conociendo la estructura del algoritmo y sus tablas se tratará de obtener información de la clave a partir de esas diferencias. Sin embargo, estos pares no se tomarán de forma arbitraria sino que se seguirán unas pautas para su obtención, por lo que es especialmente útil cuando es posible obtener el texto cifrado para unos textos planos previamente elegidos. En caso contrario, sería necesario obtener una gran cantidad de texto plano y cifrado para aplicarlo, ya que habría que buscar pares válidos dentro de los que tenemos. Este ataque fue introducido por los investigadores israelíes Eli Biham y Adi Shamir en 1990, sin embargo ya era conocido por los investigadores de IBM, que pusieron las precauciones comentadas para evitarlo. Estudiaremos las bases del criptoanálisis diferencial aplicándolas al cifrador de Feistel, dado que las permutaciones inicial y nal del DES son conocidas y no aportar valor criptográco se eliminarán para simplicar, aunque añadirlas sería trivial. Tenemos que en cada vuelta se cifra una cadena de 32 bits (R), por lo que habrá que centrarse en ella para estudar el ataque. En primer lugar tomamos dos de estas cadenas R y R0 y su diferencia, siendo esta la suma exclusiva. 4R = R ⊕ R0 La importancia de elegir la diferencia entre pares en lugar de el texto plano y estudiar el texto cifrado se debe a que de este modo es posible rastrear las modicaciones que se producen en el algoritmo, en concreto en la S-Box. Veremos que esto se debe a la no-linealidad de las S-Boxes en un algoritmo en el que el resto de pasos sí son lineales. Como la expansión E es lineal, se cumplirá: E(4R) = E(R ⊕ R0 ) = E(R) ⊕ E(R0 ) = A ⊕ A0 = 4A Podemos comprobar que se cumple para una pareja dada con el código incluido. La operación que se realiza a continuación es la suma exclusiva con la clave, que, de nuevo, es lineal, por tanto: (A ⊕ Ki ) ⊕ (A0 ⊕ Ki ) = A ⊕ A0 ⊕ (Ki ⊕ Ki ) = A ⊕ A0 ⊕ 0 = A ⊕ A0 = 4A 21 De nuevo lo comprobamos para este caso: Sin embargo, para las S-Boxes, como es de esperar, no ocurrirá lo mismo, es decir: Si (4B) = Si (B ⊕ B 0 ) 6= Si (B) ⊕ Si (B 0 ) Podemos ver con una de las cajas que es así: Con la permutación ocurriría lo mismo que con la expansión inicial. De este modo vemos que el único elemento que hace que se modique la diferencia son las S-Boxes. Se podrá estudiar la relación entre entradas y salidas para obtener información de las claves. El algoritmo DES, como hemos dicho, se creó con la idea de que las salidas fueran pseudoaleatorias. Para un cambio de un bit en la entrada se espera que cambién aproximadamente 32 bits en la salida. Sin embargo, cuando tomamos la diferencia como hemos hecho la salida no es uniforme, permitiendo de este modo ataques estadísticos. A partir de esta base se construirá un metodo que, analizando la diferencia entre dos textos cifrados, estudiará las salidas más frecuentes y se aprovechará de ellas para obtener información de la clave. 22 9. Criptoanálisis Diferencial de las S-Boxes El primer paso que se lleva a cabo es estudiar las posibles salidas para cada entrada en las SBoxes. Dado que la entrada es de 6 bits y la salida de 4, habrá 64 posibles entradas y 16 valores distintos de salida. Del mismo modo, si tomamos el par de entradas (B, B 0 ), también habrá 64 posibles diferencias 4B = B ⊕ B 0 y 16 para la diferencia de las salidas 4S(B) = S(B) ⊕ S(B 0 ). Estos valores se pueden representar en forma de una tabla de diferencias como la siguiente, en la que veremos que no todos los valores tienen la misma probabilidad. Cada la será un valor para la diferencia de la entrada y las columnas serán los 16 valores distintos para la salida, el elemento para la la i y la columna j será el número de entradas entre las 64 posibles que producen esa salida. Por ejemplo, para la tabla 1 podríamos obtenerlo de la forma siguiente. Y las primeras las de la tabla (de las 64 totales) tendrían una forma como la de la imagen. Cada la sumará un total de 64 dado que es el número de posibles entradas para cada diferencia. En concreto, para la primera vemos que el resultado es siempre 0 dado que las dos entradas son iguales. Para el resto de las podemos observar que no todos los valores son posibles. En el caso de la entrada con diferencia 1 vemos que nunca tenemos como resultado 0, 1, 2, 4, 8 y que la diferencia 10 aparece en 14 de las 64 ocasiones (∼ 22 %). Se ve de nuevo que la distribución no es uniforme. En el diseño de las S-Boxes vimos que una de los principios era: 23 Para cualquier diferencia entre pares de entrada, no más de 8 de las 32 posibles opciones deben dar la misma diferencia de salida. El valor 16 sería el mayor que nos encontremos de acuerdo a esta regla, ya que en la lista habrá pares repetidos, dado que se consideran 64 posibilidades aparecerá tanto (a, b) como (b, a). Por este motivo observamos también que todos los valores son pares. Vamos a estudiar los valores para una entrada en concreto, utilizaremos una para la que haya una distribución más desequilibrada. En la que la diferencia de entrada es 52 encontramos los siguientes valores: Es decir, 8, 16, 6, 2, 12, 6, 8, 6 para las salidas 1, 2, 3, 4, 7, 8, 13, 15, teniendo para una de ellas 16 entradas, el máximo posible. Si obtenemos los valores para los que ocurren estas salidas tenemos lo siguiente: A partir de estos elementos vamos a tratar de obtener la clave. Supongamos un par de entradas que dieran en 52, E(R) = 1 y E(R0 ) = 53 y la porción de la clave K1 que corresponde a la parte que entrará a la S-Box. Sea el resultado de la suma exclusiva B1 = E(R1 ) ⊕ K1 y B10 = E(R10 ) ⊕ K1 sabemos que 4B = B ⊗ B10 = E(R)1 ⊕ E(R0 )1 = 4E(R) = 52. Además, como B1 = E(R1 )⊕K1 entonces K1 = B1 ⊕E(R1 ) y de igual modo K1 = B10 ⊕E(R10 ). Supongamos que en este caso tenemos como salida 4B = 13. Conocemos los valores de E(R1 ) y E(R10 ) y que los posibles valores para B 1 y B10 son los de la la 13 de la tabla superior. 24 1⊕6=7 53 ⊕ 6 = 51 1 ⊕ 16 = 17 53 ⊕ 16 = 37 1 ⊕ 22 = 23 53 ⊕ 22 = 35 1 ⊕ 28 = 29 53 ⊕ 28 = 41 1 ⊕ 34 = 35 53 ⊕ 34 = 23 1 ⊕ 36 = 37 53 ⊕ 36 = 17 1 ⊕ 40 = 41 53 ⊕ 40 = 29 1 ⊕ 50 = 51 53 ⊕ 50 = 7 La clave está entre {7, 17, 23, 29, 35, 37, 41, 51}. Si además de este conocieramos el resultado para otra entrada, por ejemplo, para 21 y 33, también con diferencia 52 y con salida 3, tendríamos la siguiente tabla. 21 ⊕ 1 = 20 33 ⊕ 1 = 32 21 ⊕ 2 = 23 33 ⊕ 2 = 35 21 ⊕ 21 = 0 33 ⊕ 21 = 52 21 ⊕ 33 = 52 33 ⊕ 33 = 0 21 ⊕ 53 = 32 33 ⊕ 53 = 20 21 ⊕ 54 = 35 33 ⊕ 54 = 23 Con lo que ahora sabemos que la clave también esta en {20, 23, 0, 52, 32, 35}. Por lo que estará en: {7, 17, 23, 29, 35, 37, 41, 51} ∩ {20, 23, 0, 52, 32, 35} = {23, 35} La clave será 23 o 35. Vemos que ambas son posibles: 25 No podremos decidir cuál de ellas es la correcta ya que 23 ⊕ 35 = 52 = 4B . Sin embargo, si podríamos encontrar la clave correcta repitiendo para una nueva difrencia de entrada y buscando la intersección entra la nueva lista y la que tenemos. 26 10. Criptoanálisis Diferencial Completo (DES Simplificado) Para realizar el criptoanálisis del algoritmo completo nos basaremos en la idea anterior, pero ahora es necesario rastrear la salida tras pasar por distintas rondas del algoritmo. Vamos a estudiarlo para una versión simplicada con solo las dos primeras rondas. Se usará la idea del característico. Esta es la entrada que será posible seguir a través de varias rondas y que ofrece la mayor probabilidad para una de sus salidas. Los 32 últimos bits (R0 ) del característico entrarán a la función de Feistel. Tendrán que ser aquellos que nos permitan trazar el camino después de pasar por la expansión E. Para nuestro caso esta entrada será 4R = 60 00 00 00 (cada dígito son 6 bits). Para el primer byte, se tiene que todos los bits que están a uno irán a la S-Box 1 y los otros al resto. De este modo la entrada para todas las cajas será 0 menos para la primera, y lo mismo ocurrirá para la salida de las mismas. En este caso la entrada para la S-Box 1 es 001100 = 12. Consultaremos las salidas más probables para la entrada con diferencia 12. La salida más probable es 14 con probabilidad 14/64. Del resto de salidas de S-Boxes tenemos la seguridad de que tendrán como resultado cero. Buscaremos aquellas entradas que produzcan esta salida. Para esta salida, tras la permutación obtenemos el valor: 4P (L) = P (14 00...) = 00 80 82 00 (cada dígito son 4 bits). Tras la salida de la función de Feistel se hará el XOR con la parte restante (L0 ) y se desea que el resultado sea 0 para poder rastrear lo realizado hasta ahora. De otro modo sería modicado en la segunda ronda. Será aquel tal que L0 ⊕00 80 82 00 = R1 = 0. Será, por tanto, L0 = 00 80 82 00. 27 Por tanto el característico será R0 L0 : Y enemos como resultado de la ronda 1: L0 = 00 80 82 00 R0 = 60 00 00 00 L1 = 60 00 00 00 R1 = 00 00 00 00 Si ralizamos la ronda dos, observamos que la entrada a la función de Feistel es 0, por lo que solo queda hacer: L2 = R1 = 00 00 00 00 R2 = L1 ⊕ 0 = 60 00 00 00 Vamos a recapitular lo anterior para realizar un ataque a nuestra versión simplicada del algoritmo. 1. En primer lugar necesitaremos obtener pares de texto plano tal que su diferencia es: 4M = M ⊕ M 0 = 00 80 82 00 60 00 00 00 A la que hemos llamado característico. 28 2. Habrá que obtener un texto plano aleatorio y hacer la suma exclusiva con la diferencia deseada. Después necesitaremos tener el texto cifrado (C, C 0 ) para el par de textos planos. 3. De estos textos cifrados sabemos que su diferencia es 00 00 00 00 60 00 00 00 en 14 de cada 64 ocasiones. Si en este caso no es así, simplemente tomaremos un nuevo par de textos planos con sus correspondientes textos cifrados hasta obtener uno con este resultado. El número aproximado de entradas que necesitaremos será de 64/14, aproximadamente 5. 4. Ahora que tenemos el resultado que queremos, sabemos que ha sido producido por una de las 14 opciones para este resultado que vimos en la tabla, igual que realizamos en el análisis de una sola S-Box. Solo habrá que crear las listas para ambas entradas y calcular su intersección. Para lograr esto, primero reproduciremos los pasos hasta el punto en el que entra en juego la subclave, punto desde el que partimos en el análisis de la S-Box, a partir de aquí solo hay que repetir lo realizado en el apartado anterior para el análisis de una S-Box. Se realizará la función de expansión sobre los primeros 6 bits de la parte izquierda. Posteriormente se toman los valores correspondientes a la S-Box 1 y se hace el XOR para cada par de entrada posible con distancia dos que producen la salida 14. En la lista creada estará la subclave K1 . Tras esto repetiremos el proceso con distintos pares de texto y la misma diferencia hasta que en la interesección de las tablas de todos ellos queden solamente dos valores, que será la parte de la subclave deseada. En el caso anterior, si repetimos otra vez el resultado de la intersección será: Y tras una interacción mas nos quedarán solo dos valores De los cuales, uno, en efecto, era la parte de la subclave buscada: 29 Como sabemos, no es posible saber cual de los dos es el correcto. Pero se podría realizar de nuevo tomando un valor diferente al característico con las mismas propiedades, por ejemplo, cambiando el 6 por el 2 (no se incluyen nuevos bits). A partir de este punto será necesario ir creando característicos para cada una de las S-Boxes S2 a S8. Con esto tendremos los 48 bits de la subclave. 30 11. Obtención de la Clave Completa Llegados a este punto tenemos una de las subclaves, sin embargo hay que obtener 56 bits y tenemos solamente 48. Para conseguirlos habrá que retroceder los pasos que se dan en la generación de claves. En primer lugar haremos la inversa de la función PC-2. No será posible obtener los 56 valores, por lo que se generarán 28 = 256 posibilidades. A cada una de ellas se aplicará la función inversa de PC-1. Esta función deberá generar 64 bits a partir de los 56 que tenemos. Sin embargo, como los bits que se añadirían no tienen importancia a la hora de cifrar/descifrar, bastaría con ponerlos todos a 0 o a 1. Llegados a este punto tenemos 256 posibles claves, sobre las que se hará un ataque por fuerza bruta. Ya sea teniendo acceso a pares de texto claro/cifrado o generandolos, se irá comprobando el resultado de cifrar los textos planos con cada una de las cifras contra los que sabemos que son correctos. En el momento en que encontramos uno que funcione, tendremos la clave nal. El resultado nal es el siguiente. 31 12. Resultados del Criptoanálisis Diferencial Hemos visto como para la versión simplicada el criptoanálisis reduce el tiempo necesario para encontrar una clave de un espacio de búsqueda que no era tratable, 256 , a uno de solo 28 . En este caso encontrar los pares de entrada es sencillo ya que la probabilidad de encontrar una coincidencia era muy grande. En caso de añadir más rondas, encontrar estas coincidencias será más complicado, principalmente por los criterios de diseño de las S-Boxes vistos ya que el diseño se hizo pensando en la posibilidad de un criptoanálisis diferencial. En este ejemplo ha sido necesario un único característico, pero para un número mayor de rondas no será así y habrá que utilizar varios característicos diferentes. La dicultad para encontrar las coincidencias aumentará con el número de rondas. La dicultad para encontrar la clave una vez descubierta la subclave seguirá siendo la misma, por lo que será en el problema de encontrar las coincidencias el que añada complejidad. En su publicación Eli Biham y Adi Shamir incluyen una tabla que indica el número de pares necesarios para realizar el criptoanálisis y la probabilidad de que ocurra(p.253). Rondas Pares Necesarios Probabilidad 4 23 1 6 27 1 16 8 215 1 10486 9 226 2−24 10 234 2−32 11 235 2−32 12 242 2−40 13 243 2−40 14 250 2−48 15 251 2−48 16 257 2−56 El algoritmo hasta 8 rondas se podría romper fácilmente en unos minutos. Pero como se ve, para el caso del DES original el criptoanálisis diferencial no ofrece una verdadera ventaja respecto a una búsqueda por fuerza bruta al necesitar tener disponibles 257 pares. Sin embargo, en caso de poder generar los pares se podría realizar el ataque con tan solo 247 , donde sí habría una mejora respecto a una busqueda exahustiva. Como se ha dicho esta dicultad viene dada por las características técnicas del algoritmo, modicar algunas de ellas haría que la fortaleza del algoritmo disminuyera notablemente y el criptoanálisis ponen de maniesto la importancia de la elección. Estas modicaciones incluirían 32 la permutación P, el orden de las S-Boxes y su contenido o la expansión E. Aunque el criptoanálisis diferencial no fuera nalmente efectivo contra un DES completo, sí se puede utilizar con éxito contra otros algoritmos similares al DES y se ha convertido en uno de los ataques en los que se tiene que poner especial cuidado a la hora de diseñar un sistema criptográco simétrico de bloques. Un ejemplo de sistemas contra los que se ha tenido éxito con el criptoanálisis diferencial son los sistemas de la familia Feal. También se han realizado ataques a funciones hash como la función Merkle's Snefru y variaciones de la función Miyaguchi's N-Hash. 33 13. Otros Ataques al Algoritmo DES Desde su creación se han utilizado otros ataques contra el algoritmo DES. La empresa RSA Security, dedicada a la criptografía y seguridad creo a modo de concurso los DES Challenges en 1997 con el n de demostrar la debilidad del algoritmo DES. Los ataques por fuerza bruta tuvieron éxito, logrando el proyecto DESCHALL resolver el problema 96 días después. En númerosas ocasiones se ha vuelto a poner de maniesto la posibilidad de realizar ataques por fuerza bruta efectivos contra el DES. En uno de los concursos posteriores (1998) el proyecto de computación distribuida distributed.net, en el que voluntarios de todo el mundo prestan tiempo de cálculo de sus equipos mientras no están en uso, lo consigió en 41 días. El mensaje que se tuvo que descubrir, en referencia a esta red de computación, fue: "The secret message is: Many hands make light work." Solo unos meses después esta cifra fue superada por la máquina Deep Crack, diseñada para romper el algoritmo DES en concreto, puedo hacerlo en solo 56 horas. En esta ocasión el mensaje hizo referencia directamente a la necesidad de un cambio en el estándar, que seguía siendo el DES: "The secret message is: It's time for those 128-, 192-, and 256-bit keys.". Finalmente, en el último concurso DES Challenge (III, 1999), la clave fue encontrada en 22 horas y 15 minutos. Otro ataque existente es el criptoanálisis lineal. Este se ha desarrollado tanto para sistemas lineales de bloque como de ujo, siendo junto al diferencial uno de los más usados contra los primeros. Su descubrimiento fue realizado por Mitsuru Matsui que lo aplicó al cifrador FEAL y publicó posteriormente una propuesta para hacerlo contra el DES. Esta era mejor que el criptoanálisis lineal necesitando disponer de 243 textos para los que se conozca su correspondiente cifrado. El criptoanálisis lineal es un ataque de tipo estadístico que consiste en realizar operaciones de suma exclusiva entre los bits de un texto en claro mientras que se hace lo mismo entre los del texto cifrado. Esta acción se irá repitiendo con distintos bits de cada uno de los textos, proceso mediante el cual se puede reucuperar información de la clave. Otra propuesta que consiste en una variación del criptoanálisis diferencial es el criptoanálisis diferencial imposible. En esta ocasion no se estudiará como se propaga una modicación en el proceso de codicación sino que se aprovechara las derencias entre dos textos que se están cifrando y que es imposible que se den en ciertas partes del cifrado. Fue presentado por Lars Knudsen en 1998 y se ha utilizado contra algoritmos como IDEA, Keops o Kefrén. 34 14. Mejoras al Algoritmo DES Una de las primeras opciones para mejorar el algoritmo DES son los modos de operación que se aplican a los algoritmos de cifrado por bloques. Estos permiten cifrar mensajes de mayor tamaño que el tamaño de bloque. Algunos de estos modos son los siguientes[11] (en la referencia se pueden ver de modo gráco): (Electronic Codebook) Es el modo más sencillo, cada bloque se cifrará de modo independiente y se concatenarán del mismo modo que se vió en la introducción. Este modo tiene algunos incovenientes ya que no proporciona condencialidad. Uno de los ejemplos típicos es en el que se codica una imagen, dado que un bloque de un color se codica siempre igual, podremos recuperar la forma de los objetos a partir de los bloques cifrados. ECB: (Cipher-Block Chaining) En este caso a cada bloque se le aplica una suma exclusiva con el resultado de cifrar el anterior bloque. Este modo soluciona el problema anterior, pero hace que no sea posible un cifrado en paralelo, ya que para cifrar cada mensaje será necesario haber realizado el cifrado del anterior previamente. CBC: (Propagating Cipher-Block Chaining) No se hará la suma exclusiva solo con el anterior bloque cifrado, sino que se hará entre el anterior bloque en claro, cifrado y el bloque a codicar en ese momento. PCBC: (Cipher Feedback) Como el CBC pero se cifrará el resultado del bloque anterior y posteriormente se hará la suma exclusiva con el bloque a cifrar actual, en lugar de hacerla antes del cifrado. El descifrado se hará del mismo modo que el CBC. CFC: (Output Feedback) El cifrado no se hará del resultado del bloque anterior sino solo de la salida del cifrador (es decir, antes de hacer el XOR con el texto plano). OFB: CTR: (Cipher Feedback) Este modo imita el cifrado en ujo. Una de las propuestas para mejorar el algoritmo surgió debido a los problemas que existían con el algoritmo, fue el Triple DES, o TDEA (Triple Data Encryption Algorithm ). Esta modicación realizaba tres cifrados con DES sobre cada bloque. De este modo se conseguía una resistencia frente al ataque por fuerza bruta al conseguir una clave de tamaño mayor. Existen tres opciones a la hora de tomar la clave, que las tres sean independientes, con lo que se consigue una clave de tamaño 168, que sean iguales la primera y la tercera, que supondría una clave de 112 o que sean las tres iguales, con lo que el tamaño de la clave seguiría siendo 56, esta última es equivalente al DES normal ya que el primer y el segundo cifrado se cancelarían, pero apareció por razones de compatibilidad con el DES. Finalmente se reemplazó el algoritmo DES. Hubo diversas propuestas para la creación de un nuevo estándar. Algunas de ellas fueron RC5, BlowFish, IDEA o FEAL aunque nalmente fue el algoritmo AES (Advanced Encryption Standard ) el elegido. Este algoritmo supone igualmente u nsistema de cifrado por bloques y es uno de los más utilizados en criptografía asimetrica. El tamaño del bloque para este algoritmo es de 128bits y permite varios tamaños de clave mayores que el DES, en concreto 128, 192 y 256. En lugar de utilizar una red de Feistel se utiliza una red de sustitución-permutación, aunque sigue una losofía similar. Se hará un número de 35 rondas que depende del tamaño de clave, 10, 12 y 14 respectivamente. A día de hoy no hay ataques realizables contra el algoritmo AES. 36 Anexo A: Código en Mathematica En el código adjunto en Mathematica se ha implementado la funcionalidad necesaria para el cifrado y descifrado con el álgoritmo DES. Mediante el código se ha tratado de comprender el funcionamiento del algoritmo en su totalidad y ofrecer la posibilidad de obtener los datos intermedios que se producen. El código se ha utilizado en distintas secciones del trabajo para mostrar los resultados de los ejemplos. Para implementar el algoritmo se han realizado las siguientes partes, que aparecen como secciones en el cuaderno de Mathematica: Generación de Claves, Función de Feistel, Algoritmo DES, Cifrar/Descifrar (cifrado de bloques) y Cifrar/Descifrar Textos (cifrado de textos completos) También se ha implementado el código necesario para obtener las claves mediante un criptoanálisis diferencial de una versión simplicada del algoritmo DES a 2 rondas. Aunque sería posible realizar optimizaciones que supusieran una reducción del tiempo que tarda es actualmente lo hace en tiempos de aproximadamente 3 segundos con un ordenador equipado con un procesador Intel Quad Core Q6600. Dado que no era el objetivo conseguir una implementación eciento sino ayudar en la comprensión del criptoanálisis no se ha puesto un mayor empeño en la optimización. 37 Anexo B: ablas S-Boxes 0 1 2 3 4 5 S-Box 1 6 7 8 0 14 4 13 1 2 15 11 8 3 1 0 15 7 4 14 2 13 1 10 2 4 1 14 8 13 6 2 11 15 3 15 12 8 2 4 9 1 7 5 S-Box 2 0 1 2 3 4 5 6 7 8 0 15 1 8 14 6 11 3 4 9 1 3 13 4 7 15 2 87 14 12 2 0 14 7 11 10 4 13 1 5 3 13 8 10 1 3 15 4 2 11 S-Box 3 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 10 6 12 5 9 6 12 11 9 5 12 9 7 3 10 11 3 14 10 0 0 3 5 6 7 8 0 13 9 10 11 12 13 14 15 7 2 13 12 0 1 10 6 8 12 6 9 6 7 12 0 9 0 9 3 5 5 10 11 5 2 15 14 9 10 11 12 13 14 15 0 10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8 1 13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1 2 13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7 3 1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12 S-Box 4 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 7 13 14 3 0 6 9 10 1 1 13 8 11 5 6 15 0 3 4 2 10 6 9 0 12 11 7 13 15 3 3 15 0 6 10 1 13 8 9 S-Box 5 0 1 2 3 4 5 6 7 8 2 7 1 4 8 2 3 5 5 11 12 4 15 12 1 10 14 9 14 5 2 8 4 11 12 7 2 14 9 10 11 12 13 14 15 0 2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9 1 14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6 2 4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14 3 11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3 S-Box 6 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 12 1 10 15 1 10 15 4 2 2 9 14 15 5 3 4 3 2 12 9 2 6 8 0 13 3 4 14 7 5 11 7 12 9 5 6 1 13 14 0 11 3 8 2 8 12 3 7 0 4 10 1 13 11 6 9 5 15 10 11 14 1 7 6 0 8 13 S-Box 7 38 0lo 0 1 2 3 1 2 3 4 5 6 7 8 9 4 11 2 14 15 0 8 13 3 12 13 0 11 7 4 9 1 10 14 3 1 4 11 13 12 3 7 14 10 15 6 11 13 8 1 4 10 7 9 5 0 1 2 0 13 2 8 1 1 15 13 2 7 11 4 3 2 1 14 3 4 5 S-Box 8 6 7 8 9 10 11 12 13 14 15 9 5 6 0 7 5 10 12 2 15 8 0 5 15 14 2 6 8 9 3 1 6 2 12 10 11 12 13 14 15 4 6 15 11 1 10 9 3 14 5 0 12 7 8 10 3 7 4 12 5 6 11 0 14 9 2 1 9 12 14 2 0 6 10 13 15 3 5 8 7 4 10 8 13 15 12 9 0 3 5 6 11 39 Bibliografía [1] wikipedia.org, Block Cipher.http://en.wikipedia.org/wiki/Block_cipher [2] RFC2898 , PKCS #5: Password-Based Cryptography Specication 2.0http://tools.ietf.org/html/ rfc2898 2 [3] Claude Shannon, Communication Theory of Secrecy Systems, 1949 - http://netlab.cs.ucla.edu/ wiki/files/shannon1949.pdf 2, 5 [4] wikipedia.org, Data Encryption Standard - http://en.wikipedia.org/wiki/Data_Encryption_ Standard 3 [5] National Institute of Standards and Technology (NIST), Data Encryption Standard (DES), 199910-25. FIPS PUB 46-3. http://en.wikipedia.org/wiki/National_Institute_of_Standards_and_ Technology 3 [6] wikipedia.org, Lucer Cipher http://en.wikipedia.org/wiki/Lucifer_(cipher) 3 [7] wikipedia.org, Pseudorandom Function http://en.wikipedia.org/wiki/Pseudorandom_function [8] wikipedia.org, Feistel Cipher http://en.wikipedia.org/wiki/Feistel_cipher#Theoretical_work 5 [9] Michael Luby, Charles Racko, How to Construct Pseudorandom Permutations from Pseudorandom Functions http://epubs.siam.org/doi/abs/10.1137/0217022 5 [10] Don Coppersmith, The Data Encryption Standard (DES) and its strength against attacks http:// ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=5389567 6 [11] wikipedia.org, Block Cipher Modes of Operation http://en.wikipedia.org/wiki/Block_cipher_ modes_of_operation 14 [12] L.De Meyer, B. Bilgin, B. Preneel, Extended Analysis of DES S-Boxes http://www.cosic.esat. kuleuven.be/publications/article-2335.pdf [13] Cetin Kaya Koc Dierential Cryptanalysis http://cs.ucsb.edu/~koc/ac/notes/dc.pdf [14] Eli Biham, Adi Shamir, Dierential Cryptanalysis of DES_like Cryptosystems http://sota.gen.nz/ crypt_blues/biham91differentia.pdf 40