Logo DIE

Algoritmo AES (Advanced Encryption Standard)

Unidad de Apoyo para el Aprendizaje

Iniciar

Introducción


Desde la antigüedad, el humano ha ideado maneras de comunicarse y mantener la confidencialidad de la información, sobre todo, en tiempos de conflictos. En un inicio, se crearon sistemas criptográficos los cuales se agrupan dentro de la criptografía clásica. Con el auge de las computadoras, surge lo conocido como criptografía moderna, que utiliza los mismos principios que en la clásica; sin embargo, ahora, no se opera sobre los caracteres de un texto, sino sobre bits (1, 0), los cuales son la forma en la que los textos se representan dentro de una computadora.

Dentro de la criptografía moderna, existen dos grandes grupos: los cifrados asimétricos y los simétricos. Los simétricos consisten en utilizar una misma llave para cifrar y descifrar información; funcionan como un candado que tiene una llave con la que se abre y cierra.

Un algoritmo de cifrado simétrico puede funcionar de dos formas: por flujo y por bloque. Cuando el algoritmo es por flujo, se cifra bit a bit hasta cifrar todos los que conformen la información. En un algoritmo por bloque, se toma un conjunto de bits y se opera para generar un nuevo bloque de cifrado.

En esta unidad, se hablará del algoritmo de cifrado AES (advanced encryption standard), el cual es un cifrado simétrico y por bloque; se buscará dar a conocer sus orígenes y funcionamiento para la comprensión básica del mismo.



Algoritmo AES


Identificar el funcionamiento básico de AES como algoritmo simétrico y sus aplicaciones en la computación actual.

Orígenes del AES


AES es un conjunto de especificaciones que sienta las bases para el desarrollo de algoritmos de cifrados seguros, creado y administrado por el National Institute of Standards and Technologies (NIST), el cual promueve la innovación en el área de criptografía. En octubre de 2000, NIST adoptó un nuevo algoritmo de cifrado con fines no militares, con el fin de sustituir a DES. Este algoritmo fue Rijndael, incluido en el ISO/IEC 18033-3 y disponible actualmente en todas las bibliotecas de cifrado, además de actualmente ser el único aprobado por la NSA.

Rijndael es una familia de cifradores por bloque con varios tamaños de llave; AES toma un subconjunto de estos algoritmos para integrarlos al estándar; fueron desarrollados por Vincent Rijmen y Joan Daemen, quienes presentaron su algoritmo ante NIST durante el proceso de selección AES. Durante el resto del curso, utilizaremos AES para referirnos a la Rijndael.

AES es un algoritmo de cifrado por bloque diseñado para utilizar una llave de tamaño variable; emplea bloques de 16 bytes y una llave de 128, 192 o 256 bits. Las operaciones que realiza son a nivel byte dentro de un campo de Galois. Las demás operaciones se efectúan sobre registros de 32 bits, pero éstos pueden interpretarse como polinomios de grado inferior a cuatro —polinomios en 28 en campos de Galois—.

Campos de Galois

Los campos de Galois, conocidos como GF por sus siglas en inglés, son una estructura algebraica que define una cantidad finita de números que existen dentro del campo; en este caso, el campo tiene un tamaño de un byte y los números existentes en el campo son la combinación de bits en un byte.

0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1

1 1 1 1 1 1 1 1



Todas las operaciones que se utilizan en estos campos dan como resultado números dentro del mismo; es decir, jamás tendremos un resultado con más o menos bits que un byte. Las operaciones deben cumplir con ciertas reglas que hagan posible lo anterior. Cabe mencionar que una operación puede existir en un campo; sin embargo, no necesariamente se refiere a la operación que utilizamos comúnmente; por ejemplo, una multiplicación en un campo de Galois puede significar un XOR con módulo.





Estructura


AES no sigue la estructura Feistel; en cambio, establece rondas con cuatro operaciones invertibles; éstas se realizan en forma matricial en vez de arreglo, como en DES. Las operaciones forman tres capas diseñadas para dificultar el criptoanálisis lineal y diferencial.

DesplazarFila y MezclarColumna:
Estas funciones proporcionan alto nivel de difusión a lo largo de varias rondas.

ByteSub:
Aplicación paralela de S-cajas con propiedades de no linealidad.

