Saltar al contenido
El bit perdido
Newsletter

Lección 7 de 13

Las subclaves de DES: de 56 bits a 16 claves de ronda

Cómo DES fabrica las 16 subclaves de 48 bits a partir de la clave: bits de paridad, PC-1, rotaciones, PC-2. Además, claves débiles y propiedad de complementación.

Al terminar sabrás:

  • Explicar por qué la clave de 64 bits de DES solo tiene 56 bits efectivos
  • Calcular C0, D0, C1, D1 y la subclave K1 de un ejemplo real
  • Generar las subclaves en orden inverso rotando a la derecha
  • Reconocer las cuatro claves débiles y la propiedad de complementación

Si sabes qué es un número en binario y sumar módulo 2 (sin llevadas), puedes seguirlo. Lo demás (hexadecimal, XOR, permutaciones, polinomios módulo 2 y cuerpos finitos) se explica sobre la marcha.

Ya conocemos el esquema de DES (lección 5) y el interior de cada ronda (lección 6). Solo nos falta una pieza: en la ronda 1 usamos K1=1B02EFFC7072K_1 = \texttt{1B02EFFC7072} sin decir de dónde sale. Hoy lo explicamos. Con ello, DES queda completo en nuestro relato: Alicia y Bernardo comparten una clave KK, y cada uno fabrica con ella las 16 claves de ronda. Además veremos dos rarezas de DES que se heredan de este calendario de claves: las claves débiles y la complementación.

La idea

La clave KK tiene 64 bits, pero solo se usan 56. Esos 56 bits se parten en dos mitades de 28, CC y DD. En cada ronda las dos mitades rotan hacia la izquierda una o dos posiciones, y de las 56 posiciones se escogen 48 para formar la subclave de esa ronda. No hay ninguna operación complicada: son permutaciones, selecciones y rotaciones. Toda la no linealidad de DES está en las cajas S, no aquí.

Los pasos

Recuerda que DES numera los bits de 1 a 64 desde la izquierda.

Bits de paridad

Los bits 8, 16, 24, 32, 40, 48, 56 y 64 de KK (el último de cada byte) son bits de paridad: se escogen para que cada byte tenga un número impar de unos, de modo que un error al copiar la clave pueda detectarse. No participan en el cifrado. Quedan 64−8=5664 - 8 = 56 bits efectivos, y por eso el espacio de claves de DES es de 2562^{56} claves.

PC-1: de 64 a 56 bits

La primera permutación, PC-1 (permuted choice 1), descarta los ocho bits de paridad y reordena los otros 56. La tabla, por filas de 7, es:

5749413325179
1585042342618
1025951433527
1911360524436
63554739312315
7625446383022
1466153453729
211352820124

Las cuatro primeras filas dan C0C_0 (28 bits) y las cuatro últimas, D0D_0 (28 bits). Ningún número de la tabla es múltiplo de 8.

Rotaciones

Para i=1,…,16i = 1,\dots,16, se rotan Ci−1C_{i-1} y Di−1D_{i-1} hacia la izquierda rir_i posiciones, con

(r1,…,r16)=(1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1).(r_1,\dots,r_{16}) = (1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1).

Se obtienen CiC_i y DiD_i. La suma de las rotaciones es 2828: hay cuatro rotaciones de una posición (rondas 1, 2, 9 y 16) y doce de dos, y 4+24=284 + 24 = 28. Como cada mitad tiene 28 bits, tras las 16 rondas ha dado exactamente una vuelta completa: C16=C0C_{16} = C_0 y D16=D0D_{16} = D_0.

PC-2: de 56 a 48 bits

Se unen CiDiC_i D_i (56 bits) y la permutación PC-2 (permuted choice 2) escoge 48 de ellos, ordenados así, y forma KiK_i:

1417112415
3281562110
2319124268
1672720132
415231374755
304051453348
444939563453
464250362932

Las cuatro primeras filas (24 bits) toman posiciones de CiC_i (números del 1 al 28), y las cuatro últimas (24 bits) de DiD_i (números del 29 al 56). Se descartan ocho posiciones de las 56. Cada subclave KiK_i es, pues, una selección de 48 de los 56 bits de la clave efectiva, distinta en cada ronda.

