DES, siginifica DATA ENCRIPTION STANDART, y es un metodo que se considera inseguro para muchas aplicaciones actuales debido a la longitud de su clave. Este es un algoritmo simetrico que usa permutaciones de la clave, hay que tener en cuenta que estas anotaciones son solo de caracter educativo y no me hago responsable del buen o mal uso de lo descrito aq a conitnuacion
La clave se puede introducir directamente o puede ser el resultado
de alguna operación anterior, ya que no hay ninguna especificación
al respecto.
De cada uno de los ocho bytes se elimina el octavo bit (el menos
significativo)
1.2.- Calcular las subclaves.
1.2.1.- Realizar la siguiente permutación en la clave de 64 bits
reduciéndose la misma a 56 bits (El bit 1, el más
significativo, de la clave transformada es el bit 57 de la
clave original, el bit 2 pasa a ser el bit 49, etc.).
1.2.2.- Dividir la clave permutada en dos mitades de 28 bits cada
una. C(0) el bloque que contiene los 28 bits de mayor peso
y D(0) los 28 bits restantes.
1.2.3.- Calcular las 16 subclaves (Empezar con i=1)
1.2.3.1.- Rotar uno o dos bits a la izquierda C(i-1) y D(i-1)
para obtener C(i) y D(i), respectivamente. El
número de bits de desplazamiento está dado por la
tabla siguiente:
Permuted Choice 1 (PC-1)
57 49 41 33 25 17 9 1
58 50 42 34 26 18 10 2
59 51 43 35 27 19 11 3
60 52 44 36 63 55 47 39
31 23 15 7 62 54 46 38
30 22 14 6 61 53 45 37
29 21 13 5 28 20 12 4
1 2 3 4 5 6 7 8 9 10111213141516
1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1
10
continuación. Así se obtiene K(i), que tiene una
longitud de 48 bits.
1.2.3.3.- Ir a 1.2.3.1. hasta que se haya calculado K(16).
de 64 bits debe ser completado para poder continuar con el
siguiente paso.
2.2.- Realizar la siguiente permutación del bloque:
2.3.- Dividir el bloque resultante en dos mitades de 32 bits cada una.
L(0) el bloque que contiene los 32 bits de mayor peso y R(0) el
resto.
2.4.- Aplicar las 16 subclaves obtenidas en el paso 1
2.4.1.- E(R(i)). Expandir R(i) de 32 a 48 bits de acuerdo con la
tabla que se muestra debajo:
2.4.2.- E(R(i-1)) Xor K(i). Or-exclusiva del resultado del paso
2.4.1. con K(i)
Permuted Choice 2 (PC-2)
14 17 11 24 1 5 3 28
15 6 21 10 23 19 12 4
26 8 16 7 27 20 13 2
41 52 31 37 47 55 30 40
51 45 33 48 44 49 39 56
34 53 46 42 50 36 29 32
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7
Expansion (E)
32 1 2 3 4 5 4 5
6 7 8 9 8 9 10 11
12 13 12 13 14 15 16 17
16 17 18 19 20 21 20 21
22 23 24 25 24 25 26 27
28 29 28 29 30 31 32 1
10
bloques de seis bits. B(1) representa a los bits 1-6, B(2)
representa a los bits 7-12,…, B(8) representa a los bits 43-
48.
2.4.4.- S(1)(B(1)), S(2)(B(2)),…, S(8)(B(8)). Sustituir todos los
B(j) por los valores correspondientes de las S-Cajas o tablas
de sustitución (Substitution Boxes, S-Boxes) de 6*4 bits,
según se indica en los subapartados que siguen. Todos los
valores de las S-Cajas se consideran de 4 bits de longitud.
(Ver S-cajas del algoritmo DES, página siguiente)
2.4.4.1.- Tomar los bits 1º y 6º de B(j) y formar un número
de 2 bits que llamaremos m. Este valor nos indicará
la fila en la tabla de sustitución correspondiente
S(j). Obsérvese que m=0 representa la 1ª fila y
m=3 la última.
2.4.4.2.- Con los bits 2º a 5º de B(j) formar otro número, n,
de cuatro bits que indicará la columna de S(j) en la
que buscar el valor de sustitución. En esta ocasión
n=0 representa la 1ª columna y n=15 la última
columna.
2.4.4.3.- Reemplazar B(j) con S(j)(m,n), m fila y n columna.
2.4.4.4.- Ejemplo. Sea B(3)=42, en binario B(3)=101010.
Buscaremos el nuevo valor de B(3) en S(3). Fila m
y columna n, según lo expuesto anteriormente
m=10, n=0101, y en decimal m=2 y n=5.
Por tanto, B(3) será S(3)(2,5)=15
2.4.4.5.- Volver a 2.4.4.1. hasta que todos los bloques B(j)
hayan sido reemplazados por el valor de S(j)
adecuado.
2.4.5.- P[S(1)(B(1))… S(2)(B(8))]. Concatenar los bloques B(1) a
B(8) y permutar los 32 bits (cuatro bits cada B(j)) en
función de esta tabla:
2.4.5.1.- Volver a 2.4.4.1. hasta que todos los bloques B(j)
hayan sido reemplazados por el valor de S(j)
adecuado.
Permutation P
16 7 20 21 29 12 28 17
1 15 23 26 5 18 31 10
2 8 24 14 32 27 3 9
19 13 30 6 22 11 4 25
Columna
Fila
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
10
1 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
2 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
0 15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
1 3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
2 0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 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
0 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
1 13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
2 10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
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
0 12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
1 10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
2 9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
0 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
1 13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
2 1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
0 13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
1 1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
2 7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
B(8) y permutar los 32 bits (cuatro bits cada B(j)) en
función de esta tabla:
2.4.7.- R(i). Realizar una or-exclusiva entre el valor resultante y
L(i-1). Este valor será R(i). Por tanto, R(i)=L(i-1) Xor
P[S(1)(B(1))… S(2)(B(8))]
2.4.8.- L(i). L(i)=R(i-1)
Permutation P
16 7 20 21 29 12 28 17
1 15 23 26 5 18 31 10
2 8 24 14 32 27 3 9
19 13 30 6 22 11 4 25
10
subclaves.
2.5.- Hacer la siguiente permutación del bloque R(16)L(16). Obsérvese
que esta vez R(16) precede a L(16)