Capa de adición de clave:
XOR exclusivo entre el estado intermedio y la subclave de cada ronda.

Elementos


AES es un algoritmo que se basa en someter a un texto plano a un número determinado de rondas para obtener un bloque de texto cifrado. A este bloque se le llama estado y puede representarse mediante una matriz rectangular de bytes con cuatro filas y Nb columnas; por ejemplo, si un bloque tiene 160 bits, entonces, Nb = 5, como se muestra en la siguiente tabla:

a0,0

a0,1

a0,2

a0,3

a0,4

a1,0

a1,1

a1,2

a1,3

a1,4

a2,0

a2,1

a2,2

a2,3

a2,4

a3,0

a3,1

a3,2

a3,3

a3,4

La llave tiene una estructura similar al estado, cuatro filas y Nk columnas. Si la llave tiene, por ejemplo, 128 bits, Nk = 4, como se muestra en la siguiente tabla, se obtiene lo siguiente:

k0,0

k0,1

k0,2

k0,3

k1,0

k1,1

k1,2

k1,3

k2,0

k2,1

k2,2

k2,3

k3,0

k3,1

k3,2

k3,3

En algunos casos, tanto el estado como la clave se consideran vectores de registros de 32 bits; cada registro está constituido por los bytes de la columna correspondiente, ordenados de arriba a abajo.

El bloque que se pretende cifrar o descifrar se traslada directamente byte a byte sobre la matriz de estado, siguiendo la secuencia a0, 0, a1, 0, a2, 0, a3, 0, a0, 1… al igual que los bytes de la llave con la misma secuencia k0, 0, k1, 0, k2, 0, k3, 0, k0, 1…

En la siguiente tabla, se muestran los tamaños válidos de llave, así como su respectivo número de filas y de columnas para las matrices de llave y bloque, y las rondas que se van a operar.

Nb = 4 (128 bits)

Nb = 6 (192 bits)

Nb = 8 (256 bits)

Nk = 4 (128 bits)

10

12

14

Nk = 6 (192 bits)

12

12

14

Nk = 8 (256 bits)

14

14

14

Cada ronda utiliza una subllave generada de la expansión de la llave original; el algoritmo AES con n rondas tiene la siguiente estructura:

  1. Calcular subllaves K0, K1, K2… Kn a partir de llave K.

  2. SBK0

  3. Para i = 1 hasta n: Aplicar ronda i-ésima del algoritmo con subllave Ki.

Donde:

  • B: Es el bloque para cifrar.

  • S: Es la matriz de estado.

  • K: Es la llave principal.

Como cada ronda es una sucesión de funciones reversibles, el proceso de descifrado consiste en aplicar las inversas de cada función en el orden contrario con las mismas subllaves Ki que en el cifrado, sólo que comenzando por el último bloque.

Proceso de cifrado y descifrado (bloques de 128, 192 y 256 bits)


Ya que AES permite utilizar diferentes longitudes de bloque como de llave, el número de rondas puede variar. Reutilizando la tabla de la sección anterior donde se muestran cuántas rondas son necesarias en función de Nb y Nk, se tiene:

Nb = 4 (128 bits)

Nb = 6 (192 bits)

Nb = 8 (256 bits)

Nk = 4 (128 bits)

10

12

14

Nk = 6 (192 bits)

12

12

14

Nk = 8 (256 bits)

14

14

14

Todas las rondas tienen la siguiente estructura, menos la última ronda:

  1. S ← ByteSub(S)

  2. S ← DesplazarFila(S)

  3. S ← MezclarColumnas(S)

  4. S ← Ki ⊕ S

Donde:

  • S: Es la matriz de estado.

  • Ki: Es la subllave correspondiente a la ronda i–ésima.

La última ronda es igual que las anteriores, pero no realiza el paso 3. A continuación, se presenta una descripción detallada de cada una de las operaciones que se realizan durante las rondas.

ByteSub es una sustitución no lineal que se aplica a cada byte de la matriz de estado S; utiliza una S-caja de 8 * 8 invertible que se obtiene de dos transformaciones.

Esta S-caja garantiza que sea reversible y que las sustituciones no sean inversas. El mapeo que genera esta S-caja es un conjunto de operaciones lineales dentro del campo finito.

