Cifrado DES

El 15 de mayo de 1973, la Agencia Nacional de Normalización hizo un llamamiento en el Registro Federal para la creación de un algoritmo de cifrado que cumpliera con los siguientes requisitos:

  • Ofrecer un alto nivel de seguridad relacionado con una pequeña clave utilizada para cifrado y descifrado
  • Ser comprensible
  • No depender de la confidencialidad del algoritmo
  • Ser adaptable y económico
  • Ser eficaz y exportable

A finales de 1974, IBM propuso "Lucifer", que gracias a la Agencia Nacional de Seguridad fue modificado convirtiéndose en DES (Data Encryption Standard o Estándar de Cifrado de Datos). Se trata de un sistema de cifrado simétrico por bloques de 64 bits, de los que 8 bits (un byte) se utilizan como control de paridad para la verificación de la integridad de la clave. El algoritmo se encarga de realizar combinaciones, sustituciones y permutaciones entre el texto a cifrar y la clave, asegurándose al mismo tiempo de que las operaciones puedan realizarse en tanto para el cifrado como para el descifrado. El algoritmo se puede describir de la siguiente manera:

  • Fraccionamiento del texto en bloques de 64 bits (8 bytes)
  • Permutación inicial de los bloques
  • Partición de los bloques en dos partes: izquierda y derecha
  • Permutación y sustitución repetidas 16 veces (denominadas rondas)
  • Reconexión de las partes izquierda y derecha, seguida de la permutación inicial inversa.

Generación de llave

Dado que el algoritmo DES mencionado anteriormente es público, toda la seguridad se basa en la complejidad de las claves de cifrado.

A continuación se muestra cómo obtener el conjunto de llaves usando la llave publica de 64 bits, cada una de ellas utilizadas para el algoritmo DES.

Como primer paso se realiza una permutación denominada PC1, de esta forma se eliminan los bits de paridad de la llave para obtener una llave que posea una longitud de 56 bits. La tabla de la permutación PC1 es la siguiente:

PC1
57494133251791585042342618
10259514335271911360524436
635547393123157625446383022
1466153453729211352820124

A continuación, se divide el resultado en dos mitades y , cada una de ellas de 28 bits.

Con y definidas, ahora se crean 16 bloques y , con . Cada par de bloques ( , ) se forma a partir del par anterior(es decir , ), usando para ello una tabla de rotaciones a la izquierda prefijadas de la siguiente forma:

 Iteración:   1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16 
 Desplazamientos:   1  1  2  2  2  2  2  1  2  2  2  2  2  2  2  1 

Una vez obtenidos los dos bloques de 28 bits de cada iteración, cada par se agrupa en un bloque de 56 bits. Esto da como resultado 16 bloques de 56 bits, de los cuales cada uno de los bloques pasa por una permutación, denominada PC2:

PC2
14171124153281562110
23191242681672720132
415231374755304051453348
444939563453464250362932

Esto da como resultado 16 bloques de 48 bits que representan el conjunto de 16 llaves a utilizadas en el algoritmo DES.


Cifrado

A partir de ahora se usan los bloques de 64 bits pertenecientes al mensaje.

Cada bit de un bloque está sujeto a una permutación inicial, que puede representarse mediante la siguiente matriz de permutación inicial (anotada como IP):

IP
585042342618102
605244362820124
625446383022146
645648403224168
57494133251791
595143352719113
615345372921135
635547393123157

Esta tabla de permutación muestra que el bit número 58 del bloque de 64 bits está en la primera posición, el bit numero 50 está en la segunda posición y así sucesivamente.

A continuación, se divide el bloque permutado en dos mitades: una parte izquierda denominada y una parte derecha denominada , ambas de 32 bits.
Los bloques y están sujetos a un conjunto de transformaciones iterativas denominadas rondas.

