Este documento detalla las características y el funcionamiento de varios algoritmos de cifrado de bloque, destacando sus particularidades en cuanto a tamaño de bloque, longitud de clave, número de rondas y procesos internos.
Lucifer
Lucifer es un algoritmo de cifrado de bloque con las siguientes especificaciones:
- Bloque: 128 bits
- Clave: 128 bits
- Rondas: 16
Implementación
El bloque de datos a cifrar, de 128 bits (16 bytes), se divide a su entrada en dos partes: la alta y la baja.
- Los 8 bytes de la parte alta se someten a una transformación no lineal controlada por un bit determinado de la clave.
- El resultado de esta transformación se suma (mediante operación XOR exclusiva) byte a byte con los ocho bytes correspondientes de la clave.
- Posteriormente, se realiza una transposición a nivel de bit sobre los 64 bits resultantes, agrupando dicho resultado en bytes.
- Estos bytes se suman (mediante operación XOR exclusiva) con los bytes de la parte baja de la entrada.
- Finalmente, la parte alta y la baja se intercambian.
Rijndael (AES)
Rijndael, conocido por ser la base del estándar de cifrado avanzado (AES), presenta las siguientes características:
- Bloque: 128 bits
- Clave: 128 bits o más (192, 256 bits)
- Rondas: Flexible (depende del tamaño de la clave y el bloque)
Este algoritmo está formado por un conjunto de rondas, donde cada ronda cumple con un conjunto de reiteraciones de cuatro funciones matemáticas. El algoritmo se basa en aplicar un número de rondas a un texto en claro para convertirlo en información cifrada. La información generada por cada función se conoce como estado o estado intermedio.
Transformaciones por Ronda
Estas son las cuatro transformaciones principales por ronda:
- Función ByteSub: Es una sustitución no lineal que se aplica a cada byte de la matriz de estado de forma independiente, generando un nuevo byte.
- Función ShiftRow: Consiste en rotar a la izquierda las filas que conforman la matriz de estado actual.
- Función MixColumn: Realiza una mezcla de los bytes de una misma columna.
- Función AddRoundKey: Aplica una operación XOR exclusiva entre la matriz de estado y una subclave del sistema para esa ronda.
Aplicaciones
Rijndael se utiliza ampliamente en diversas aplicaciones, incluyendo:
- Herramientas de gestión de contraseñas
- Videojuegos
- Aplicaciones de mensajería (como WhatsApp)
Khufu
Khufu es un cifrado de bloque con las siguientes especificaciones:
- Bloque: 64 bits
- Clave: 512 bits
- Rondas: 16
El texto plano de 64 bits se divide primero en dos mitades de 32 bits: L (izquierda) y R (derecha).
Proceso de Cifrado
- Primero, ambas mitades (L y R) se combinan mediante una operación XOR con material clave.
- Luego, son sometidas a una serie de rondas similares a las del algoritmo DES.
- En cada ronda, el byte menos significativo de L se utiliza como entrada para una caja S (S-box).
- Cada caja S tiene 8 bits de entrada y 32 bits de salida.
- La salida de 32 bits seleccionada de la caja S se combina mediante XOR con R.
- Posteriormente, L se rota un número de múltiplos de 8 bits, y L y R se intercambian, finalizando así la ronda.
- La caja S en sí no es estática, sino que cambia cada 8 rondas.
- Finalmente, después de la última ronda, L y R se combinan mediante XOR con más material clave y luego se concatenan para formar el bloque de texto cifrado.
CAST
CAST es un cifrador de bloque con las siguientes características:
- Bloque: 64 bits
- Clave: 40 a 128 bits (en incrementos de 8 bits)
- Rondas: 12 o 16
Se basa en la red de Feistel con bloques de 64 bits y tamaños de clave entre 40 y 128 bits (con incrementos de 8 bits). Incluye S-Boxes de 8×32 bits basadas en funciones bent, rotaciones dependientes de clave, adición y sustracción modular, y operaciones XOR.
Existen tres tipos alternativos de funciones de ronda, aunque son de estructura similar y se diferencian solo en la elección del tipo exacto de operación (XOR, adición o sustracción) en varios puntos.
Proceso de Cifrado
- Se calculan 16 pares de subclaves.
- El texto en claro se divide en dos partes de 32 bits: izquierda (L0) y derecha (R0).
- En 16 rondas (tomando i el valor de 1 a 16), se calculan Li y Ri.
- Finalmente, los bloques finales (L16, R16) se intercambian y se concatenan para obtener el texto cifrado.
FEAL
FEAL (Fast Data Encipherment Algorithm) es un algoritmo que incluye ocho rondas Feistel durante su ejecución y funciona con bloques de texto simple y cifrado de 64 bits.
Programación de Claves
El algoritmo comienza tomando la clave inicial de 64 bits especificada por el usuario e inmediatamente ejecuta el proceso de programación de claves. Este proceso genera un total de 16 subclaves (para una implementación de FEAL de 8 rondas), cada una de 16 bits de longitud. En total, estas subclaves conforman una clave de 256 bits.
Funciones Clave
La función S se utiliza dentro de la función Fk y la función F:
- La función Fk se utiliza durante el proceso de programación de claves.
- La función F se utiliza durante el proceso de cifrado y descifrado.
Khafre
Khafre es un cifrado de bloque que, a diferencia de algunos diseños anteriores, utiliza un conjunto estándar de cajas S en lugar de calcularlas a partir de la clave. Sus características son:
- Bloque: 64 bits
- Clave: Múltiplo de 64 bits (ej. 512 bits)
Khafre es similar al diseño de Khufu. El uso de cajas S estándar permite que Khafre cifre rápidamente un solo bloque de 64 bits. Sin embargo, esto implica la necesidad de adoptar un nuevo mecanismo de mezcla en el material clave, ya que las cajas S estándar no pueden servir como la clave en sí.
Khafre se diferencia de Khufu en que sus cajas S son conocidas y se aplican subclaves XOR adicionales de 64 bits a los datos cada ocho rondas.
Akelarre
Akelarre es un cifrado de bloque iterado de clave secreta que destaca por su gran flexibilidad en el nivel de seguridad, permitiendo la modificación a través de software de parámetros como el número de rondas y la longitud de la clave.
Estructura
- Tamaño de bloque (n): 128 bits
- Número de rondas (r): Variable (mínimo 4)
- Tamaño de la clave (k): Múltiplo de 64 bits (ej. 128 bits)
- Número de subclaves (Ki): 13 * r + 9
Algoritmo de Cifrado
El algoritmo de cifrado de Akelarre se compone de tres partes principales:
- La transformación de entrada.
- Las rondas de cifrado.
- La transformación de salida.