Lección 4 de 13
Redes de Feistel: cifrar con una función que no se invierte
Cómo funciona una red de Feistel, por qué se puede descifrar aunque la función interna no sea invertible y por qué descifrar es cifrar con las subclaves al revés.
Al terminar sabrás:
- Aplicar una ronda de Feistel a un bloque partido en dos mitades
- Explicar por qué la ronda se puede invertir aunque la función F no lo sea
- Descifrar con la misma estructura usando las subclaves en orden inverso
- Entender por qué una sola ronda de Feistel no protege nada
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 que un cifrado de bloque es una familia de permutaciones y que se construye repitiendo rondas. Hablamos de dos arquitecturas, y hoy abrimos la primera: la red de Feistel, la de DES. Su truco es sorprendente. Para descifrar hay que deshacer cada ronda, y parece que para eso la función que mezcla los bits tendría que ser invertible. No hace falta. Veamos por qué, con un ejemplo de 8 bits que cabe en una hoja.
La idea
Parte el bloque en dos mitades, la izquierda y la derecha . En una ronda ocurre esto:
- La mitad derecha pasa tal cual a ser la nueva mitad izquierda.
- La mitad izquierda se mezcla (XOR) con el resultado de una función aplicada a la mitad derecha y a la subclave. Eso es la nueva mitad derecha.
Una mitad se queda quieta y la otra cambia. Así, cada ronda protege la mitad que cambia con algo calculado desde la que no cambia. En la ronda siguiente los papeles se intercambian.
La idea clave es que la función solo se calcula hacia delante. En ningún momento hay que «deshacerla»: se vuelve a calcular con la misma entrada y su resultado se vuelve a sumar con XOR, y como , desaparece. Eso es lo que ahorra el diseño: puede ser tan enrevesada y tan poco invertible como se quiera.
La ronda de Feistel
Sea el bloque antes de la ronda , con y de bits cada una, y sea la subclave de esa ronda. La ronda es
La función se llama función de ronda. Puede ser cualquier cosa que se calcule bien: en DES mezcla cajas S y permutaciones (lección 6); en nuestro ejemplo será mucho más sencilla.
Con rondas, el bloque de entrada llega hasta . (Escribimos el mensaje y el criptograma de un bloque en mayúscula, y , como hace el estándar de DES; en las lecciones de DES, donde nombra mitades de la clave, el criptograma será .) En DES (y aquí) la salida es el bloque con las mitades intercambiadas:
La razón de ese intercambio final se ve enseguida: hace que descifrar sea exactamente lo mismo que cifrar.
Por qué se puede invertir
Mira la ronda desde el final. Conocemos y la subclave . Como , ya tenemos . Y de la segunda ecuación, sumando en los dos lados:
Solo hemos calculado hacia delante, con una entrada que ya conocemos. No hace falta invertir . Por eso toda ronda de Feistel es una permutación de los bloques, sea cual sea .
Descifrar es cifrar con las subclaves al revés
Supón que has cifrado con y obtenido . Para descifrar metes en la misma máquina, pero con las subclaves en orden . En la primera ronda de descifrado el bloque de entrada es . Ojo: ahora la mitad izquierda de la entrada es y la derecha es , así que se calcula sobre . Aplicamos la ronda:
(Usamos que y .) El resultado es , es decir, el bloque de la ronda anterior con las mitades intercambiadas. Cada ronda de descifrado deshace una ronda de cifrado, y al acabar queda . El intercambio final lo devuelve a .
Esto tiene una ventaja práctica enorme: el mismo circuito (o el mismo programa) sirve para cifrar y descifrar. Solo cambia el orden de las subclaves.
Ejemplo resuelto
Usamos un Feistel de juguete con bloques de 8 bits, mitades , de 4 bits y 3 rondas. La función de ronda es
donde es la caja S de 4 bits de PRESENT, la de la lección anterior:
(La entrada , de 0 a 15, se sustituye por la posición de la lista.) Las subclaves son , y . El mensaje es , es decir, y .
Cifrar
Ronda 1 ().
- , que es el 8. . Luego .
- .
- .
Ronda 2 ().
- , que es el 15. . Luego .
- .
- .
Ronda 3 ().
- , que es el 12. . Luego .
- .
- .
Hemos llegado a . Con el intercambio final:
Descifrar
Metemos como y usamos las subclaves al revés: .
Ronda con . (el 12), . Nueva ; nueva . Queda .
Ronda con . (el 15), . Nueva ; nueva . Queda .
Ronda con . (el 8), . Nueva ; nueva . Queda .
Con el intercambio final: . Recuperamos el mensaje. Observa que aparecen las mismas (0100, 0010, 0011) que al cifrar, en orden inverso.
Como cada ronda es una permutación, el conjunto de las tres rondas también lo es: este cifrado de juguete permuta los 256 bloques de 8 bits (comprobado calculando los 256 resultados). Pero por supuesto es de mentira: con 8 bits de bloque y 12 de clave se rompe en un instante. DES usa los mismos ingredientes, a lo grande.
Una sola ronda no sirve
Fíjate en que la mitad izquierda de la salida de una ronda es la mitad derecha de la entrada, sin tocar. Con una ronda, la mitad del criptograma es un trozo del mensaje a la vista. El ejercicio 1 lo desarrolla. Por eso se encadenan varias rondas (DES usa 16): así cada bit acaba influyendo en todos los demás.
Ejercicios
Ejercicio 1
Considera una sola ronda de Feistel, sin el intercambio final, con subclave y cualquier función . Prueba que la mitad izquierda de la salida es la mitad derecha de la entrada y explica qué debilidad supone para Eva. Compruébalo con y usando la del ejemplo. Después ponte en el lugar de Eva: conoce y la salida, pero no . ¿Puede averiguar ?
Ver la solución
La salida es . Por definición, : es la mitad derecha de la entrada, tal cual. La debilidad: Eva ve en claro la mitad derecha del mensaje con solo mirar el criptograma. Además, el resto del cifrado es , y como Eva conoce , solo queda un XOR con algo que depende de la subclave. Por eso se encadenan varias rondas.
Con y : (el 15), , . La salida es , es decir . La mitad izquierda coincide con .
Eva sí puede averiguar . De saca . En la lista de , el está en la posición 15, así que , y como conoce , obtiene . Con una ronda y esta , un solo par (mensaje, salida) delata la subclave.
Ejercicio 2
Cifra con el Feistel de juguete (mismas tres subclaves , , ) el mensaje y descífralo después.
Ver la solución
Aquí y .
Ronda 1 (): (el 7), . , .
Ronda 2 (): (el 12), . , .
Ronda 3 (): (el 5), . , .
Con el intercambio, (en hexadecimal, ).
Descifrado: entra con .
- : , . Queda .
- : , . Queda .
- : , . Queda .
Intercambiando: .
Ejercicio 3
Usa ahora la función (AND bit a bit), con . Esta no es invertible como función de : hay valores de distintos con la misma . Comprueba, con una ronda de Feistel, que aun así los bloques y se envían a bloques distintos, y que se puede recuperar la entrada de sabiendo que es la salida de una ronda (sin intercambio final).
Ver la solución
Con , vale para y : cuatro entradas distintas con la misma salida, luego no es inyectiva.
Una ronda es .
- Bloque : , , . Salida .
- Bloque : , , . Salida .
Las salidas son distintas, porque la mitad de la entrada se conserva en la izquierda.
Para invertir una salida : y . La entrada era . Comprobación: con y , y . Es correcto.
En resumen
- Una ronda de Feistel parte el bloque en y hace , .
- Siempre se puede invertir, aunque no sea invertible: .
- Descifrar es cifrar con las subclaves en orden inverso, gracias al intercambio final de las mitades.
- Con una sola ronda, la mitad izquierda de la salida es la derecha de la entrada: hacen falta varias rondas (DES usa 16).
- DES es una red de Feistel; AES, en cambio, es una red de sustitución-permutación.
Siguiente lección: DES visto desde arriba
Para profundizar
- NIST, FIPS 46-3, Data Encryption Standard (DES) (1999).
- C. Paar y J. Pelzl, Understanding Cryptography (2010).
- D. Boneh y V. Shoup, A Graduate Course in Applied Cryptography (2023).
- A. Bogdanov y otros, PRESENT: An Ultra-Lightweight Block Cipher, CHES 2007, LNCS 4727 (2007).