La función inversa de ByteSub sería la aplicación de la inversa de la S-caja correspondiente a cada byte de la matriz de estado.

Operación ByteSub

Operación ByteSub


Desplaza cíclicamente hacia la derecha las filas de la matriz de estado S. Cada fila fi se desplaza ci número de veces, donde cada ci es diferente. Los desplazamientos también están en función del tamaño de Nb, como se muestra a continuación:

Nb

c1

c2

c3

4

1

2

3

6

1

2

3

8

1

3

4

Operación DesplazarFila

Operación DesplazarFila

Para el proceso inverso, se realiza el mismo número de desplazamientos para cada fila, pero hacia la izquierda.


Se toma cada columna de la matriz y se realiza una multiplicación del vector columna ci con una matriz determinada. Esta multiplicación es definida por el campo finito, no por una multiplicación normal. Para el proceso de descifrado, se hace el mismo procedimiento, pero la matriz utilizada es la inversa del proceso de cifrado. La matriz tiene la siguiente forma:

Operación MezclarColumna

Operación MezclarColumna

Los coeficientes de la matriz se obtienen a partir de un polinomio y la multiplicación de la columna ci es una multiplicación de polinomios entre el mismo y el vector columna que se toma como un polinomio con coeficientes dentro del campo finito. El polinomio se multiplica módulo x4 + 1 por:

c(x) = 03x4 + 01x2 + 01x + 02

Donde 03 es el valor hexadecimal que se obtiene concatenando los coeficientes binarios del polinomio correspondiente en 00000011, es decir, x + 1 y así sucesivamente. La operación inversa se obtiene multiplicando cada columna ci de la columna de la matriz de estado S por el polinomio:

c(x) = 0Bx4 + 0Dx2 + 09x + 0E


Para generar las subllaves que serán utilizadas en cada ronda, se realiza una expansión de la llave original, lo que da como resultado una secuencia de 4 * (n + 1) * Nb bytes. Las subllaves se forman al tomar consecutivamente un bloque del tamaño de la matriz de estado, esto para cada ronda.

La función tiene dos versiones, para Nk <= 6 y Nk > 6. Sea la llave I un vector de bytes de 4 * Nk y W(i) un vector de Nb * (n + 1) registros de cuatro bytes y sea n el número de rondas. Las funciones Sub y Rot se refieren a aplicar una S-caja de AES a un byte y una rotación a la izquierda, respectivamente.

Rc(j) es una constante definida como Rc(j) = (R(j), 0, 0, 0) donde cada R(j) es el elemento de un campo de Galois correspondiente al valor x(i−1)

Si Nk ≤ 6:
Para i de 0 a Nk − 1:
       W(i) = (K (4 • i), K (4 • i + 1), K (4 • i + 2), K (4 • i + 3))
Para i de Nk a N * (n + 1):
      tmp = W (i − 1)
      Si i mod Nk = 0
            tmp = Sub(Rot(tmp)) ⊕ R(i/Nk)
            W(i) = W (i − Nk) ⊕ tmp


Si Nk > 6:
Para i de 0 a Nk − 1:
       W(i) = (K (4 • i), K (4 • i + 1), K (4 • i + 2), K (4 • i + 3))
Para i de Nk a Nb • (n + 1):
      tmp = W (i − 1)
      Si i mod Nk = 0
            tmp = Sub(Rot(tmp)) ⊕ Rc(i/Nk)
      Si i mod Nk = 4
            tmp = Sub(tmp)
            W(i) = W (i − Nk) ⊕ tmp


En resumen:

  • La primera operación sustituye el byte original por uno nuevo.

  • La segunda operación mezcla los bytes de cada fila.

  • La tercera operación mezcla los valores de las columnas entre ellas.



Modos de operación


Un modo de operación o de funcionamiento es un algoritmo que utiliza un cifrador por bloques para proveer seguridad a la información; describe cómo aplicar repetidamente una operación de cifrado de bloque simple para transformar, de forma segura, cantidades de datos mayores que un bloque.

Modo ECB

El modo electronic code book (EBC) es el método más sencillo y obvio de aplicar un algoritmo de cifrado por bloques; simplemente, se subdivide la cadena que se quiere codificar en bloques del tamaño adecuado y se cifran todos ellos empleando la misma clave.

• Ventajas

