Опубликован: 19.01.2010 | Уровень: специалист | Доступ: свободно
Лекция 10:

Усовершенствованный стандарт шифрования (AES — Advanced Encryption Standard)

< Лекция 9 || Лекция 10: 12345 || Лекция 11 >

10.2. Шифры

Теперь посмотрим, как AES использует четыре типа преобразований для шифрования и дешифрования. В стандарте алгоритм шифрования упоминается как шифр и алгоритм дешифрования — как обратный шифр.

Как мы упоминали прежде, ADVANCED ENCRYPTION STANDARDшифр не-Файстеля, а это означает, что каждое преобразование или группа преобразований должны быть обратимыми. Кроме того, шифр и обратный шифр должны использовать эти операции таким способом, чтобы они отменяли друг друга. Ключи раунда должны использоваться в обратном порядке. Ниже приведены два различных проекта, которые могут быть использованы для различных реализаций. Мы обсудим оба проекта для AES-128; для других версий применяются те же самые проекты.

 Шифр и обратный шифр начального проекта

Рис. 10.2. Шифр и обратный шифр начального проекта

Первоначальный проект

В первоначальном проекте порядок преобразований в каждом раунде в шифре и обратном шифре не совпадает. Рисунок 10.2 показывает эту версию.

Во-первых, в обратном шифре изменяется порядок следования SubBytes (InvSubBytes) и ShiftRows (InvShiftRows). Во-вторых, в обратном шифре изменен порядок выполнения MixColumns и AddRoundKey. Эти изменения в порядке необходимы, чтобы в обратном шифре сделать порядок работы обратных преобразований инверсным по отношению к прямому шифру. Следовательно, алгоритм дешифрования в целом — инверсия алгоритма шифрования. Мы показали только три раунда, но остальные имеют тот же самый вид. Обратите внимание, что ключи раунда используются в измененном порядке. Обратите также внимание, что алгоритмы шифрования и дешифрования в первоначальном проекте не совпадают.

Алгоритм

Код для версии AES-128 этого проекта показан в алгоритме 10.2. Код для обратного шифра оставляем как упражнение.

\tt\parindent0pt

Cipher( InBlock[16], OutBlock[16], w[0…43])

\ 

\{ 

BlockToState (InBlock, S)

\ 

S $\gets$  SubBytes (S)

for (round = 1 to 10)

\{ 

S $\gets$  ShiftRows (S)

If (round $\ne$  10)   S $\gets$  MixColumns (S)

S $\gets$  AddRoundKey (S, w[4 x round, 4 x round + 3])

\} 

StateToBlock (S, OutBlock);

\}
10.2. Алгоритм 10.2. Программа на псевдокоде для шифра первоначального проекта

Альтернативный проект

Для тех приложений, которые предпочитают совпадающие алгоритмы для шифрования и дешифрования, был разработан обратный шифр. В такой версии преобразования в обратном шифре перестроены так, чтобы cделать порядок преобразований тем же самым в прямом шифре и обратном шифре. В этом проекте обеспечена обратимость для пары преобразований, а не для каждого одиночного преобразования.

Пары SubBytes/ShiftRows

SubBytes изменяет содержание каждого байта, не изменяя порядок байтов матрицы состояний; ShiftRows изменяет порядок байтов в матрице состояний, не изменяя содержание байтов. Это подразумевает, что мы можем изменить порядок этих двух преобразований в обратном шифре, не затрагивая обратимость целого алгоритма; рисунок 10.3 иллюстрирует идею. Обратите внимание, что комбинации двух преобразований — в шифре и обратном шифре — инверсны друг другу.

 Обратимость совокупности SubByte  и SiftRows

Рис. 10.3. Обратимость совокупности SubByte и SiftRows
Пара MixColumns/AddRoundKey

Здесь применяются два преобразования, которые имеют различные свойства. Однако эти пары могут стать инверсиями друг друга, если мы умножим матрицу ключей на инверсию матрицы констант, используемой в преобразовании MixColumns. Мы называем новое преобразование InvAddRoundKey. Рисунок 10.4 показывает новую конфигурацию.

 Обратимость совокупности MixColumns и AddRoundKey

Рис. 10.4. Обратимость совокупности MixColumns и AddRoundKey

Можно доказать, что эти две комбинации теперь инверсны друг другу. В шифре мы обозначим входную матрицу состояний — S и выходную матрицу — T. В обратном шифре входная матрица — T. Ниже показано, что выходная матрица состояний — также S. Обратите внимание, что преобразование MixColumns — фактически произведение матрицы C (матрицы констант на матрицу состояний).

Cipher: T = CS \oplus  K
\\
Inverse Cipher: С^{-1} \oplus  C^{-1}'K=C^{-1}(CS \oplus  K) \oplus  C^{-1}K = C^{-1}CS \oplus  C^{-1}K \oplus  C^{-1}K = S

Теперь мы можем показать шифр и обратный шифр для альтернативного проекта. Обратите внимание, что мы все еще должны использовать два преобразования AddRoundKey в дешифровании. Другими словами, мы имеем девять InvAddRoundKey и два AddRoundKey преобразования, как это показано на рис. 10.5.

Изменение алгоритма расширения ключей

Вместо того чтобы использовать преобразование InvRoundKey в обратном шифре, можно изменить алгоритм расширения ключей так, чтобы создавать различное множество ключей раунда для обратного шифра. Однако отметим, что ключ раунда для операций предварительного раунда и последнего раунда должен быть изменен. Ключи раунда от 1 до 9 необходимо умножить на матрицу констант. Этот алгоритм оставим для упражнений.

< Лекция 9 || Лекция 10: 12345 || Лекция 11 >
Евгений Виноградов
Евгений Виноградов

Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа?

Илья Сидоркин
Илья Сидоркин

Добрый день! Подскажите пожалуйста как и когда получить диплом, после сдичи и оплаты?????