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

Преобразования

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

Смешивание

Подстановка, которая делается преобразованием SubByte, изменяет значение байта, основанное только на первоначальном значении и входе в таблице; процесс не включает соседние байты. Мы можем сказать, что SubByteвнутрибайтовое преобразование. Перестановка, которая делается ShiftRows-преобразованием, обменивает местами байты, не переставляя биты в байтах. Мы можем сказать, что ShiftRows — преобразование обмена байтами. Теперь нам нужно внутрибайтовое преобразование, изменяющее биты в байте и основанное на битах в соседних байтах. Мы должны смешать байты, чтобы обеспечить рассеивание на разрядном уровне.

Преобразование смешивания изменяет содержание каждого байта, преобразовывая четыре байта одновременно и объединяя их, чтобы получить четыре новых байта. Чтобы гарантировать, что каждый новый байт будет отличаться от другого (даже если все четыре байта те же самые), процесс сначала умножает каждый байт на различный набор констант и затем смешивает их. Смешивание может быть обеспечено матричным умножением. Как мы обсуждали в лекциях 2-3, когда мы умножаем квадратную матрицу на матрицу-столбец, результат — новая матрица-столбец. После того как матрица умножена на значения строки в матрице констант, каждый элемент в новой матрице зависит от всех четырех элементов старой матрицы. Рисунок 9.11 иллюстрирует эту идею.

 Смешивание байтов с использованием смешивающей матрицы

Рис. 9.11. Смешивание байтов с использованием смешивающей матрицы

AES определяет преобразование, называемое MixColumns. Для применения такого преобразования вводится также обратное преобразование, называемое InvMixColumns. Рисунок 9.12 показывает матрицу констант, используемую для этих преобразований. Эти две матрицы инверсны друг другу, когда элементы интерпретируются как слова из 8-ми битов (или полиномы) с коэффициентами в GF (28). Доказательство мы оставляем как упражнение.

 Матрица констант, используюемая MixColumns  и InvMixColumns

Рис. 9.12. Матрица констант, используюемая MixColumns и InvMixColumns
MixColumns

Преобразование MixColumns работает на уровне столбца; оно преобразовывает каждый столбец матрицы состояний в новый столбец. Это преобразование — фактически матричное умножение столбца матрицы состояний и квадратной матрицы констант. Байты в столбце матрицы состояний и в матрице констант интерпретируются как слова по 8 битов (или полиномы) с коэффициентами в GF (2). Умножение байтов выполняется в GF(28) по модулю (10001101) или (x8 + x4 +, x3 + x + 1). Сложение — это применение операции ИСКЛЮЧАЮЩЕЕ ИЛИ (XOR) к словам по 8 бит. Рисунок 9.13 показывает преобразование MixColumns.

InvMixColumns

Преобразование InvMixColumns похоже на MixColumns-преобразование. Если две матрицы констант инверсны друг другу, то легко доказать, что эти два преобразования также инверсны друг другу.

Преобразования MixColumns и InvMixColumns инверсны друг другу.
 Преобразование MixColumns

Рис. 9.13. Преобразование MixColumns
Алгоритм

Алгоритм 9.3. — программа для преобразования MixColumns.

\tt\parindent0pt

\ 

MixColumns (S)

\{ 

for (c == 0 to 3)

\ \ \ \ mixcolumn (s_{c})

\} 

\ 

mixcolumn (col)  

\{ 

\ 

\ \ \ \ CopyColumn (col, t)    //t is a temporary column

\ 

\ \ \ \ col_{0} \gets  (0\times 02)*t_{0} \oplus  (0\times 03)*t_{1} \oplus  t_{2} \oplus  t_{3}

\ \ \ \ col_{1} \gets  t_{0} \oplus  (0\times 02)*t_{1} \oplus  (0\times 03)*t_{2} \oplus  t_{3}

\ \ \ \ col_{2} \gets  t_{0} \oplus  t_{1} (0\times 02)*t_{2} \oplus  (0\times 03) t_{3}

\ \ \ \ col_{3} \gets  (0\times 03)*t_{0} \oplus  t_{1} \oplus  t_{2} \oplus  (0\times 02)*t_{3}

\}
9.3. Программа на псевдокоде для преобразования MixColumns

Алгоритмы MixColumns и InvMixColumns включают умножение и сложение в поле GF(28). Как мы видели влекциях 5-6, есть простой и эффективный алгоритм для умножения и сложения в этом поле. Однако чтобы показать характер алгоритма (преобразование одного столбца одновременно), мы используем процедуру, называемую mixcolumn. Она может быть вызвана алгоритмом четыре раза. Процедура mixcolumn просто умножает строки матрицы констант на столбец в матрицы состояний. В вышеупомянутом алгоритме оператор (•), используемый в процедуре mixcolumn, — умножение в поле GF(28). Оно может быть заменено простой процедурой, как это уже рассматривалось в лекциях 5-6. Программу для InvMixColumns оставляем как упражнение.

Пример 9.5

Рисунок 9.14 показывает, как матрица состояний преобразуется, используя преобразование MixColumns. Рисунок также показывает, что преобразование InvMixColumns создает первоначальный текст.

 Преобразование MixColumns  в примере 9.5.

Рис. 9.14. Преобразование MixColumns в примере 9.5.

Обратите внимание, что байты, которые равны между собой в старой матрице состояний, больше не равны в новой матрице состояний. Например, два байта F2 во второй строке изменены на CF и 0D.

Добавление ключей

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

AES использует процесс, названный ключевым расширением (мы его обсудим позже), который из ключа шифра создает Nr+1 ключей раунда. Каждые ключи раунда — 128-битовой длины и обрабатываются они как четыре слова по 32 бита. Для добавления ключа к матрице состояний каждое слово рассматривается как матрица-столбец.

AddRoundKey

AddRoundKey обрабатывает в один момент времени один столбец. Он подобен MixColumns. MixColumns умножает квадратную матрицу констант на каждый столбец матрицы состояний. AddRoundKey складывает ключевое слово раунда с каждым столбцом матрицы состояний. В MixColumns применяется матричное умножение; в AddRoundKey — операции сложения и вычитания. Так как сложение и вычитание в этом поле одни и те же, AddRoundKey инверсен сам себе. Рисунок 9.15 показывает преобразование AddRoundKey.

Преобразование AddRoundKey инверсно само себе.
Алгоритм

Преобразование AddRoundKey может быть представлено как операция ИСКЛЮЧАЮЩЕЕ ИЛИ (XOR) каждой колонки матрицы состояний с соответствующим ключевым словом. Мы еще будем обсуждать, как расширяется ключ шифрования во множестве ключевых слов, но в данном случае мы определим преобразование, как это показано в алгоритме 9.4. Заметим, что sc и wround +4c матрицы — колонки 4 \times 1.

 Преобразование AddRoundKey

Рис. 9.15. Преобразование AddRoundKey
\tt\parindent0pt

\ 

AddRoundKey (S)

\{ 

for (c = 0 to 3)

s_{c} \gets  s_{c} \oplus  w_{round +4c}  

\}
9.4. Преобразование AddRoundKey

Напомним, что оператор  \oplus здесь означает операцию ИСКЛЮЧАЮЩЕЕ ИЛИ (XOR) для двух колонок матрицы, каждая из 4-х байт. Описание этой простой процедуры оставим для упражнений.

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

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

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

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

Р Алоев
Р Алоев
Россия
Татьяна Тренина
Татьяна Тренина
Россия, Челябинск