Permite codificar los bloques independientemente de su orden. También es resistente a errores, pues, si uno de los bloques sufriera una alteración, el resto quedaría intacto.

• Desventajas

Si el mensaje presenta patrones repetitivos, el texto cifrado también los presentará y eso es peligroso, sobre todo, cuando se codifica información muy redundante. Un atacante puede efectuar un ataque estadístico y extraer bastante información.

Operación ByteSub

Modo ECB

Modo CBC

El modo cipher block chaining mode (CBC) incorpora un mecanismo de retroalimentación en el cifrado por bloques. Esto significa que el cifrado de bloques anteriores condiciona el cifrado del actual, por lo que será imposible sustituir un bloque individual en el mensaje cifrado. Esto se consigue efectuando una operación XOR entre el bloque del mensaje que queremos cifrar y el último criptograma obtenido.

Modo CBC

Modo CBC

Modo CFB

El modo de operación cipher-feedback mode (CFB) permite codificar la información en unidades inferiores al tamaño del bloque, lo cual permite aprovechar totalmente la capacidad de transmisión del canal de comunicaciones, manteniendo, además, un nivel de seguridad adecuado.

El esquema de funcionamiento de este modo de operación se muestra en la siguiente figura:

Operación ByteSub

Modo de operación CFB

Donde:

  • p es el tamaño de bloque del algoritmo simétrico.

  • nes el tamaño de los bloques que queremos transmitir —n es divisor de p—.

  • Mi es el i−ésimo bloque del texto claro, de tamaño n.

Se emplea un registro de desplazamiento R de longitud p y lo cargamos con un vector de inicialización; ciframos el registro R con el algoritmo simétrico y obtenemos en r sus n bits más a la izquierda. El bloque que deberemos enviar es Ci = rMi; luego, desplazamos Rn bits a la izquierda e introducimos Ci por la derecha. Para descifrar, basta con cargar el vector de inicialización en R y cifrarlo calculando r; entonces, Mi = rCi. Desplazamos, luego, R e introducimos Ci por la derecha, como hacíamos en el algoritmo de cifrado. Si n = p, el modo CFB queda reducido al modo CBC.

Aplicaciones


En sus inicios, el objetivo de AES era ser utilizado para la protección de información por el Gobierno de EUA; actualmente, AES es el algoritmo de cifrado por excelencia; es utilizado por el protocolo HTTPS para enviar archivos por Internet; se utiliza en los routers junto con WPA2 para las conexiones seguras a ellos y en el protocolo SSL/TSL para asegurar conexiones; además, cualquiera puede acceder a herramientas que permitan cifrar archivos con AES. Con el internet de las cosas, este algoritmo se convierte en una gran opción para el cifrado en estos sistemas, gracias a su eficiencia y seguridad.

Aplicaciones

Análisis de seguridad


AES es considerado uno de los algoritmos más seguros, gracias a su diseño que prevé muchas de las técnicas de criptoanálisis que pudieran utilizarse para romper el algoritmo y las debilidades que presentaba DES y 3DES. Algunos de los puntos a considerar:

AES


ícono

Actividad. Identifica los elementos de AES

El cifrado más conocido del mundo seguramente es AES; conocer sus elementos te permitirá usarlo en diversos contextos.

ícono

Autoevaluación. Funcionamiento de AES

A continuación, podrás evaluar tú mismo el conocimiento adquirido acerca del algoritmo AES y su funcionamiento.


Fuentes de información

Bibliografía

Lucena-López, M. J. (2001). Criptografía y seguridad en computadores (3.a ed.). Autor, pp. 152-165.

Menezes, A. J., Van Oorschot, P. C. y Vanstone, S. A. (1997). Handbook of applied cryptography. CRC Press, pp. 121-129.

Documentos electrónicos

Pound, M. (22 de septiembre de 2019). AES Explained (Advanced Encryption Standard)-Computerphile [Archivo de Video]. https://www.youtube.com/watch?v=O4xNJsjtN6E


Cómo citar


Aldeco, R., Solano, J. A., Sáenz, R. y Mejía, A. (2021). Algoritmo AES (advanced encryption standard). Unidades de Apoyo para el Aprendizaje. CUAIEED/Facultad de Ingeniería-UNAM. (Vínculo)