Methode zum Erweitern von Schlüsseln zu runden Schlüsseln in AES
AES verwendet einen Schlüsselplan , um einen kurzen Schlüssel in eine Reihe von separaten runden Schlüsseln zu erweitern. Die drei AES-Varianten haben eine unterschiedliche Rundenanzahl. Jede Variante erfordert einen separaten 128-Bit-Rundenschlüssel für jede Runde plus einen weiteren. Der Schlüsselplan erzeugt die benötigten Rundenschlüssel aus dem Anfangsschlüssel.
Rundenkonstanten
Werte von rc i in Hexadezimal
ich
1
2
3
4
5
6
7
8
9
10
rc ich
01
02
04
08
10
20
40
80
1B
36
Die Rundenkonstante rcon i für Runde i der Schlüsselerweiterung ist das 32-Bit-Wort:
R
C
Ö
n
ich
=
[
R
C
ich
00
16
00
16
00
16
]
{\displaystyle rcon_{i}={\begin{bmatrix}rc_{i}&00_{16}&00_{16}&00_{16}\end{bmatrix}}}
wobei rc i ein Acht-Bit-Wert ist, der wie folgt definiert ist:
R
C
ich
=
{
1
Wenn
ich
=
1
2
⋅
R
C
ich
−
1
Wenn
ich
>
1
und
R
C
ich
−
1
<
80
16
(
2
⋅
R
C
ich
−
1
)
⊕
11B
16
Wenn
ich
>
1
und
R
C
ich
−
1
≥
80
16
{\displaystyle rc_{i}={\begin{cases}1&{\text{if }}i=1\\2\cdot rc_{i-1}&{\text{if }}i>1{\text { und }}rc_{i-1}<80_{16}\\(2\cdot rc_{i-1})\oplus {\text{11B}}_{16}&{\text{if }}i >1{\text{ und }}rc_{i-1}\geq 80_{16}\end{cases}}}
Dabei ist der bitweise XOR- Operator und Konstanten wie 00 16 und 11B 16 werden hexadezimal angegeben . Äquivalent:
⊕
{\displaystyle \oplus}
R
C
ich
=
x
ich
−
1
{\displaystyle rc_{i}=x^{i-1}}
wobei die Bits von rc i als Koeffizienten eines Elements des endlichen Körpers behandelt werden , so dass zB das Polynom repräsentiert .
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 verwendet bis zu rcon 10 für AES-128 (da 11 runde Schlüssel benötigt werden), bis zu rcon 8 für AES-192 und bis zu rcon 7 für AES-256.
Der wichtigste Zeitplan
AES-Schlüsselzeitplan für einen 128-Bit-Schlüssel.
Definieren:
N als Länge des Schlüssels in 32-Bit-Wörtern: 4 Worte für AES-128, 6 Worte für AES-192 und 8 Worte für AES-256
K 0 , K 1 , ... K N -1 als die 32-Bit-Wörter des Originalschlüssels
R als Anzahl der benötigten Rundschlüssel: 11 Rundschlüssel für AES-128, 13 Schlüssel für AES-192 und 15 Schlüssel für AES-256
W 0 , W 1 , ... W 4 R -1 als die 32-Bit-Wörter des erweiterten Schlüssels
Definieren Sie RotWord auch als kreisförmige Verschiebung nach links um ein 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}}}
und SubWord als Anwendung der AES S-Box auf jedes der vier Bytes des Wortes:
Unterwort
(
[
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})&\Betreibername {S} (b_{1})&\Betreibername {S} (b_{2})&\Betreibername {S} (b_{3})\end{bmatrix}}}
Dann für :
ich
=
0
…
4
R
−
1
{\displaystyle i=0\ldots 4R-1}
W
ich
=
{
K
ich
Wenn
ich
<
n
W
ich
−
n
⊕
Unterwort
(
RotWord
(
W
ich
−
1
)
)
⊕
R
C
Ö
n
ich
/
n
Wenn
ich
≥
n
und
ich
≡
0
(
mod
n
)
W
ich
−
n
⊕
Unterwort
(
W
ich
−
1
)
Wenn
ich
≥
n
,
n
>
6
, und
ich
≡
4
(
mod
n
)
W
ich
−
n
⊕
W
ich
−
1
Andernfalls.
{\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{ und }}i\equiv 0{\pmod {N}}\\W_{iN }\oplus \operatorname {SubWord} (W_{i-1})&{\text{if }}i\geq N{\text{, }}N>6{\text{, und }}i\equiv 4 {\pmod {N}}\\W_{iN}\oplus W_{i-1}&{\text{sonst.}}\\\end{cases}}}
Anmerkungen
Verweise
Externe Links
<img src="https://en.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">