Metoda rozszerzania klucza na okrągłe klucze w AES
AES korzysta z harmonogramu kluczy, aby rozszerzyć skrót na kilka oddzielnych kluczy okrągłych. Trzy warianty AES mają różną liczbę rund. Każdy wariant wymaga oddzielnego 128-bitowego okrągłego klucza dla każdej rundy plus jeszcze jednego. Zestawienie kluczy tworzy potrzebne okrągłe klucze z początkowego klucza.
Okrągłe stałe
Wartości rc i w systemie szesnastkowym
i
1
2
3
4
5
6
7
8
9
10
rc ja
01
02
04
08
10
20
40
80
1B
36
Stała round rcon i dla rundy i rozwinięcia klucza jest słowem 32-bitowym:
r
C
o
n
i
=
[
r
C
i
00
16
00
16
00
16
]
{\ Displaystyle rcon_ {i} = {\ zacząć {bmatrix} rc_ {i} i 00_ {16} i 00_ {16} i 00_ {16} \ koniec {bmatrix}}}
gdzie rc i jest wartością ośmiobitową zdefiniowaną jako:
r
C
i
=
{
1
Jeśli
i
=
1
2
⋅
r
C
i
−
1
Jeśli
i
>
1
oraz
r
C
i
−
1
<
80
16
(
2
⋅
r
C
i
−
1
)
⊕
11B
16
Jeśli
i
>
1
oraz
r
C
i
−
1
≥
80
16
{\ Displaystyle rc_ {i} = {\ zacząć {przypadki} 1 i {\ tekst {jeśli}} i = 1 \ \ 2 \ cdot rc_ {i-1} i {\ tekst {jeśli}} i> 1 {\ tekst { i }}rc_{i-1}<80_{16}\\(2\cdot rc_{i-1})\oplus {\text{11B}}_{16}&{\text{if }}i >1{\text{ i }}rc_{i-1}\geq 80_{16}\end{cases}}}
gdzie jest bitowym operatorem XOR , a stałe, takie jak 00 16 i 11B 16, są podane w systemie szesnastkowym . Równoważnie:
⊕
{\ Displaystyle \ oplus}
r
C
i
=
x
i
−
1
{\ Displaystyle rc_ {i} = x ^ {i-1}}
gdzie bity rc i traktowane są jako współczynniki elementu ciała skończonego , tak że np. reprezentuje wielomian .
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}
AES wykorzystuje do rcon 10 dla AES-128 (ponieważ potrzeba 11 okrągłych kluczy), do rcon 8 dla AES-192 i do rcon 7 dla AES-256.
Kluczowy harmonogram
Harmonogram kluczy AES dla klucza 128-bitowego.
Definiować:
N jako długość klucza w słowach 32-bitowych: 4 słowa dla AES-128, 6 słów dla AES-192 i 8 słów dla AES-256
K 0 , K 1 , ... K N -1 jako 32-bitowe słowa oryginalnego klucza
R jako liczba potrzebnych okrągłych kluczy: 11 okrągłych kluczy dla AES-128, 13 kluczy dla AES-192 i 15 kluczy dla AES-256
W 0 , W 1 , ... W 4 R -1 jako 32-bitowe słowa rozszerzonego klucza
Zdefiniuj także RotWord jako jednobajtowe przesunięcie kołowe w lewo :
RotWord
(
[
b
0
b
1
b
2
b
3
]
)
=
[
b
1
b
2
b
3
b
0
]
{\displaystyle \operatorname {RotWord} ({\rozpocznij{bmatrix}b_{0}&b_{1}&b_{2}&b_{3}\koniec {bmatrix}})={\rozpocznij{bmatrix}b_{1}&b_ {2}&b_{3}&b_{0}\end{bmacierz}}}
i SubWord jako zastosowanie AES S-box do każdego z czterech bajtów słowa:
Słowo podrzędne
(
[
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}\koniec {bmatrix}})={\rozpocznij {bmatrix}\operator {S} (b_{0})&\nazwa operatora {S} (b_{1})&\nazwa operatora {S} (b_{2})&\nazwa operatora {S} (b_{3})\end{bmacierz}}}
Następnie dla :
i
=
0
…
4
r
−
1
{\ Displaystyle i = 0 \ ldots 4R-1}
W
i
=
{
K
i
Jeśli
i
<
n
W
i
−
n
⊕
Słowo podrzędne
(
RotWord
(
W
i
−
1
)
)
⊕
r
C
o
n
i
/
n
Jeśli
i
≥
n
oraz
i
≡
0
(
mod
n
)
W
i
−
n
⊕
Słowo podrzędne
(
W
i
−
1
)
Jeśli
i
≥
n
,
n
>
6
, oraz
i
≡
4
(
mod
n
)
W
i
−
n
⊕
W
i
−
1
Inaczej.
{\ Displaystyle W_ {i} = {\ rozpocząć {przypadki} K_ {i} i {\ tekst {jeżeli}} i < N \ \ W_ {i N} \ oplus \ nazwa operatora {SubWord} (\ nazwa operatora {RotWord} (W_ {i-1}))\oplus rcon_{i/N}&{\text{if }}i\geq N{\text{ i }}i\equiv 0{\pmod {N}}\\W_{iN }\oplus \operatorname {SubWord} (W_{i-1})&{\text{if }}i\geq N{\text{, }}N>6{\text{ oraz }}i\equiv 4 {\pmod {N}}\\W_{iN}\oplus W_{i-1}&{\text{inaczej.}}\\\end{przypadki}}}
Uwagi
Bibliografia
Linki zewnętrzne
<img src="https://en.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">