Método para expandir a chave para arredondar as chaves em AES
O AES usa uma programação chave para expandir uma chave curta em uma série de chaves redondas separadas. As três variantes AES têm um número diferente de rodadas. Cada variante requer uma chave redonda de 128 bits separada para cada rodada e mais uma. A programação de chave produz as chaves redondas necessárias a partir da chave inicial.
Constantes redondas
Valores de rc i em hexadecimal
eu
1
2
3
4
5
6
7
8
9
10
rc eu
01
02
04
08
10
20
40
80
1B
36
A constante redonda rcon i para a rodada i da expansão chave é a palavra de 32 bits:
r
c
o
n
eu
=
[
r
c
eu
00
16
00
16
00
16
]
{\ displaystyle rcon_ {i} = {\ begin {bmatrix} rc_ {i} & 00_ {16} & 00_ {16} & 00_ {16} \ end {bmatrix}}}
onde rc i é um valor de oito bits definido como:
r
c
eu
=
{
1
E se
eu
=
1
2
⋅
r
c
eu
-
1
E se
eu
>
1
e
r
c
eu
-
1
<
80
16
(
2
⋅
r
c
eu
-
1
)
⊕
11B
16
E se
eu
>
1
e
r
c
eu
-
1
≥
80
16
{\ displaystyle rc_ {i} = {\ begin {cases} 1 & {\ text {if}} i = 1 \\ 2 \ cdot rc_ {i-1} & {\ text {if}} i> 1 {\ text {e}} rc_ {i-1} <80_ {16} \\ (2 \ cdot rc_ {i-1}) \ oplus {\ text {11B}} _ {16} & {\ text {if}} i > 1 {\ text {e}} rc_ {i-1} \ geq 80_ {16} \ end {casos}}}
onde é o operador XOR bit a bit e constantes como 00 16 e 11B 16 são fornecidas em hexadecimal . Equivalentemente:
⊕
{\ displaystyle \ oplus}
r
c
eu
=
x
eu
-
1
{\ displaystyle rc_ {i} = x ^ {i-1}}
onde os bits de rc i são tratados como os coeficientes de um elemento do corpo finito , de modo que eg representa o polinômio .
G
F
(
2
)
[
x
]
/
(
x
8
+
x
4
+
x
3
+
x
+
1
)
{\ displaystyle {\ rm {{GF} (2) [x] / (x ^ {8} + x ^ {4} + x ^ {3} + x + 1)}}}
r
c
10
=
36
16
=
00110110
2
{\ displaystyle rc_ {10} = 36_ {16} = 00110110_ {2}}
x
5
+
x
4
+
x
2
+
x
{\ displaystyle x ^ {5} + x ^ {4} + x ^ {2} + x}
O AES usa até rcon 10 para AES-128 (já que são necessárias 11 chaves redondas), até rcon 8 para AES-192 e até rcon 7 para AES-256.
O cronograma chave
Programação de chave AES para uma chave de 128 bits.
Definir:
N como o comprimento da chave em palavras de 32 bits: 4 palavras para AES-128, 6 palavras para AES-192 e 8 palavras para AES-256
K 0 , K 1 , ... K N -1 como as palavras de 32 bits da chave original
R como o número de chaves redondas necessárias: 11 chaves redondas para AES-128, 13 chaves para AES-192 e 15 chaves para AES-256
W 0 , W 1 , ... W 4 R -1 como as palavras de 32 bits da chave expandida
Defina também RotWord como um deslocamento circular à esquerda de um byte :
RotWord
(
[
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}}}
e SubWord como uma aplicação do AES S-box para cada um dos quatro bytes da palavra:
SubWord
(
[
b
0
b
1
b
2
b
3
]
)
=
[
S
(
b
0
)
S
(
b
1
)
S
(
b
2
)
S
(
b
3
)
]
{\ displaystyle \ operatorname {SubWord} ({\ 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}}}
Então para :
eu
=
0
…
4
R
-
1
{\ displaystyle i = 0 \ ldots 4R-1}
C
eu
=
{
K
eu
E se
eu
<
N
C
eu
-
N
⊕
SubWord
(
RotWord
(
C
eu
-
1
)
)
⊕
r
c
o
n
eu
/
N
E se
eu
≥
N
e
eu
≡
0
(
mod
N
)
C
eu
-
N
⊕
SubWord
(
C
eu
-
1
)
E se
eu
≥
N
,
N
>
6
, e
eu
≡
4
(
mod
N
)
C
eu
-
N
⊕
C
eu
-
1
de outra forma.
{\ displaystyle W_ {i} = {\ begin {cases} K_ {i} & {\ text {if}} i <N \\ W_ {iN} \ oplus \ operatorname {SubWord} (\ operatorname {RotWord} (W_ {i-1})) \ oplus rcon_ {i / N} & {\ text {if}} i \ geq N {\ text {e}} i \ equiv 0 {\ pmod {N}} \\ W_ {iN } \ oplus \ operatorname {SubWord} (W_ {i-1}) & {\ text {if}} i \ geq N {\ text {,}} N> 6 {\ text {, e}} i \ equiv 4 {\ pmod {N}} \\ W_ {iN} \ oplus W_ {i-1} & {\ text {caso contrário.}} \\\ end {casos}}}
Notas
Referências
links externos
<img src="https://en.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">