Las rondas comienzan con el bloque . Los 32 bits del bloque se expanden a 48 bits gracias a una tabla llamada tabla de expansión que se anota como E, en la que los 48 bits se mezclan y 16 de ellos se duplican:

E
3212345
456789
8910111213
121314151617
161718192021
202122232425
242526272829
28293031321

El algoritmo DES aplica después OR exclusivas entre la primera clave y el bloque resultante de la expansión.

Después, el bloque obtenido se divide en 8 bloques de 6 bits. Cada uno de estos bloques se procesa a través de las llamadas cajas de sustitución, denominadas generalmente S-Box.

Esta es la primera caja de sustitución, representada en una tabla de 4 por 16:

S1
 0123456789101112131415
01441312151183106125907
10157414213110612119538
24114813621115129731050
31512824917511314100613

Un ejemplo del funcionamiento de la caja de sustitución es el siguiente:

Sea 101110 el primero de los 8 bloques. El primer y último bit dan 10, es decir, 2 en valor binario. Los bits 2, 3, 4 y 5 dan 0111, o 7 en valor binario. Por lo tanto, el resultado de la caja de sustitución es el valor ubicado en la línea 2, de la columna 7. Es el valor 11 o 1011 en binario.

Cada uno de los 8 bloques de 6 bits pasa a través de la función de selección correspondiente, dando un resultado de 8 valores con 4 bits cada uno. A continuación se presentan las cajas de sustitución restantes:

S2
 0123456789101112131415
01518146113497213120510
13134715281412011069115
20147111041315812693215
31381013154211671205149

S3
 0123456789101112131415
01009146315511312711428
11370934610285141211151
21364981530111212510147
31101306987415143115212

S4
 0123456789101112131415
07131430691012851112415
11381156150347212110149
21069012117131513145284
331506101138 94511127214

S5
 0123456789101112131415
02124171011685315130149
11411212471315015103986
24211110137815912563014
31181271142136150910453

S6
 0123456789101112131415
01211015926801334147511
11015427129561131401138
29141552812370410113116
34321295151011141760813

S7
 0123456789101112131415
04112141508133129751061
11301174911014351221586
21411131237141015680592
36111381410795015142312

S8
 0123456789101112131415
01328461511110931450127
11151381037412561101492
17114191214206101315358
12114741081315129035611

Por lo tanto, cada bloque de 6 bits se sustituye por un bloque de 4 bits. Estos bits se combinan para formar un bloque de 32 bits.

Finalmente, el bloque de 32 bits se somete a una permutación P. A continuación, mostramos la tabla:

P
167202129122817
11523265183110
282414322739
19133062211425

El conjunto de estos resultados salidos de P están sujetos a un OR exclusivo con inicial, para devolver , en tanto que la inicial devuelve .

Estos nuevos valores son los que serán usados en la siguiente ronda como y iniciales.

El conjunto de estos pasos (rondas) se reitera 16 veces.

Al final de las rondas, los dos bloques y se vuelven a conectar y se someten a una permutación inicial inversa conocida como IP-1:

IP-1
408481656246432
397471555236331
386461454226230
375451353216129
364441252206028
353431151195927
342421050185826
33141949175725

El resultado que surge es el texto cifrado.


Descifrado

El proceso de descifrado es exactamente igual al cifrado descrito anteriormente, pero invirtiendo el orden en el que se hace uso del conjunto de sub llaves. Es decir, para el cifrado comenzamos usando la primer sub llave en la primer ronda y seguimos de forma ascendente hasta , para el descifrado comenzaríamos usando en la primer y seguimos de forma descendente hasta .


Referencias

  1. Douglas Stinson. (1995). Cryptography: Theory and Practice. United States: CRC Press.
  2. Prof. Dr. Eng. Monica Borda. (2011). Fundamentals in Information Theory and Coding. Berlin Heidelberg: Springer.
  3. Wade Trappe, Lawrence C. Washington. (2006). Introduction to Cryptography with Coding Theory. United States: Prentice Hall.