Ejemplo resuelto

Seguimos con K=133457799BBCDFF1K = \texttt{133457799BBCDFF1}.

Paso 1: KK en bits y paridad. Por bytes:

bytehexbitsunos
113\texttt{13}00010011000100113
234\texttt{34}00110100001101003
357\texttt{57}01010111010101115
479\texttt{79}01111001011110015
59B\texttt{9B}10011011100110115
6BC\texttt{BC}10111100101111005
7DF\texttt{DF}11011111110111117
8F1\texttt{F1}11110001111100015

Cada byte tiene un número impar de unos, así que la paridad es correcta.

Paso 2: PC-1. Aplicamos la tabla. El resultado, en 8 grupos de 7 bits, es

1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111.1111000\ 0110011\ 0010101\ 0101111\ 0101010\ 1011001\ 1001111\ 0001111.

Las dos mitades son:

C0=1111000 0110011 0010101 0101111,C_0 = 1111000\ 0110011\ 0010101\ 0101111, D0=0101010 1011001 1001111 0001111.D_0 = 0101010\ 1011001\ 1001111\ 0001111.

Paso 3: la primera rotación. Como r1=1r_1 = 1, pasamos el primer bit de cada mitad al final:

C1=1110000 1100110 0101010 1011111,C_1 = 1110000\ 1100110\ 0101010\ 1011111, D1=1010101 0110011 0011110 0011110.D_1 = 1010101\ 0110011\ 0011110\ 0011110.

Paso 4: PC-2. Juntamos C1D1C_1D_1 y leemos las posiciones de la tabla de PC-2. Por ejemplo, el primer grupo de K1K_1 toma las posiciones 14, 17, 11, 24, 1 y 5 de C1D1C_1D_1, cuyos valores son 0,0,0,1,1,00, 0, 0, 1, 1, 0. Siguiendo así con las 48 posiciones sale

K1=000110 110000 001011 101111111111 000111 000001 110010=1B02EFFC7072,\begin{gathered} K_1 = 000110\ 110000\ 001011\ 101111 \\ 111111\ 000111\ 000001\ 110010 = \texttt{1B02EFFC7072}, \end{gathered}

que es exactamente la subclave que usamos en la ronda 1 de la lección 6.

Paso 5: las demás. La tabla siguiente da las 16 subclaves del ejemplo, todas calculadas del mismo modo:

iirir_iKiK_iiirir_iKiK_i
111B02EFFC7072\texttt{1B02EFFC7072}91E0DBEBEDE781\texttt{E0DBEBEDE781}
2179AED9DBC9E5\texttt{79AED9DBC9E5}102B1F347BA464F\texttt{B1F347BA464F}
3255FC8A42CF99\texttt{55FC8A42CF99}112215FD3DED386\texttt{215FD3DED386}
4272ADD6DB351D\texttt{72ADD6DB351D}1227571F59467E9\texttt{7571F59467E9}
527CEC07EB53A8\texttt{7CEC07EB53A8}13297C5D1FABA41\texttt{97C5D1FABA41}
6263A53E507B2F\texttt{63A53E507B2F}1425F43B7F2E73A\texttt{5F43B7F2E73A}
72EC84B7F618BC\texttt{EC84B7F618BC}152BF918D3D3F0A\texttt{BF918D3D3F0A}
82F78A3AC13BFB\texttt{F78A3AC13BFB}161CB3D8B0E17F5\texttt{CB3D8B0E17F5}

Fíjate en que K16K_{16} sale de rotar una sola posición, la del final del calendario, y que C16=C0C_{16} = C_0: tras las 16 rotaciones volvemos al punto de partida.

Descifrar y las subclaves

