Экстернат |
Усовершенствованный стандарт шифрования (AES — Advanced Encryption Standard)
10.1. Расширение ключей
Для того чтобы создать ключ для каждого раунда, AES использует процесс ключевого расширения. Если номер раунда — Nr, процедура расширения ключей создает Nr+1 ключи раунда на 128 бит от единственного 128 -битового ключа шифра. Первые ключи раунда используются для преобразования перед раундом (AddRoundKey); остающиеся ключи раунда применяются для последнего преобразования (AddRoundKey) в конце каждого раунда.
Процедура расширения ключей создает слово за словом ключи раунда, где слово — массив из четырех байтов. Процедура создает 4 x (Nr + 1) слова, которые обозначаются
w0, w1, w2..., w4(Nr+1)-1
Другими словами, в версии AES-128 ( 10 раундов) имеются 44 слова; в AES-192 версии ( 12 раундов), есть 52 слова; и в AES 256 версий (с 14 раундами) есть 60 слов. Каждый ключ раунда состоит из четырех слов. Таблица 10.1 показывает отношения между раундами и словами.
Раунд | Слова | |||
---|---|---|---|---|
1 | w0 | w1 | w2 | w3 |
2 | w4 | w5 | w6 | w7 |
..... | ..... | |||
Nr | w4Nr | w4Nr+1 | w4Nr+2 | w4Nr+3 |
Расширение ключей в AES-128
Посмотрим, как создаются ключи в версии AES-128; процессы для других двух версий за исключением небольших изменений — те же самые. Рисунок 10.1 показывает, как из исходного ключа получить 44 слова.
Процесс следующий:
1. Первые четыре слова ( W0,W1,W2,W3 ) получены из ключа шифра. Ключ шифра представлен как массив из 16 байтов ( k0 до k15 ). Первые четыре байта ( k0 до k3 ) становятся W0 ; следующие четыре байта ( k4 до k7 ) становятся w1 ; и так далее. Другими словами, последовательное соединение (конкатенация) слов в этой группе копирует ключ шифра.
2. Остальная часть слов ( wi ) от i = 4 – 43 получается следующим образом:
a. Если , то согласно рисунку 10.1 это означает, что каждое слово получено из одного левого и одного верхнего.
b. Если . Здесь t — временное слово, результат применения двух процессов, subword и rotword, со словом wi-1 и применения операции ИСКЛЮЧАЮЩЕЕ ИЛИ c константой раунда Rcon. Другими словами, мы имеем
RotWord
RotWord (rotate word) — процедура, подобная преобразованию ShiftRows, но применяется только к одной строке. Процедура принимает слово как массив из четырех байт и сдвигает каждый байт влево с конвертированием.
SubWord
SubWord (substitute word) — процедура, подобная преобразованию SubBytes, но применяется только к одной строке. Процедура принимает каждый байт в слове и заменяет его другим.
RoundConstants
Каждая константа раунда Rcon — это 4 -байтовое значение, в котором самые правые три байта являются всегда нулевыми. Таблица 10.2 показывает значения для версии AES-128 (с 10 раундами).
Раунд | Константа (RCon) | Раунд | Константа (RCon) |
---|---|---|---|
1 | (01 00 00 00)16 | 6 | (20 00 00 00)16 |
2 | (02 00 00 00)16 | 7 | (40 00 00 00)16 |
3 | (04 00 00 00)16 | 8 | (80 00 00 00)16 |
4 | (08 00 00 00)16 | 9 | (1B 00 00 00)16 |
5 | (10 00 00 00)16 | 10 | (36 00 00 00)16 |
Процедура расширения ключей может использовать либо приведенную выше таблицу, когда вычисляет слова, либо поле GF(28), когда вычисляет крайние левые биты динамически, как это показано ниже.
RC1 -> x1-1 = x0 mod prime = 1 -> 00000001 -> 0116 RC2 -> x2-1 = x1 mod prime = x -> 00000010 -> 0216 RC3 -> x3-1 = x2 mod prime = x2 -> 00000100 -> 0416 RC4 -> x4-1 = x3 mod prime = x3 -> 00001000 -> 0816 RC5 -> x5-1 = x4 mod prime = x4 -> 00010000 -> 1016 RC6 -> x6-1 = x5 mod prime = x5 -> 0100000 -> 2016 RC7 -> x7-1 = x6 mod prime = x6 -> 01000000 -> 4016 RC8 -> x8-1 = x7 mod prime = x7 -> 10000000 -> 8016 RC9 -> x9-1 = x8 mod prime = x4+x3+x+1 -> 00011011 -> 1B16 RC10 -> x10-1 =x9 mod prime = x5+x4+x2+x -> 00110110 -> 3616
Крайний левый байт, который обозначен RCi — это xi-1, где i — номер раунда. AES использует неприводимый полином ( x8 + x4 + x3 + x +1 ).