Saltar al contenido
El bit perdido
Newsletter

Lección 6 de 13

La función f de DES y sus cajas S

Dentro de cada ronda de DES: expansión, XOR con la subclave, ocho cajas S, permutación. Calculamos la ronda 1 entera y vemos por qué las cajas S no son lineales.

Al terminar sabrás:

  • Describir las cuatro etapas de f: expansión E, XOR con la subclave, cajas S y permutación P
  • Leer una caja S: fila por los bits extremos, columna por los cuatro centrales
  • Calcular a mano la ronda 1 del ejemplo de DES
  • Explicar por qué las cajas S deben ser no lineales y qué son los criptoanálisis diferencial y lineal

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.

En la lección anterior vimos el esqueleto de DES: la permutación inicial, 16 rondas de Feistel y la final. Dejamos una caja negra, la función f(R,Ki)f(R, K_i), que toma 32 bits y una subclave de 48 y devuelve 32 bits. Hoy la abrimos. Es ahí donde DES tiene su confusión: la no linealidad de todo el cifrado sale de unas pocas tablas, las cajas S.

Seguimos con el ejemplo del hilo, con la ronda 1 hecha a mano de principio a fin. Las subclaves, por ahora, nos las dan hechas: en la lección 7 veremos cómo salen.

La idea

Una red de Feistel puede usar como ff cualquier función, sin que tenga que ser invertible. DES elige una que mezcla bien en cuatro etapas:

  1. Expansión EE. Los 32 bits de RR se convierten en 48, repitiendo algunos.
  2. Mezcla con la clave. Se hace XOR con la subclave KiK_i de 48 bits.
  3. Cajas S. Los 48 bits se parten en ocho trozos de 6 bits, y cada trozo pasa por una tabla que lo cambia por 4 bits. Salen 8×4=328\times 4 = 32 bits.
  4. Permutación PP. Los 32 bits se reordenan.

Solo la etapa 3 es no lineal. Las otras tres (expandir, hacer XOR con la subclave y permutar) son lineales o afines sobre F2\mathbb{F}_2. Lineal quiere decir que respeta el XOR, T(x⊕y)=T(x)⊕T(y)T(x\oplus y) = T(x)\oplus T(y); afín, que es lineal más una constante, como cuando se suma la subclave fija. Por eso las cajas S son lo más importante de DES.

Las cuatro etapas

Expansión EE

EE es una lista de 48 posiciones: el bit jj de la salida es el bit E[j]E[j] de la entrada. Por filas de 6, que luego serán las entradas de las ocho cajas:

3212345
456789
8910111213
121314151617
161718192021
202122232425
242526272829
28293031321

La regla es sencilla. Se parte RR en ocho bloques de 4 bits. A cada bloque se le añade, por la izquierda, el último bit del bloque anterior, y por la derecha el primer bit del bloque siguiente (el primer bloque toma el bit 32 y el último, el bit 1: se da la vuelta). Así, 16 bits de RR aparecen dos veces.

XOR con la subclave

Es la única etapa donde entra la clave: E(R)⊕KiE(R)\oplus K_i, con 48 bits cada uno.

Las ocho cajas S

Cada caja S (de substitution box) S1,…,S8S_1,\dots,S_8 es una tabla de 4 filas por 16 columnas, con números del 0 al 15. Recibe 6 bits b1b2b3b4b5b6b_1b_2b_3b_4b_5b_6 y devuelve un número de 4 bits. Cómo se lee:

  • La fila la forman los bits extremos b1b6b_1b_6, leídos en binario (de 0 a 3).
  • La columna la forman los cuatro bits centrales b2b3b4b5b_2b_3b_4b_5, leídos en binario (de 0 a 15).
  • El número que está en esa casilla, escrito en 4 bits, es la salida.

Esta es la caja S1S_1 completa. Para que se vea en el móvil la hemos transpuesto: cada fila de la tabla es una columna de la caja.

columnafila 0fila 1fila 2fila 3
0140415
1415112
2137148
31482
4214134
515269
6111321
781117
8310155
91061211
1061293
111211714
1259310
1395100
140356
1578013

Las otras siete cajas, S2,…,S8S_2,\dots,S_8, tienen la misma forma y están en el apéndice 1 de FIPS 46-3 (enlace en las fuentes). Cada fila de cada caja contiene los números del 0 al 15 una sola vez. Eso significa que, fijados los dos bits extremos, la caja es una permutación de los 16 valores de los cuatro bits centrales.

Permutación PP

Es la lista de 32 posiciones siguiente, por filas de 4:

1672021
29122817
1152326
5183110
282414
322739
1913306
2211425

Su misión es repartir los 4 bits de salida de cada caja entre varias cajas de la ronda siguiente. Por ejemplo, los cuatro bits que salen de S1S_1 van a las posiciones 9, 17, 23 y 31 de ff, muy separadas entre sí.

Ejemplo resuelto