Como vimos en la lección 5, descifrar es cifrar con K16,K15,…,K1K_{16}, K_{15},\dots,K_1. Para eso hay que tener las subclaves en orden inverso, y se puede hacer de dos maneras: calcular las 16 y leerlas al revés, o ir rotando hacia la derecha. Esto último es posible precisamente porque C16=C0C_{16} = C_0 y D16=D0D_{16} = D_0: en la ronda de descifrado 1, K16K_{16} sale de C16D16C_{16}D_{16}, que es C0D0C_0D_0, sin rotar. Luego, en cada ronda de descifrado, se rota hacia la derecha: 0 posiciones en la primera y después r16,r15,…,r2r_{16}, r_{15}, \dots, r_2, es decir, (0,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1)(0,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1).

Dos curiosidades

Claves débiles

Si C0C_0 y D0D_0 son cada una de ceros o de unos, rotarlas no las cambia, y las 16 subclaves son iguales. Hay cuatro claves así, las claves débiles de DES, que se ven aquí con su forma en hexadecimal:

claveC0C_0D0D_0subclaves
0101010101010101\texttt{0101010101010101}todo 00todo 00todas 000000000000\texttt{000000000000}
FEFEFEFEFEFEFEFE\texttt{FEFEFEFEFEFEFEFE}todo 11todo 11todas FFFFFFFFFFFF\texttt{FFFFFFFFFFFF}
E0E0E0E0F1F1F1F1\texttt{E0E0E0E0F1F1F1F1}todo 11todo 00todas FFFFFF000000\texttt{FFFFFF000000}
1F1F1F1F0E0E0E0E\texttt{1F1F1F1F0E0E0E0E}todo 00todo 11todas 000000FFFFFF\texttt{000000FFFFFF}

Con una clave así, cifrar y descifrar usan las mismas subclaves (las 16 son iguales, y al invertir el orden queda lo mismo). Es decir, EK=DKE_K = D_K y cifrar dos veces devuelve el mensaje: EK(EK(M))=ME_K(E_K(M)) = M. Lo hemos comprobado con las cuatro claves y con el mensaje del ejemplo. Aunque son solo 4 entre 2562^{56} claves, no deben usarse. Hay además seis parejas de claves semidébiles: cifrar con una de la pareja equivale a descifrar con la otra (lo cuenta el Handbook of Applied Cryptography, capítulo 7).

Complementación

Si xˉ\bar x es xx con todos los bits cambiados, DES cumple

EKˉ(Mˉ)=EK(M)‾.E_{\bar K}(\bar M) = \overline{E_K(M)}.

La razón: las subclaves de Kˉ\bar K son las complementarias de las de KK, y en ff se hace E(Rˉ)⊕Kˉi=E(R)⊕KiE(\bar R)\oplus \bar K_i = E(R)\oplus K_i (el complementario aparece dos veces y se cancela), así que ff no cambia. En la ronda 1, L0L_0 y R0R_0 se complementan, ff da lo mismo, y R1=Lˉ0⊕fR_1 = \bar L_0\oplus f también está complementado. Y así hasta el final.

Con el ejemplo: Kˉ=ECCBA8866443200E\bar K = \texttt{ECCBA8866443200E}, Mˉ=FEDCBA9876543210\bar M = \texttt{FEDCBA9876543210}, y

EKˉ(Mˉ)=7A17ECABF0F54BFA=85E813540F0AB405‾.E_{\bar K}(\bar M) = \texttt{7A17ECABF0F54BFA} = \overline{\texttt{85E813540F0AB405}}.

