Vous êtes sur la page 1sur 11

Algoritmo DES

1.- Como paso previo al cifrado, a partir de la clave de 64 bits se calculan 16 subclaves
(Ki) de 48 bits cada una (una para cada ronda).

1.1.- Permutación de los bits de K conforme a la posición de cada uno de ellos que se
indica en la siguiente tabla:

Nótese que en esta tabla no figuran los bits menos significativos de cada byte (8, 16, 24,
32, 40, 48, 56 y 64), por lo que éstos son ignorados (como he dicho antes, en la
práctica se emplean 56 bits de la clave).

Pongo un ejemplo:
1.2.- Ahora, los bits de la mitad izquierda (C0) y de la mitad derecha (D0), obtenidas
tras la permutación PC-1, ambas de 28 bits, se van rotando circularmente a la
izquierda conforme al número de bits a desplazar a la izquierda que se indica en la
siguiente tabla:

Es decir, el número de bits a desplazar a la izquierda es 2, excepto para las iteraciones 1,


2, 9 y 16 en las que se desplaza sólo 1 bit a la izquierda.

En nuestro ejemplo:
1.3.- Tras cada una de las iteraciones anteriores se aplica la permutación PC-
2 a los bits de la concatenación de Ci || Di (donde 1  i  16), conforme a la posición de
cada uno de ellos que se indica en la siguiente tabla:

Y, de esta forma, se obtienen las 16 subclaves (Ki; donde 1  i  16); como he dicho
antes, cada una de ellas con una longitud de 48 bits. Siguiendo con nuestro ejemplo:
Hasta el momento, gráficamente:

Y ahora ya se está en disposición de cifrar el texto en claro.

2.- Cifrado: Supongamos que vamos a cifrar un bloque (64 bits) del texto en claro. El
siguiente:

M = 0100 0101 0100 1010 0100 0101 0100 1101 0101 0000 0100 1100 0100
1111 0100 1101
2.1.- Se aplica una permutación inicial (IP) a los bits del bloque a cifrar conforme a
la posición de cada uno de ellos que se indica en la siguiente tabla:

En nuestro ejemplo:

2.2.- A partir de aquí el algoritmo realiza 16 rondas utilizando una función (f), de la
siguiente manera:

Es decir, en cada ronda, la mitad derecha pasa a ser la mitad izquierda de la siguiente
iteración y la mitad izquierda, a la que se suma módulo 2 (operador lógico XOR u o-
exclusivo) el resultado de la función f, pasa a ser la mitad derecha.

Gráficamente:
La función f consta de: una permutación de expansión (E) - que transforma el bloque
de 32 bits de la entrada en uno de 48 bits, permutando los bits que recibe y duplicando
algunos de ellos -, una operación XOR con el valor de la subclave correspondiente
(Ki), 8 operaciones de sustitución aplicadas a cada uno de los 8 bloques de 6 bits en los
que se divide el resultado de la operación XOR anterior y otra permutación (P).

Gráficamente:

2.2.1.- La permutación de expansión (E) se realiza conforme a la posición de cada uno


de los bits de entrada que se indica en la siguiente tabla:
Nótese que algunos de los bits que recibe (32 bits) se duplican para obtener una salida
de 48 bits, con objeto de poder realizar la operación XOR con la subclave (Ki)
correspondiente, que tiene una longitud de 48 bits.

En nuestro ejemplo, para la primera iteración (entrada R0):

2.2.2.- Operación XOR con el valor de la subclave correspondiente:

En nuestro ejemplo y para la primera ronda:

2.2.3.- Las sustituciones se realizan mediante unas tablas denominadas S-Cajas (en
inglés S-Boxes, Substitution Boxes).

Para ello, en primer lugar se divide el resultado anterior en 8 bloques de 6 bits cada
uno, de la siguiente manera:
Y, posteriormente, cada uno de estos bloques es la entrada a su respectiva S-Caja,
cada una de las cuales determina la sustitución a realizar de la siguiente manera:

El primer y último bit de cada bloque (Bi) indican la fila de la S-Caja (Si) a
seleccionar y los cuatro bits centrales determinan la columna, devolviéndose el
valor (4 bits) que se encuentra en la intersección de ambas.

En nuestro ejemplo, para la primera ronda y primera S-Caja (S1):


Las tablas de las S-Cajas son las siguientes:

2.2.4.- Por último, el resultado de la función f de cada ronda se obtiene aplicando


una permutación (P) a la concatenación (32 bits) de los resultados obtenidos tras
realizar cada una de las sustituciones anteriores, que devuelve un bloque también de 32
bits.

Y se repite el paso 2.2. hasta completar las 16 rondas.

2.3.- Finalmente, se aplica una permutación inversa a la permutación inicial (IP-


1), conforme a la posición de cada uno de los bits de la concatenación de R16 y

L16 obtenidos en la última ronda:


El resultado de aplicar esta permutación final es el criptograma (C).