|
Rijndael fue un refinamiento de un diseño anterior de Daemen y Rijmen,
Square;
Square fue a su vez un desarrollo de
Shark.
Al contrario que su predecesor DES, Rijndael es una red de sustitución-permutación, no
una red de Feistel.
AES es rápido tanto en software como en hardware,
es relativamente fácil de implementar, y requiere poca
memoria. Como nuevo estándar de cifrado, se está utilizando actualmente
a gran escala.
Descripción del cifrado
En la fase de SubBytes, cada byte en el state es reemplazado con su entrada
en una tabla de búsqueda fija de 8 bits, S; bij = S(aij).
|
En el paso ShiftRows, los bytes en cada fila del state son rotados de manera
cíclica hacia la izquierda. El número de lugares que cada byte es rotado difiere
para cada fila.
|
En el paso MixColumns, cada columna del state es multiplicada por un polinomio
constante c(x).
|
En el paso AddRoundKey, cada byte del state se combina con un byte de la
subclave usando la operación XOR (⊕).
|
Estrictamente hablando, AES no es precisamente Rijndael (aunque en la práctica se
los llama de manera indistinta) ya que Rijndael permite un mayor rango de tamaño de bloques y
longitud de claves; AES tiene un tamaño de bloque fijo
de 128 bits y tamaños de llave de 128, 192 ó 256 bits, mientras que Rijndael puede
ser especificado por una clave que sea múltiplo de 32 bits, con un mínimo de 128
bits y un máximo de 256 bits.
La clave se expande usando el esquema de claves de Rijndael.
La mayoría de los cálculos del algoritmo AES se hacen en un
campo finito determinado.
AES opera en una matriz de 4×4 bytes, llamada state (algunas
versiones de Rijndael con un tamaño de bloque mayor tienen columnas adicionales
en el state). Para el cifrado, cada ronda de la aplicación del algoritmo AES (excepto
la última) consiste en cuatro pasos:
- SubBytes — en este paso se realiza una sustitución
no lineal donde cada byte es reemplazado con otro de acuerdo a una
tabla de búsqueda.
- ShiftRows — en este paso se realiza una transposición
donde cada fila del «state» es rotada de manera cíclica un número determinado de
veces.
- MixColumns — operación de mezclado que opera en
las columnas del «state», combinando los cuatro bytes en cada columna usando una
transformación lineal.
- AddRoundKey — cada byte del «state» es combinado
con la clave «round»; cada clave «round» se deriva de la clave de cifrado usando
una
iteración de la clave.
La ronda final reemplaza la fase MixColumns por otra instancia de AddRoundKey.
Etapa SubBytes- Substitución de bits []
En la etapa SubBytes, cada byte en la matriz es actualizado usando
la
caja-S de Rijndael de 8 bits. Esta operación provee la no linealidad
en el cifrado. La caja-S utilizada proviene de la función inversa alrededor del
GF(28), conocido
por tener grandes propiedades de no linealidad. Para evitar ataques basados en simples
propiedades algebraicas, la caja-S se construye por la combinación de la función
inversa con una
transformación afín inversible. La caja-S también se elige para
evitar puntos estables (y es por lo tanto un
derangement), y también cualesquiera puntos estables opuestos.
La caja-S es descrita en mayor profundidad en el artículo
caja-S de Rijndael.
Etapa ShiftRows-Desplazar filas
[]
El paso ShiftRows opera en las filas del state; rota de manera cíclica
los bytes en cada fila por un determinado
offset. En AES, la primera fila queda en la misma posición. Cada
byte de la segunda fila es rotado una posición a la izquierda. De manera similar,
la tercera y cuarta filas son rotadas por los offsets de dos y tres respectivamente.
De esta manera, cada columna del state resultante del paso ShiftRows está
compuesta por bytes de cada columna del state inicial. (variantes de Rijndael con
mayor tamaño de bloque tienen offsets distintos).
Etapa MixColumns- Mezclar columnas []
En el paso MixColumns, los cuatro bytes de cada columna del state se combinan
usando una transformación lineal inversible. La función MixColumns toma
cuatro bytes como entrada y devuelve cuatro bytes, donde cada byte de entrada influye
todas las salidas de cuatro bytes. Junto con ShiftRows, MixColumns
implica
difusión
en el cifrado. Cada columna se trata como un polinomio GF(28)
y luego se multiplica el módulo x4 + 1
con un polinomio fijo c(x). El paso MixColumns
puede verse como una multiplicación matricial en el campo finito de Rijndael.
Etapa AddRoundKey- Cálculo de las subclaves
[]
En el paso AddRoundKey, la subclave se combina con el state. En cada ronda
se obtiene una subclave de la
clave principal,
usando la
iteración de la clave; cada subclave es del mismo tamaño del
state. La subclave se agrega combinando cada byte del state con el correspondiente
byte de la subclave usando XOR.
Optimización del cifrado
[]
En sistemas de 32 bits o de mayor tamaño de palabra, es posible acelerar la ejecución
de este algoritmo mediante la conversión de las transformaciones SubBytes,
ShiftRows y MixColumn en tablas. Se tienen cuatro tablas de 256
entradas de 32 bits que utilizan un total de 4 kilobytes (4096 bytes) de memoria,
un Kb cada tabla. De esta manera, una ronda del algoritmo consiste en 16 búsquedas
en una tabla seguida de 16 operaciones XOR de 32 bits en el paso AddRoundKey.
Si el tamaño de 4 kilobytes de la tabla es demasiado grande para una plataforma
determinada, la operación de búsqueda en la tabla se puede realizar mediante una
sola tabla de 256 entradas de 32 bits mediante el uso de rotaciones circulares.
Seguridad []
Hasta Mayo del 2009, no se ha encontrado ningún ataque exitoso contra el AES. La Agencia
de Seguridad Nacional de los Estados Unidos (NSA) revisó todos los finalistas candidatos
al AES, incluyendo el Rijndael, y declaró que todos ellos eran suficientemente seguros
para su empleo en información no clasificada del gobierno de los Estados Unidos.
En junio de 2003, el gobierno de los Estados Unidos anunció que el AES podía ser
usado para información clasificada:
-
"The design and strength of all key lengths of the AES algorithm (i.e., 128, 192
and 256) are sufficient to protect classified information up to the SECRET level.
TOP SECRET information will require use of either the 192 or 256 key lengths. The
implementation of AES in products intended to protect national security systems
and/or information must be reviewed and certified by NSA prior to their acquisition
and use." — [1]
Este hecho marca la primera vez que el público ha tenido acceso a un cifrador aprobado
por la NSA para información super secreta (TOP SECRET). Es interesante notar que
muchos productos públicos usan llaves de 128 bits por defecto; es posible que la
NSA sospeche de una debilidad fundamental en llaves de este tamaño, [cita
requerida] o simplemente prefieren tener un margen
de seguridad para documentos super secretos (que deberían conservar la seguridad
durante décadas en el futuro).
El método más común de ataque hacia un cifrador por bloques consiste en intentar
varios ataques sobre versiones del cifrador con un número menor de rondas. El AES
tiene 10 rondas para llaves de 128 bits, 12 rondas para llaves de 192 bits, y 14
rondas para llaves de 256 bits. Hasta 2005, los mejores ataques conocidos son sobre
versiones reducidas a 7 rondas para llaves de 128 bits, 8 rondas para llaves de
192 bits, y 9 rondas para llaves de 256 bits (Ferguson et al, 2000).
Algunos criptógrafos muestran preocupación sobre la seguridad del AES. Ellos sienten
que el margen entre el número de rondas especificado en el cifrador y los mejores
ataques conocidos es muy pequeño. El riesgo es que se puede encontrar alguna manera
de mejorar los ataques y de ser así, el cifrado podría ser roto. En el contexto
criptográfico se considera "roto" un algoritmo si existe algún ataque más rápido
que una búsqueda exhaustiva (ataque por fuerza bruta). De modo que un ataque contra
el AES de llave de 128 bits que requiera 'sólo' 2120 operaciones sería
considerado como un ataque que "rompe" el AES aun tomando en cuenta que por ahora
sería un ataque irrealizable. Hasta el momento, tales preocupaciones pueden ser
ignoradas. El ataque de fuerza bruta más largamente publicitado y conocido ha sido
contra una clave de 64 bits RC5 por
distributed.net.
|