Método para expandir claves a claves redondas en AES
El estándar de cifrado avanzado utiliza un programa de claves para expandir una clave corta en una cantidad de claves de ronda independientes. Las tres variantes de AES tienen una cantidad diferente de rondas. Cada variante requiere una clave de ronda independiente de 128 bits para cada ronda más una más. [nota 1] El programa de claves produce las claves de ronda necesarias a partir de la clave inicial.
Constantes redondas
Valores de rc i en hexadecimal
i
1
2
3
4
5
6
7
8
9
10
yo rc
01
02
04
08
10
20
40
80
1B
36
La constante redonda rcon i para la ronda i de la expansión de clave es la palabra de 32 bits: [nota 2]
donde rc i es un valor de ocho bits definido como:
donde es el operador XOR bit a bit y las constantes como 00 16 y 11B 16 se dan en hexadecimal . Equivalentemente:
donde los bits de rc i se tratan como los coeficientes de un elemento del campo finito , de modo que eg representa el polinomio .
AES utiliza hasta rcon 10 para AES-128 (ya que se necesitan 11 claves redondas), hasta rcon 8 para AES-192 y hasta rcon 7 para AES-256. [nota 3]
El calendario clave
Definir:
N como la longitud de la clave en palabras de 32 bits: 4 palabras para AES-128, 6 palabras para AES-192 y 8 palabras para AES-256
K 0 , K 1 , ... K N -1 como las palabras de 32 bits de la clave original
R como el número de claves redondas necesarias: 11 claves redondas para AES-128, 13 claves para AES-192 y 15 claves para AES-256 [nota 4]
W 0 , W 1 , ... W 4 R -1 como las palabras de 32 bits de la clave expandida [nota 5]
y SubWord como una aplicación del AES S-box a cada uno de los cuatro bytes de la palabra:
Entonces para :
Notas
^ Las variantes Rijndael que no son AES requieren hasta 256 bits de clave expandida por ronda
^ En FIPS-197, el valor es el byte menos significativo en el índice 0
^
Las variantes de Rijndael con tamaños de bloque mayores usan más de estas constantes, hasta rcon 29 para Rijndael con claves de 128 bits y bloques de 256 bits (necesita 15 claves de ronda de cada 256 bits, lo que significa 30 rondas completas de expansión de clave, lo que significa 29 llamadas al núcleo de programación de claves usando las constantes de ronda). Las constantes restantes para i ≥ 11 son: 6C, D8, AB, 4D, 9A, 2F, 5E, BC, 63, C6, 97, 35, 6A, D4, B3, 7D, FA, EF y C5
^ Otras variantes de Rijndael requieren un máximo de ( N , B ) + 7 claves redondas, donde B es el tamaño del bloque en palabras
^ Otras variantes de Rijndael requieren palabras BR de clave expandida, donde B es el tamaño del bloque en palabras
^ La rotación es opuesta a la dirección del orden de bytes. Las direcciones de bytes FIPS-197 en matrices aumentan de izquierda a derecha [ref 1] en little endian, pero la rotación es de derecha a izquierda. En AES-NI [ref 2] y en lib/crypto/aes.c del kernel de Linux [ref 3] , el orden de bytes aumenta de derecha a izquierda en little endian, pero la rotación es de izquierda a derecha.
Referencias
FIPS PUB 197: el estándar oficial de AES ( archivo PDF )
^ "Publicación 197 de las Normas Federales de Procesamiento de Información, 26 de noviembre de 2001, en la que se anuncia el ESTÁNDAR DE ENCRIPTACIÓN AVANZADA (AES)" (PDF) . pág. 8. Consultado el 16 de junio de 2020 .
^ "Nuevo conjunto de instrucciones del Estándar de cifrado avanzado (AES) Intel®" (PDF) . pág. 13.
^ "aes.c". GitHub . Consultado el 15 de junio de 2020 .
Enlaces externos
Descripción del calendario clave de Rijndael
Vista esquemática del programa de claves para claves de 128 y 256 bits para claves de 160 bits en Cryptography Stack Exchange