Lección 5 de 13
DES visto desde arriba: 16 rondas de Feistel
El esquema completo de DES: permutación inicial, 16 rondas de Feistel, intercambio y permutación final, con un cifrado real calculado ronda a ronda.
Al terminar sabrás:
- Contar la historia de DES y sus parámetros: bloque de 64 bits, clave de 56 y 16 rondas
- Describir el esquema completo: IP, 16 rondas, intercambio de mitades e IP inversa
- Aplicar la permutación inicial a un bloque real y seguir los 16 pares (L, R)
- Explicar por qué IP e IP inversa no añaden seguridad
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 montamos una red de Feistel de juguete con bloques de 8 bits y tres rondas. Ahora pasamos a la de verdad. Es el cifrado que reinó dos décadas como estándar: DES (Data Encryption Standard). En el relato del curso, DES es el primer cifrado de bloque con el que Alicia puede mandar datos a Bernardo sin que Eva los lea, siempre que ella no pruebe todas las claves. Esa última condición será la causa de su caída, pero eso llegará en la lección 8.
Hoy vemos DES desde arriba: qué es, de dónde sale y cómo encajan sus piezas. La función de cada ronda y las subclaves quedan para las lecciones 6 y 7. Con eso, y con un ejemplo completo calculado de principio a fin, tendrás el mapa entero.
La idea
DES es una red de Feistel de 16 rondas. Toma un bloque de 64 bits y una clave, y devuelve otro bloque de 64 bits. Dentro, hace lo mismo que el juguete de la lección 4: parte el bloque en dos mitades de 32 bits, y , y en cada ronda mezcla una mitad con una función de la otra.
Hay tres diferencias con el juguete. Los bloques son de 64 bits, así que bloques posibles. La función es mucho más elaborada: expande, mezcla con la clave, pasa por ocho cajas S y permuta. Y la clave no se usa tal cual: de ella salen 16 subclaves , una por ronda.
Además, antes de la primera ronda y después de la última hay una permutación fija de los 64 bits. No añade seguridad criptográfica (cualquiera puede deshacerla, no lleva clave), pero está en el estándar y hay que respetarla para obtener los mismos criptogramas que todo el mundo.
Un poco de historia
A principios de los años setenta, la agencia estadounidense NBS (National Bureau of Standards, hoy NIST) buscaba un cifrado común para proteger los datos no clasificados del Gobierno, durante su transmisión y almacenados. IBM presentó un cifrado de bloque de tipo Feistel, heredero de su sistema Lucifer, y la agencia de seguridad NSA participó en la evaluación. El resultado se adoptó como estándar federal en 1977 con el nombre de FIPS 46. El documento fue revisado varias veces; la última versión, FIPS 46-3 (1999), es la que usamos como referencia en este curso y está retirada desde 2005.
La polémica empezó enseguida. Se criticó que la clave fuera de solo 56 bits efectivos, y que la NSA hubiera intervenido en el diseño sin que los criterios de las cajas S fueran públicos. En 1994 Don Coppersmith, uno de los diseñadores de IBM, publicó los criterios que se habían seguido para esas cajas, y contó que formaban parte del diseño original. Volveremos sobre ello en la lección 6.
Parámetros
- Bloque: 64 bits.
- Clave: 64 bits, de los que 8 son de paridad y no entran en el cifrado. La clave efectiva es de 56 bits, es decir, claves posibles. Lo vemos en la lección 7.
- Rondas: 16, con una subclave de 48 bits en cada una.
- Estructura: red de Feistel.
Aviso de notación. DES, como el estándar FIPS 46-3, numera los bits de 1 a 64 empezando por la izquierda: el bit 1 es el más significativo. Todas las tablas del estándar usan esta numeración, y nosotros también.
El esquema completo
Sea el bloque de entrada y la clave. Cifrar es:
- Permutación inicial. Se reordenan los 64 bits de con la permutación . Se parte el resultado en (32 bits de la izquierda) y (32 de la derecha).
- Dieciséis rondas. Para :
- Intercambio. Se juntan las mitades al revés: .
- Permutación final. Se aplica (la inversa de ), y sale el criptograma .
Como en el juguete de la lección 4, el intercambio del paso 3 hace que descifrar sea cifrar con las subclaves en orden inverso, : no hace falta un circuito distinto para descifrar.
La permutación inicial
se da como una lista de 64 posiciones: el bit de salida número es el bit número de la entrada. Escrita por filas de 8, es:
| 58 | 50 | 42 | 34 | 26 | 18 | 10 | 2 |
| 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 |
La primera fila dice: el bit 1 de la salida es el bit 58 de la entrada, el bit 2 de la salida es el 50 de la entrada, etc. Las cuatro primeras filas llenan la mitad izquierda y las cuatro últimas la derecha . Mira un detalle: se forma con los bits de posición par de la entrada y con los de posición impar.
Su inversa tiene la tabla opuesta, que empieza por (el bit 1 de la salida es el bit 40 de la entrada).
Ejemplo resuelto
Usamos el ejemplo de J. Orlin Grabbe, «The DES Algorithm Illustrated», muy difundido para seguir DES a mano. Es un ejemplo de ese texto (fechado en 1998), y las cifras de abajo las hemos recalculado nosotros paso a paso. Tomamos, en hexadecimal,
Paso 1: en bits. Escribimos por bytes:
| byte | hex | bits |
|---|---|---|
| 1 | ||
| 2 | ||
| 3 | ||
| 4 | ||
| 5 | ||
| 6 | ||
| 7 | ||
| 8 |
Paso 2: . Aplicamos la tabla. El bit 1 de la salida es el bit 58 de la entrada (el bit 58 es el segundo bit del byte 8, y vale 1), y así hasta 64 bits. Resulta:
| byte | bits | hex |
|---|---|---|
| 1 | ||
| 2 | ||
| 3 | ||
| 4 | ||
| 5 | ||
| 6 | ||
| 7 | ||
| 8 |
Partimos en mitades:
Paso 3: las 16 rondas. En la lección 6 calcularemos con todo detalle la ronda 1. De momento usamos los valores de para ver que la recurrencia funciona. No puedes comprobarlos todavía: la lección 6 te dará las herramientas para la ronda 1. Ya con :
Compruébalo byte a byte: , , , .
La tabla recoge todas las rondas:
| ronda | |||
|---|---|---|---|
| 0 | |||
| 1 | |||
| 2 | |||
| 3 | |||
| 4 | |||
| 5 | |||
| 6 | |||
| 7 | |||
| 8 | |||
| 9 | |||
| 10 | |||
| 11 | |||
| 12 | |||
| 13 | |||
| 14 | |||
| 15 | |||
| 16 |
Fíjate en la columna : es la columna desplazada una fila hacia abajo. Eso es la Feistel, que se limita a mover a la izquierda en cada ronda.
Paso 4: intercambio y . Se juntan las mitades al revés:
Aplicamos y sale el criptograma
Solo nos falta ver cómo se calcula cada y cada subclave. Eso haremos en las dos lecciones siguientes.
Ejercicios
Ejercicio 1
Aplica a los bloques (solo el bit 64 vale 1) y (solo el bit 1 vale 1). Da el resultado en hexadecimal.
Ver la solución
En el único 1 es el bit 64 de la entrada. Buscamos el 64 en la tabla de : está en la cuarta fila, primera columna, es decir, en la posición 25 de la lista. Así que el bit 64 de la entrada pasa a ser el bit 25 de la salida. Entonces el 1 está en el bit 25, que es el primer bit del cuarto byte (): el cuarto byte es . Resultado: .
Para el único 1 es el bit 1 de la entrada. En la tabla, el 1 está en la quinta fila, última columna: posición . El 1 pasa al bit 40 de la salida, que es el último bit del byte 5: . Resultado: .
Ejercicio 2
Con el criptograma del ejemplo, queremos descifrarlo. ¿Cuánto valen y al empezar el descifrado, sin calcular a mano? ¿Con qué subclave se hace la primera ronda?
Ver la solución
El último paso de cifrar fue . Por tanto . Al descifrar, la primera mitad es y la segunda , y de la tabla de arriba:
(Lo hemos comprobado calculando por separado.) La primera ronda de descifrado usa , la última subclave. Como y , esa ronda calcula y deja : se ha deshecho la ronda 16.
Ejercicio 3
Cambiamos el último bit del mensaje: . Calcula y la ronda 1 con el mismo . ¿Cuántos bits distintos hay entre y ? ¿Qué te dice sobre la difusión?
Ver la solución
El bit 64 de pasa a la posición 25 de (ejercicio 1), que está en . El bit 25 es el primer bit del cuarto byte de , así que ese byte pasa de a : , mientras que . Como no ha cambiado, , y
Frente a difiere en un solo bit. Después de la primera ronda, el cambio sigue siendo de un bit, porque ha caído en la mitad que solo se suma con XOR. En la ronda 2 ese bit llegará a y empezará a propagarse. Al final, como vimos en la lección 3, el criptograma cambia en 37 de 64 bits: la difusión necesita varias rondas.
En resumen
- DES es una red de Feistel de 16 rondas sobre bloques de 64 bits, con una clave de 64 bits de los que 56 son efectivos.
- El esquema es: , 16 rondas , , intercambio de mitades e .
- y son permutaciones fijas y sin clave: ordenan los bits, no añaden seguridad.
- Descifrar es cifrar con , gracias al intercambio final.
- Falta ver (lección 6) y de dónde salen las subclaves (lección 7).
Siguiente lección: La función f de DES y sus cajas S
Para profundizar
- NIST, FIPS 46-3, Data Encryption Standard (DES) (1999).
- D. Coppersmith, The Data Encryption Standard (DES) and its strength against attacks (1994).
- J. O. Grabbe, The DES Algorithm Illustrated (1998).
- W. E. Burr, Data Encryption Standard, en A Century of Excellence in Measurements, Standards, and Technology (NIST SP 958), pp. 250-253 (2001).