Calculamos la ronda 1 del ejemplo de la lección 5: K=133457799BBCDFF1K = \texttt{133457799BBCDFF1}, M=0123456789ABCDEFM = \texttt{0123456789ABCDEF}. Allí obtuvimos R0=F0AAF0AAR_0 = \texttt{F0AAF0AA}. La primera subclave (se calcula en la lección 7) es K1=1B02EFFC7072K_1 = \texttt{1B02EFFC7072}.

Paso 1: R0R_0 en bits. R0=1111 0000 1010 1010 1111 0000 1010 1010R_0 = 1111\,0000\,1010\,1010\,1111\,0000\,1010\,1010.

Paso 2: expansión. Bloque a bloque, añadimos el vecino de cada lado:

bloque de R0R_0vecino izq.vecino der.resultado
1111111100 (bit 32)00011110011110
000000001111100001100001
101010100011010101010101
101010100011010101010101
111111110000011110011110
000000001111100001100001
101010100011010101010101
101010100011010101010101

Así,

E(R0)=011110 100001 010101 010101011110 100001 010101 010101.\begin{gathered} E(R_0) = 011110\ 100001\ 010101\ 010101 \\ 011110\ 100001\ 010101\ 010101. \end{gathered}

Paso 3: XOR con K1K_1. K1K_1 en grupos de 6 bits es

000110 110000 001011 101111111111 000111 000001 110010.\begin{gathered} 000110\ 110000\ 001011\ 101111 \\ 111111\ 000111\ 000001\ 110010. \end{gathered}

Hacemos XOR bloque a bloque:

bloqueE(R0)E(R_0)K1K_1XOR
1011110011110000110000110011000011000
2100001100001110000110000010001010001
3010101010101001011001011011110011110
4010101010101101111101111111010111010
5011110011110111111111111100001100001
6100001100001000111000111100110100110
7010101010101000001000001010100010100
8010101010101110010110010100111100111

Paso 4: las cajas S. Cada bloque de 6 bits b1…b6b_1\dots b_6 da la fila b1b6b_1b_6 y la columna b2b3b4b5b_2b_3b_4b_5:

cajaentradafilacolumnavalorsalida
S1S_1011000011000012501010101
S2S_2010001010001181211001100
S3S_3011110011110015810001000
S4S_4111010111010213200100010
S5S_5100001100001301110111011
S6S_610011010011023501010101
S7S_7010100010100010910011001
S8S_810011110011133701110111

Para comprobar las otras siete necesitas sus tablas, del apéndice 1 de FIPS 46-3. Como muestra, la fila 1 de S2S_2 es

3, 13, 4, 7, 15, 2, 8, 14,12, 0, 1, 10, 6, 9, 11, 53,\ 13,\ 4,\ 7,\ 15,\ 2,\ 8,\ 14,\\ 12,\ 0,\ 1,\ 10,\ 6,\ 9,\ 11,\ 5

y en su columna 8 está el 12 de la tabla.

Comprobemos la primera con la tabla de arriba. La entrada es 011000011000: los bits extremos son 00 y 00, así que la fila es 0. Los cuatro centrales son 11001100, que es la columna 12. En la tabla de S1S_1, columna 12, fila 0: el valor es 5, que es 01010101. Para S4S_4, la entrada 111010111010 tiene bits extremos 11 y 00 (fila 102=210_2 = 2) y centrales 11011101 (columna 13).

Juntamos las ocho salidas:

0101 1100 1000 0010  1011 0101 1001 0111.0101\ 1100\ 1000\ 0010\ \ 1011\ 0101\ 1001\ 0111.

Paso 5: permutación PP. Reordenamos esos 32 bits con la tabla PP y sale

f(R0,K1)=0010 0011 0100 10101010 1001 1011 1011=234AA9BB.\begin{gathered} f(R_0,K_1) = 0010\ 0011\ 0100\ 1010 \\ 1010\ 1001\ 1011\ 1011 = \texttt{234AA9BB}. \end{gathered}

Paso 6: cerrar la ronda. R1=L0⊕f=CC00CCFF⊕234AA9BB=EF4A6544R_1 = L_0\oplus f = \texttt{CC00CCFF}\oplus\texttt{234AA9BB} = \texttt{EF4A6544} y L1=R0=F0AAF0AAL_1 = R_0 = \texttt{F0AAF0AA}, como en la lección anterior.

Por qué las cajas S no son lineales

Imagina que las cajas S fueran lineales, es decir, que cumplieran S(x⊕y)=S(x)⊕S(y)S(x\oplus y) = S(x)\oplus S(y). Entonces EE, el XOR con la clave, las cajas y PP serían todas lineales sobre F2\mathbb{F}_2 (vistas como funciones del mensaje y de la clave a la vez). Todo DES sería una función lineal de la clave y del mensaje, y la clave sería la solución de un sistema de ecuaciones lineales. Eva lo resolvería con unos cuantos pares (mensaje, criptograma) conocidos, con eliminación gaussiana (el método de bachillerato para resolver sistemas de ecuaciones, pero sumando módulo 2), y no habría seguridad alguna.