Qué ahorra en fuerza bruta. Eva tiene un mensaje MM y su criptograma c1c_1, y además Mˉ\bar M con su criptograma c2c_2 (texto elegido). Recorre solo una clave de cada pareja {K′,Kˉ′}\{K', \bar K'\}, y para cada una calcula una sola vez EK′(M)E_{K'}(M). Si da c1c_1, K′K' es candidata. Si da cˉ2\bar c_2, la candidata es Kˉ′\bar K', porque EKˉ′(Mˉ)=EK′(M)‾=c2E_{\bar K'}(\bar M) = \overline{E_{K'}(M)} = c_2. (Una candidata se confirma con otro par, porque alguna clave falsa puede acertar por azar.) Con un cálculo se prueban dos claves, así que basta recorrer la mitad: 2552^{55} claves en vez de 2562^{56}. Es un ahorro de un factor 2, nada decisivo, pero muestra que una propiedad matemática de la estructura se traduce en trabajo de menos.

Ejercicios

Ejercicio 1

Cambia el último bit de la clave del ejemplo: K′=133457799BBCDFF0K' = \texttt{133457799BBCDFF0}. ¿Cambia el criptograma de M=0123456789ABCDEFM = \texttt{0123456789ABCDEF}? ¿Cuántas claves de 64 bits cifran exactamente igual que KK, sea cual sea el mensaje?

Ver la solución

El último bit de KK es el bit 64, un bit de paridad: PC-1 no lo usa. Las subclaves son idénticas, y el criptograma también: 85E813540F0AB405\texttt{85E813540F0AB405} (lo hemos comprobado). Cada uno de los 8 bits de paridad se puede cambiar libremente sin tocar las subclaves, así que hay 28=2562^8 = 256 claves de 64 bits que dan las mismas subclaves y, por tanto, cifran igual cualquier mensaje. De esas 256, solo una cumple la paridad impar en los 8 bytes. Por eso se habla de 2562^{56} claves y no de 2642^{64}.

Ejercicio 2

Con C1=1110000 1100110 0101010 1011111C_1 = 1110000\,1100110\,0101010\,1011111 y D1=1010101 0110011 0011110 0011110D_1 = 1010101\,0110011\,0011110\,0011110, calcula C2C_2 y D2D_2 (recuerda r2=1r_2 = 1).

Ver la solución

Rotamos una posición a la izquierda: el primer bit pasa al final.

C1C_1 empieza por 11; al quitarlo queda 110000 1100110 0101010 1011111110000\,1100110\,0101010\,1011111 y se añade 11 al final:

C2=1100001 1001100 1010101 0111111.C_2 = 1100001\,1001100\,1010101\,0111111.

D1D_1 empieza por 11; al quitarlo y ponerlo al final:

D2=0101010 1100110 0111100 0111101.D_2 = 0101010\,1100110\,0111100\,0111101.

Ejercicio 3

Para la clave débil K=E0E0E0E0F1F1F1F1K = \texttt{E0E0E0E0F1F1F1F1}, PC-1 da C0C_0 todo de unos y D0D_0 todo de ceros. Demuestra que las 16 subclaves valen FFFFFF000000\texttt{FFFFFF000000} y que cifrar dos veces devuelve el mensaje.

Ver la solución

Rotar una cadena de 28 unos, o de 28 ceros, la deja igual. Así que CiC_i son todo unos y DiD_i todo ceros, para todo ii. La permutación PC-2 toma sus primeras 24 posiciones de CiC_i (números del 1 al 28) y las otras 24 de DiD_i (del 29 al 56), así que KiK_i son 24 unos seguidos de 24 ceros, es decir, FFFFFF000000\texttt{FFFFFF000000}, en las 16 rondas.

Como las 16 subclaves son iguales, usarlas en orden inverso es lo mismo que usarlas en orden directo: DK=EKD_K = E_K. Entonces EK(EK(M))=DK(EK(M))=ME_K(E_K(M)) = D_K(E_K(M)) = M. Con el mensaje del ejemplo, la comprobación numérica lo confirma.

En resumen

  • La clave de 64 bits tiene 8 bits de paridad que no se usan: la clave efectiva es de 56 bits, 2562^{56} claves.
  • Las subclaves salen de PC-1 (64 a 56), dos mitades CC y DD de 28 bits que rotan 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,11,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1 posiciones (suman 28) y PC-2 (56 a 48).
  • Como la suma de rotaciones es 28, C16=C0C_{16} = C_0 y D16=D0D_{16} = D_0: al descifrar, las subclaves en orden inverso se generan rotando a la derecha.
  • Hay cuatro claves débiles, con las 16 subclaves iguales: cifrar dos veces devuelve el mensaje.
  • DES cumple EKˉ(Mˉ)=EK(M)‾E_{\bar K}(\bar M) = \overline{E_K(M)}, y con ella la búsqueda exhaustiva de la clave se reduce a la mitad.

Siguiente lección: La caída de DES y el Triple DES

Para profundizar