Расписание клавиш AES

редактировать

AES использует расписание клавиш, чтобы развернуть краткую клавишу в несколько отдельных циклов ключи. У трех вариантов AES разное количество раундов. Каждый вариант требует отдельного 128-битного раундового ключа для каждого раунда плюс еще один. Расписание ключей производит необходимые ключи раунда из исходного ключа.

Содержание
  • 1 Круглые константы
  • 2 Ключевое расписание
  • 3 Примечания
  • 4 Ссылки
  • 5 Внешние ссылки
Круглые константы
Значения rc i в шестнадцатеричном формате
i12345678910
rci01020408102040801B36

Постоянная округления rcon i для цикла i расширения ключа представляет собой 32-битное слово:

rconi = [rci 00 16 00 16 00 16] {\ displaystyle rcon_ {i} = {\ begin {bmatrix} rc_ {i} & 00_ {16} & 00_ {16} & 00_ {16} \ end {bmatrix}}}{\ displaystyle rcon_ {i} = {\ begin {bmatrix} rc_ {i} & 00_ {16} & 00_ {16} & 00_ {16} \ end {bmatrix}}}

где rc i - восьмибитное значение, определяемое как:

rci = {1, если i = 1 2 ⋅ rci - 1, если i>1, и rci - 1 < 80 16 ( 2 ⋅ r c i − 1 ) ⊕ 11B 16 if i >1 и rci - 1 ≥ 80 16 {\ displaystyle rc_ {i} = {\ begin {case} 1 & {\ text {if}} i = 1 \\ 2 \ cdot rc_ {i-1} & {\ text {if}} i>1 {\ text {and}} 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 {cases}}}{\displaystyle rc_{i}={\begin{cases}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 {cases}}}

где ⊕ {\ displaystyle \ oplus}\ oplus - это побитовый оператор XOR и такие константы, как 00 16 и 11B 16 , даны в шестнадцатеричном формате. Эквивалентно:

rci = xi - 1 {\ displaystyle rc_ {i} = x ^ {i-1}}{\ displaystyle rc_ {i} = x ^ {i-1} }

, где биты rc i рассматриваются как коэффициенты элемента конечное поле GF (2) [x] / (x 8 + x 4 + x 3 + x + 1) {\ displaystyle {\ rm {{GF} (2) [x] / (x ^ {8} + x ^ {4} + x ^ {3} + x + 1)}}}{\ displaystyle {\ rm {{GF} (2 ) [x] / (x ^ {8} + x ^ {4} + x ^ {3} + x + 1)}}} , так что, например, rc 10 = 36 16 = 00110110 2 {\ displaystyle rc_ {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}{\ disp Laystyle 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
  • K0, K 1 ,... K N-1 как 32-битные слова исходного ключа
  • R как необходимое количество ключей раунда: 11 раунд ключи для AES-128, 13 ключей для AES-192 и 15 ключей для AES-256
  • W0, W 1 ,... W 4R-1 как 32- битовые слова расширенного ключа

Также определите RotWord как однобайтный круговой сдвиг влево :

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}}}{\ displaystyle \ имя оператора {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 как приложение AES S-box к каждому из четырех байтов слова:

Подслово ⁡ ([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}}}{\ 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}}}

Тогда для i = 0… 4 R - 1 {\ displaystyle i = 0 \ ldots 4R-1}{\ displaystyle i = 0 \ ldots 4R-1} :

W i = {K i, если i < N W i − N ⊕ SubWord ⁡ ( RotWord ⁡ ( W i − 1 ) ) ⊕ r c o n i / N if i ≥ N and i ≡ 0 ( mod N ) W i − N ⊕ SubWord ⁡ ( W i − 1 ) if i ≥ N , N >6, и i ≡ 4 (mod N) W i - N ⊕ W i - 1 в противном случае. {\ displaystyle W_ {i} = {\ begin {case} K_ {i} & {\ text {if}} i 6 {\ text {и}} i \ Equ 4 {\ pmod {N}} \\ W_ {iN} \ oplus W_ {i-1} & {\ text {в противном случае.}} \\\ end {case}}}{\displaystyle W_{i}={\begin{cases}K_{i}&{\text{if }}i<N\\W_{i-N}\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_{i-N}\oplus \operatorname {SubWord} (W_{i-1})&{\text{if }}i\geq N{\text{, }}N>6 {\ text {, и}} i \ Equiv 4 {\ pmod {N}} \\ W_ {iN} \ oplus W_ {i-1} & {\ text {в противном случае.}} \\\ end {cases}}}
Примечания
Ссылки
Внешние ссылки
Последняя правка сделана 2021-06-07 20:18:44
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте