Algoritmo DES Y Criptoanálisis Diferencial

Anuncio
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
Descargar