Метод расширения ключа до круглых ключей в AES
AES использует расписание ключей, чтобы преобразовать короткий ключ в несколько отдельных раундовых ключей. Три варианта AES имеют разное количество раундов. Для каждого варианта требуется отдельный 128-битный ключ раунда для каждого раунда плюс еще один. Расписание ключей производит необходимые раундовые ключи из начального ключа.
Круглые константы
Значения rc i в шестнадцатеричном формате
я
1
2
3
4
5
6
7
8
9
10
rc я
01
02
04
08
10
20
40
80
1B
36
Константа раунда rcon i для раунда i раскрытия ключа представляет собой 32-битное слово:
р
c
о
п
я
знак равно
[
р
c
я
00
16
00
16
00
16
]
{\ displaystyle rcon_ {i} = {\ begin {bmatrix} rc_ {i} & 00_ {16} & 00_ {16} & 00_ {16} \ end {bmatrix}}}
где rc i - восьмибитовое значение, определяемое как:
р
c
я
знак равно
{
1
если
я
знак равно
1
2
⋅
р
c
я
-
1
если
я
>
1
и
р
c
я
-
1
<
80
16
(
2
⋅
р
c
я
-
1
)
⊕
11B
16
если
я
>
1
и
р
c
я
-
1
≥
80
16
{\ displaystyle rc_ {i} = {\ begin {case} 1 & {\ text {if}} i = 1 \\ 2 \ cdot rc_ {i-1} & {\ text {if}} i> 1 {\ text {и}} rc_ {i-1} <80_ {16} \\ (2 \ cdot rc_ {i-1}) \ oplus {\ text {11B}} _ {16} & {\ text {if}} i > 1 {\ text {и}} rc_ {i-1} \ geq 80_ {16} \ end {case}}}
где - побитовый оператор XOR, а такие константы, как 00 16 и 11B 16 , даны в шестнадцатеричном формате . Эквивалентно:
⊕
{\ displaystyle \ oplus}
р
c
я
знак равно
Икс
я
-
1
{\ Displaystyle rc_ {я} = х ^ {я-1}}
где биты rc i рассматриваются как коэффициенты элемента конечного поля , так что eg представляет полином .
г
F
(
2
)
[
Икс
]
/
(
Икс
8
+
Икс
4
+
Икс
3
+
Икс
+
1
)
{\ displaystyle {\ rm {{GF} (2) [x] / (x ^ {8} + x ^ {4} + x ^ {3} + x + 1)}}}
р
c
10
знак равно
36
16
знак равно
00110110
2
{\ displaystyle rc_ {10} = 36_ {16} = 00110110_ {2}}
Икс
5
+
Икс
4
+
Икс
2
+
Икс
{\ displaystyle x ^ {5} + x ^ {4} + x ^ {2} + x}
AES использует до rcon 10 для AES-128 (поскольку требуется 11 раундовых ключей), до rcon 8 для AES-192 и до rcon 7 для AES-256.
Ключевой график
Расписание ключей AES для 128-битного ключа.
Определять:
N как длина ключа в 32-битных словах: 4 слова для AES-128, 6 слов для AES-192 и 8 слов для AES-256
K 0 , K 1 , ... K N -1 как 32-битные слова исходного ключа
R как необходимое количество ключей раунда: 11 ключей раунда для AES-128, 13 ключей для AES-192 и 15 ключей для AES-256
W 0 , W 1 , ... W 4 R -1 как 32-битные слова расширенного ключа
Также определите RotWord как однобайтный левый круговой сдвиг :
RotWord
(
[
б
0
б
1
б
2
б
3
]
)
знак равно
[
б
1
б
2
б
3
б
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}}}
и SubWord как приложение S-блока AES к каждому из четырех байтов слова:
Подслово
(
[
б
0
б
1
б
2
б
3
]
)
знак равно
[
S
(
б
0
)
S
(
б
1
)
S
(
б
2
)
S
(
б
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}}}
Тогда для :
я
знак равно
0
…
4
р
-
1
{\ Displaystyle я = 0 \ ldots 4R-1}
W
я
знак равно
{
K
я
если
я
<
N
W
я
-
N
⊕
Подслово
(
RotWord
(
W
я
-
1
)
)
⊕
р
c
о
п
я
/
N
если
я
≥
N
и
я
≡
0
(
мод
N
)
W
я
-
N
⊕
Подслово
(
W
я
-
1
)
если
я
≥
N
,
N
>
6
, и
я
≡
4
(
мод
N
)
W
я
-
N
⊕
W
я
-
1
иначе.
{\ 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 {and}} i \ Equiv 0 {\ pmod {N}} \\ W_ {iN } \ oplus \ operatorname {SubWord} (W_ {i-1}) & {\ text {if}} i \ geq N {\ text {,}} N> 6 {\ text {, and}} i \ Equiv 4 {\ pmod {N}} \\ W_ {iN} \ oplus W_ {i-1} & {\ text {в противном случае.}} \\\ end {case}}}
Примечания
использованная литература
внешние ссылки
<img src="https://en.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">