Процедура расширения ключа создает три ключа раунда по 16 битов из единственного ключа шифра на 16 битов. Первые ключи раунда используются для предварительного преобразования ( AddRoundKey ); оставшиеся ключи применяются для последнего преобразования ( AddRoundKey ) в конце раунда 1 и раунда 2.
Процедура расширения ключей создает слово ключа раунда последовательно - слово за словом, где слово - массив 2 полубайта. Процедура создает 6 слов, которые обозначаются
w0, w1, w2, .....,w5.
P.14 показывает, как создаются 6 слов из первоначального ключа.
Процесс создания слов в S-AES следующий:
Слова w2 и w4 создаются, используя этот процесс.
RotWord (вращение слова) - процедура, подобная преобразованию ShiftRows, но она применяется только к одной строке. Процедура получает слово как массив 2 полубайтов и сдвигает каждый полубайт влево с полным вращением (полный оборот) слова. В S-AES это заполнение 2 полубайтов в слове.
SubWord (слово-заменитель) - процедура является подобной преобразованию SubNibbels, но она применяется только к 2 полубайтам. Процедура берет каждый полубайт в слове и заменяет его другим полубайтом. Она использует таблицы SubNibbels, показанные на рис. P.7.
Константы раунда
Каждая константа раунда, RC, является значением, содержащим 2 полубайта, в котором самый правый полубайт всегда нуль. Рисунок P.14 также показывает значение RC
Пример P.4
Таблица P.1 показывает, как вычисляется ключ для каждого раунда. При этом предполагается, что Алиса и Боб согласовали ключ 247516.
Раунд | Значение ti | Первое слово в раунде | Второе слово в раунде | Ключ раунда |
---|---|---|---|---|
0 | w0 = 24 | w1 = 75 | K0 = 2475 | |
1 | t2 = 95 | \[ w_{2 }= 95 \oplus 24 = B1 \] | \[ w_{2 }= B1 \oplus 75 = С4 \] | K0 = B1C4 |
2 | t4 = EC | \[ w_{4 }= B1 \oplus EC = 5D \] | \[ W_{5 }= 5D \oplus С4 = 99 \] | K2 = 5D99 |
В каждом раунде второе слово вычисляется очень просто. Для вычисления первого слова мы должны сначала вычислить значение временного слова ( ti ), как это показано ниже:
\[ RotWord\ (75) = 57 \to SubWord\ (57) = 15 \to t_{2} = 15 \oplus RC[1] = 15 \oplus 80 = 95 \\ RotWord\ (C4) = 4C \to SubWord\ (4C) = DC \to t_{4} = DC \oplus RC[2] = DC \oplus 30 = EC \]Теперь давайте посмотрим, как S-AES используют четыре типа преобразований для шифрования и дешифрования. Алгоритм шифрования будем называть шифратор, а алгоритм дешифрования - обратный шифратор.
S-AES - шифр не-Файстеля, и это означает, что каждое преобразование или группа преобразований должны быть обратимыми. Кроме того, шифратор и обратный шифратор должны использовать эти операции таким способом, при котором они отменяют друг друга. Ключи раунда должны использоваться в обратном порядке. Чтобы выполнить эти требования, преобразования применяются в установленном порядке в шифраторе и обратном шифраторе, как это показано на рис. P.15.
Первое: порядок использования SubNibbles и ShiftRows изменяется в обратном шифраторе. Второе: порядок MixColumns и AddRoundKey в обратном шифраторе также изменяется. Это отличие в порядке необходимо, чтобы сделать каждое преобразование в шифре соответствующим по порядку его инверсии в обратном шифраторе. Следовательно, алгоритм дешифрования в целом - инверсия алгоритма шифрования. Обратите внимание, что ключи раунда используются в обратном порядке.
Пример P.5
Мы выбираем случайный блок исходного текста, ключ шифра, используемый в примере P.4, и определяем, какой получается блок зашифрованного текста:
Исходный текст: 1A2316 Ключ: 247516 Зашифрованный текст: 3AD216
Рисунок P.16 показывает значение состояний в каждом раунде. Мы используем ключи раунда, сгенерированные в примере P.4.