Las cajas S rompen eso. Es el único sitio de DES donde S(x⊕y)≠S(x)⊕S(y)S(x\oplus y)\neq S(x)\oplus S(y) (el ejercicio 2 lo comprueba con S1S_1). Y están diseñadas con cuidado: las filas son permutaciones, y cambiar un solo bit de la entrada de una caja cambia al menos dos bits de su salida (lo comprobamos para las ocho cajas con un programa).

Criptoanálisis diferencial y lineal

Cuando DES era ya un estándar, aparecieron dos técnicas generales para atacar este tipo de cifrados:

  • Criptoanálisis diferencial (Biham y Shamir, 1990-1991): estudia cómo una diferencia Δ=x⊕x′\Delta = x\oplus x' entre dos entradas se propaga a la diferencia de las salidas, y qué diferencias de salida son más probables que otras. Las cajas S son lo que decide cuánto se puede aprovechar eso. Don Coppersmith contó en 1994 que IBM ya conocía esta técnica en 1974 y que los criterios de diseño de las cajas S se habían elegido para resistirla.
  • Criptoanálisis lineal (Matsui, 1993): busca aproximaciones lineales de las cajas S, relaciones entre bits de entrada y de salida que se cumplen con probabilidad algo distinta de 1/21/2, y las encadena a lo largo de las rondas.

Los detalles técnicos de estos ataques quedan fuera del curso. Lo que importa aquí es la idea: todo lo que un cifrado de bloque tenga de aproximadamente lineal o de demasiado regular en sus cajas S es una puerta para Eva. Con todo, DES no cayó por estos ataques, sino por su clave corta, como veremos en la lección 8.

Ejercicios

Ejercicio 1

Con la tabla de S1S_1, calcula S1(011011)S_1(011011), S1(101110)S_1(101110) y S1(111111)S_1(111111) (da la fila, la columna y la salida en 4 bits).

Ver la solución
  • 011011011011: bits extremos 00 y 11, fila 012=101_2 = 1. Centrales 11011101, columna 13. En la fila 1, columna 13 está el 5: salida 01010101.
  • 101110101110: extremos 11 y 00, fila 102=210_2 = 2. Centrales 01110111, columna 7. Fila 2, columna 7: el 11, salida 10111011.
  • 111111111111: extremos 11 y 11, fila 3. Centrales 11111111, columna 15. Fila 3, columna 15: el 13, salida 11011101.

Ejercicio 2

Comprueba que S1S_1 no es lineal: toma x=000001x = 000001 e y=000010y = 000010 y compara S1(x⊕y)S_1(x\oplus y) con S1(x)⊕S1(y)S_1(x)\oplus S_1(y).

Ver la solución

Para x=000001x = 000001: fila 012=101_2=1, columna 0, valor 0. Para y=000010y = 000010: fila 0, columna 0001=10001 = 1, valor 4. Para x⊕y=000011x\oplus y = 000011: fila 1, columna 1, valor 15.

Por otra parte, S1(x)⊕S1(y)=0⊕4=4S_1(x)\oplus S_1(y) = 0\oplus 4 = 4 (en binario, 0000⊕0100=01000000\oplus 0100 = 0100). Como 15≠415\neq 4, S1(x⊕y)≠S1(x)⊕S1(y)S_1(x\oplus y)\neq S_1(x)\oplus S_1(y): la caja no es lineal. Basta una sola pareja para saberlo.

Ejercicio 3

¿Qué bits de RR aparecen dos veces en E(R)E(R)? ¿En qué cajas S entra el bit 4 de RR? ¿Y el bit 32?

Ver la solución

Dieciséis bits aparecen dos veces: son el primero y el último de cada bloque de 4, es decir, los bits 1, 4, 5, 8, 9, 12, 13, 16, 17, 20, 21, 24, 25, 28, 29 y 32. Los otros 16 (los dos centrales de cada bloque) aparecen una sola vez. En total, 16⋅2+16=4816\cdot 2 + 16 = 48.

El bit 4 de RR está en las posiciones 5 y 7 de E(R)E(R). La posición 5 es el penúltimo bit de la entrada de S1S_1 (el bloque 1 son las posiciones 1 a 6), y es uno de los centrales. La posición 7 es el primer bit de la entrada de S2S_2, un bit extremo, que elige fila. El bit 32 está en las posiciones 1 y 47: el primer bit de S1S_1 (extremo) y el penúltimo de S8S_8 (central).

Es lo que hace la expansión: un bit de RR influye en dos cajas S vecinas, lo que acelera la difusión.

En resumen

  • f(R,Ki)f(R,K_i) = expansión EE (32 a 48 bits), XOR con la subclave, ocho cajas S (6 a 4 bits) y permutación PP.
  • Una caja S se lee con los bits extremos como fila y los cuatro centrales como columna.
  • Las cajas S son lo único no lineal de DES. Si no, todo el cifrado sería un sistema lineal sobre F2\mathbb{F}_2.
  • La ronda 1 del ejemplo da f=234AA9BBf = \texttt{234AA9BB} y R1=EF4A6544R_1 = \texttt{EF4A6544}.
  • Los criptoanálisis diferencial (Biham y Shamir) y lineal (Matsui) estudian cómo se comportan las cajas S.

Siguiente lección: Las subclaves de DES

Para profundizar