Calendario de claves de AES

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
i12345678910
yo rc01020408102040801B36

La constante redonda rcon i para la ronda i de la expansión de clave es la palabra de 32 bits: [nota 2]

a do o norte i = [ a do i 00 16 00 16 00 16 ] {\displaystyle rcon_{i}={\begin{bmatrix}rc_{i}&00_{16}&00_{16}&00_{16}\end{bmatrix}}}

donde rc i es un valor de ocho bits definido como:

a do i = { 1 si  i = 1 2 a do i 1 si  i > 1  y  a do i 1 < 80 16 ( 2 a do i 1 ) 11B 16 si  i > 1  y  a do i 1 80 16 {\displaystyle rc_{i}={\begin{cases}1&{\text{si }}i=1\\2\cdot rc_{i-1}&{\text{si }}i>1{\text{y }}rc_{i-1}<80_{16}\\(2\cdot rc_{i-1})\oplus {\text{11B}}_{16}&{\text{si }}i>1{\text{y }}rc_{i-1}\geq 80_{16}\end{cases}}}

donde es el operador XOR bit a bit y las constantes como 00 16 y 11B 16 se dan en hexadecimal . Equivalentemente: {\displaystyle \oplus}

a do i = incógnita i 1 {\displaystyle rc_{i}=x^{i-1}}

donde los bits de rc i se tratan como los coeficientes de un elemento del campo finito , de modo que eg representa el polinomio . GRAMO F ( 2 ) [ incógnita ] / ( incógnita 8 + incógnita 4 + incógnita 3 + incógnita + 1 ) {\displaystyle {\rm {{GF}(2)[x]/(x^{8}+x^{4}+x^{3}+x+1)}}} a do 10 = 36 16 = 00110110 2 {\ Displaystyle rc_ {10} = 36_ {16} = 00110110_ {2}} incógnita 5 + incógnita 4 + incógnita 2 + incógnita Estilo de visualización x^{5}+x^{4}+x^{2}+x}

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

Programación de claves AES para una clave de 128 bits.

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]

También defina RotWord como un desplazamiento circular de un byte hacia la izquierda : [nota 6]

Palabra podrida ( [ b 0 b 1 b 2 b 3 ] ) = [ b 1 b 2 b 3 b 0 ] {\displaystyle \operatorname {RotWord} ({\begin{bmatrix}b_{0}&b_{1}&b_{2}&b_{3}\end{bmatrix}})={\begin{bmatrix}b_{1}&b_{2}&b_{3}&b_{0}\end{bmatrix}}}

y SubWord como una aplicación del AES S-box a cada uno de los cuatro bytes de la palabra:

Subpalabra ( [ b 0 b 1 b 2 b 3 ] ) = [ S ( b 0 ) S ( b 1 ) S ( b 2 ) S ( b 3 ) ] {\displaystyle \operatorname {Subpalabra} ({\begin{bmatrix}b_{0}&b_{1}&b_{2}&b_{3}\end{bmatrix}})={\begin{bmatrix}\operatorname {S} (b_{0})&\operatorname {S} (b_{1})&\operatorname {S} (b_{2})&\operatorname {S} (b_{3})\end{bmatrix}}}

Entonces para : i = 0 4 R 1 {\displaystyle i=0\lpuntos 4R-1}

Yo i = { K i si  i < norte Yo i norte Subpalabra ( Palabra podrida ( Yo i 1 ) ) a do o norte i / norte si  i norte  y  i 0 ( modificación norte ) Yo i norte Subpalabra ( Yo i 1 ) si  i norte norte > 6 , y  i 4 ( modificación norte ) Yo i norte Yo i 1 de lo contrario. {\displaystyle W_{i}={\begin{cases}K_{i}&{\text{si }}i<N\\W_{iN}\oplus \operatorname {SubWord} (\operatorname {RotWord} (W_{i-1}))\oplus rcon_{i/N}&{\text{si }}i\geq N{\text{ y }}i\equiv 0{\pmod {N}}\\W_{iN}\oplus \operatorname {SubWord} (W_{i-1})&{\text{si }}i\geq N{\text{, }}N>6{\text{, y }}i\equiv 4{\pmod {N}}\\W_{iN}\oplus W_{i-1}&{\text{en caso contrario.}}\\\end{cases}}}

Notas

  1. ^ Las variantes Rijndael que no son AES requieren hasta 256 bits de clave expandida por ronda
  2. ^ En FIPS-197, el valor es el byte menos significativo en el índice 0 a do i estilo de visualización rc_{i}}
  3. ^ 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
  4. ^ Otras variantes de Rijndael requieren un máximo de ( N , B ) + 7 claves redondas, donde B es el tamaño del bloque en palabras
  5. ^ Otras variantes de Rijndael requieren palabras BR de clave expandida, donde B es el tamaño del bloque en palabras
  6. ^ 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 )
  1. ^ "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 .
  2. ^ "Nuevo conjunto de instrucciones del Estándar de cifrado avanzado (AES) Intel®" (PDF) . pág. 13.
  3. ^ "aes.c". GitHub . Consultado el 15 de junio de 2020 .
  • 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
Obtenido de "https://es.wikipedia.org/w/index.php?title=Programa_de_claves_AES&oldid=1247068917"