
Protectstar AES Extendido
Tamaño de Bloque: 512-bit (64-byte)
Tamaños de Clave: 128, 256 y 512-bit (16, 32 y 64 byte) (predeterminado 256-bit)
Modos de Operación: ECB, CBC, CFB, OFB y CTR (predeterminado CTR)
Número Total de Rondas: 24
Resumen
Esta documentación explica los detalles de nuestra versión extendida del algoritmo de cifrado AES, que usa un tamaño de bloque fijo de 512 bits y tres posibles longitudes de clave: 128, 256 o 512 bits.
1. Motivación
El AES estándar usa un bloque de mensaje de 128 bits (es decir, 16 bytes) y una clave de 128 bits. También se admiten longitudes de clave de 192 y 256 bits. Para la combinación de 128/128 (Bloque/Clave), el bloque de mensaje y la clave de AES se pueden representar como una matriz de 4*4. Cada celda de la matriz representa un solo Byte, y 16 (4*4) celdas hacen 16 bytes, que equivalen a 128 bits.
De manera similar, para el AES extendido usamos una matriz de 4*16 (4: tamaño de la fila, 16: tamaño de la columna) para representar los bloques de mensaje y las claves de ronda. El AES extendido utiliza algunas propiedades y funciones del AES original (por ejemplo, agregar clave de ronda, mezcla de columnas, etc.), mientras que algunas propiedades y funciones son específicas del AES extendido (por ejemplo, el número total de rondas, desplazamiento de filas, etc.).
En las siguientes secciones, se explican en detalle las propiedades y funciones relevantes utilizadas en el AES original y el AES extendido.
2. Modos de Operación
Todos los modos de operación admitidos por el AES original (es decir, Electronic Code Book (ECB), Cipher Block Chaining (CBC), Cipher Feedback (CFB), Output Feedback (OFB) y Counter (CTR)) también han sido implementados para el AES extendido.
3. Número Total de Rondas
Para cifrar y descifrar un solo bloque, el algoritmo AES original aplica sus funciones en total en 10 rondas. Este número 10 se calcula con la siguiente fórmula:
Número de rondas = (tamaño de la clave o tamaño del bloque en palabras) + 6
El número constante 6 está especificado y fijado por los diseñadores del AES de acuerdo con los ataques criptográficos conocidos. Si el tamaño de la clave es de 256 bits, entonces se requieren 14 rondas (8+6).
Para el AES extendido, el tamaño del bloque está fijado en 512 bits. Eso hace 16 palabras, ya que cada palabra tiene 4 bytes. El número total de rondas se calcula como 22 según la fórmula anterior. En realidad, necesitamos 2 rondas más debido a la operación ShiftRow, como se explica en las siguientes secciones. Como conclusión, el AES extendido aplica 24 rondas para cifrar y descifrar un solo bloque.
4. Relleno
La operación de relleno es muy común para rellenar los bloques de mensaje y los bloques de clave para los cifrados por bloques. Para el AES extendido, necesitamos tanto el relleno de mensaje como el relleno de clave.
4.1. Relleno de Mensaje
La longitud de los mensajes de entrada debe ser múltiplo de 512 en el AES extendido. Para la operación de relleno, seguimos el mecanismo de relleno descrito en el RFC 1321. En este método de relleno, después del último bit original del mensaje, se inserta un bit "1" y luego se agregan bits "0" hasta que el último bloque de mensaje tenga una longitud de 512. Si no queda espacio para más relleno de "0", entonces se agrega un nuevo bloque de 512 bits al final del mensaje.
4.2. Relleno de Clave
El AES extendido admite tamaños de clave de 16, 32 y 64 bytes. Para inicializar el bloque de clave, se usa una contraseña proporcionada por los usuarios. Si la contraseña no contiene suficientes caracteres para llenar el bloque de clave, los bytes restantes en el bloque de clave se rellenan con ceros. En realidad, este simple relleno sería suficiente para el AES original, pero no para el AES extendido. Considerando el tamaño de clave de 64 bytes, supongamos que la contraseña solo compone los primeros 10 bytes en el bloque de clave y los 54 bytes restantes se asignan a cero. Por otro lado, este bloque de clave inicial se utiliza para generar las claves de ronda. En este caso, existirían muchas claves de ronda cuyo valor sería cero debido a que el bloque de clave contiene muchos bytes cero. Para prevenir este problema y no generar muchas claves de ronda con valor cero, aplicamos el cifrado AES original sobre el bloque de clave relleno con ceros utilizando una clave fija en modo CBC. El resultado de este cifrado se convierte en la clave rellenada para generar las claves de ronda y evitamos el problema de los ceros.
5. Generación de Claves de Ronda
Las claves de ronda se generan a partir del bloque de clave relleno que se explicó en la sección anterior "Relleno de Clave". El proceso original de generación de claves de ronda (ver Especificación del Cifrado Rijndael, pág. 15) se modifica ligeramente para el AES extendido y se utiliza el siguiente algoritmo para generar las claves de ronda:
KeyExpansion(byte Key[4*Nk] word W[Nb*(Nr+1)]) { for(i = 0; i < Nk; i++) W[i] = (key[4*i],key[4*i+1],key[4*i+2],key[4*i+3]); for(i = Nk; i < Nb * (Nr + 1); i++) { temp = W[i - 1]; if (i % Nk == 0 || (I % Nk==4 && Nk>6)) temp = SubByte(RotByte(temp)) ^ Rcon[i / Nk]; else if ((i % Nk == 8 || i % Nk == 12) && Nk>6) temp = SubByte(temp); W[i] = W[i - Nk] ^ temp; } }
6. Funciones
El AES original usa básicamente 4 funciones principales. Estas son la operación xor-add entre el bloque de mensaje y la clave de ronda (AddRoundKey), las búsquedas en Sbox (SboxSubstitution), el desplazamiento de filas (ShiftRow) y la mezcla de cada columna en la matriz (MixColumn).
1.1.1. AddRoundKey
Para el proceso de agregar la clave de ronda, no hay diferencia entre el AES original y el AES extendido.
1.1.2. SboxSubstitution
El proceso de búsqueda en Sbox también es idéntico en el AES original y el AES extendido.
1.1.3. ShiftRow
El proceso de desplazamiento de filas es diferente en el AES original y el AES extendido. El AES original aplica los desplazamientos {0,1,2,3} para el desplazamiento de filas. Esto significa que en la operación ShiftRow, los bytes de la primera fila no se desplazan. Los bytes de la segunda fila se desplazan 1 byte a la izquierda (para cifrado); los bytes de la tercera fila se desplazan 2 bytes a la izquierda y finalmente los bytes de la última fila se desplazan 3 bytes a la izquierda. La operación ShiftRow se aplica en cada ronda del AES y después de dos rondas, la combinación de las operaciones ShiftRow y MixColumn proporciona una difusión total sobre la matriz; es decir, después de dos rondas, cada celda de la matriz afecta al valor de todas las demás celdas en la matriz.
Pero si aplicamos los desplazamientos {0,1,2,3} para el desplazamiento de filas en el AES extendido, esta difusión total se logra después de 5 rondas, en lugar de 2 rondas. Por lo tanto, debemos encontrar mejores desplazamientos que proporcionen la difusión total en algunas rondas. Con este fin, escribimos un programa (ver com.crypt.test.OptimumShiftRow.java el código fuente distribuido) que calculó los desplazamientos óptimos. El resultado fue que la difusión total solo puede lograrse después de 4 rondas para el AES extendido. Hubo muchos candidatos que proporcionaron la difusión total en 4 rondas y elegimos los desplazamientos {0,1,4,5} para el AES extendido.
1.1.4. MixColumn La misma operación MixColumn se aplica tanto para el AES original como para el AES extendido. En el AES original, solo hay 4 columnas, mientras que el AES extendido contiene 16 columnas.
Descargar código fuente:
Protectstar Extended AES Algorithm (230kb / PDF)
- AES: http://en.wikipedia.org/wiki/Advanced_Encryption_Standard
- Modes of Operation: http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation
- PKCS #5 v2.1: Password-Based Cryptography Standard (RSA Laboratories, October 5, 2006): ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-5v2/pkcs5v2_1.pdf