En criptografía , Lucifer fue el nombre que se le dio a varios de los primeros cifrados de bloques civiles , desarrollados por Horst Feistel y sus colegas de IBM . Lucifer fue un precursor directo del Estándar de cifrado de datos . Una versión, denominada alternativamente DTD-1 , [1] se utilizó comercialmente en la década de 1970 para la banca electrónica .
Lucifer utiliza una combinación de encriptación por transposición y sustitución como punto de partida para decodificar cifrados. [ aclaración necesaria ] Una variante, descrita por Feistel en 1971, [2] utiliza una clave de 48 bits y opera en bloques de 48 bits. El cifrado es una red de sustitución-permutación y utiliza dos cajas S de 4 bits . La clave selecciona qué cajas S se utilizan. La patente describe la ejecución del cifrado que opera en 24 bits a la vez, y también una versión secuencial que opera en 8 bits a la vez. Otra variante de John L. Smith del mismo año [3] utiliza una clave de 64 bits que opera en un bloque de 32 bits, utilizando una adición módulo 4 y una caja S singular de 4 bits. La construcción está diseñada para operar en 4 bits por ciclo de reloj. Esta puede ser una de las implementaciones de cifrado en bloque más pequeñas conocidas. Posteriormente, Feistel describió una variante más fuerte que utiliza una clave de 128 bits y opera en bloques de 128 bits. [4]
Sorkin (1984) describió un Lucifer posterior como una red Feistel de 16 rondas , también en bloques de 128 bits y claves de 128 bits. [5] Esta versión es susceptible al criptoanálisis diferencial ; para aproximadamente la mitad de las claves, el cifrado se puede descifrar con 2 36 textos simples elegidos y una complejidad temporal de 2 36. [6]
IBM presentó la versión de Lucifer de la red Feistel como candidata a estándar de cifrado de datos (compárese con el proceso AES más reciente ). Se convirtió en DES después de que la Agencia de Seguridad Nacional redujera el tamaño de la clave del cifrado a 56 bits, redujera el tamaño del bloque a 64 bits y hiciera que el cifrado fuera resistente al criptoanálisis diferencial , que en ese momento solo conocían IBM y la NSA.
El nombre "Lucifer" aparentemente era un juego de palabras con "Demon", que a su vez era una abreviación de "Demonstration", el nombre de un sistema de privacidad en el que estaba trabajando Feistel. El sistema operativo utilizado no podía manejar el nombre más largo . [7]
La variante descrita por Sorkin (1984) tiene 16 rondas Feistel , como DES, pero sin permutaciones iniciales o finales. Los tamaños de clave y bloque son ambos de 128 bits. La función Feistel opera en un medio bloque de datos de 64 bits, junto con una subclave de 64 bits y 8 " bits de control de intercambio " (ICB). Los ICB controlan una operación de intercambio. El bloque de datos de 64 bits se considera como una serie de ocho bytes de 8 bits, y si el ICB correspondiente a un byte particular es cero, se intercambian las mitades izquierda y derecha de 4 bits ( nibbles ). Si el ICB es uno, el byte se deja sin cambios. Luego, cada byte es operado por dos cajas S de 4 × 4 bits, denotadas S 0 y S 1 : S 0 opera en el nibble de 4 bits izquierdo y S 1 opera en el derecho. Las salidas resultantes se concatenan y luego se combinan con la subclave mediante la operación exclusiva o (XOR); esto se denomina " interrupción de clave ". A esto le sigue una operación de permutación en dos etapas; la primera permuta cada byte bajo una permutación fija. La segunda etapa mezcla bits entre los bytes.
El algoritmo de programación de claves es relativamente simple. Inicialmente, los 128 bits de la clave se cargan en un registro de desplazamiento . En cada ronda, los 64 bits de la izquierda del registro forman la subclave y los ocho bits de la derecha forman los bits ICB. Después de cada ronda, el registro se rota 56 bits hacia la izquierda.