Дипломная работа: Интегральная атака против блочного симметричного шифра Crypton
Последний цикл шифра немного отличается. Вот как он выглядит:
FinalRound(State, RoundKey)
{
ByteSub(State); // замена байт
ShiftRow(State); // сдвиг строк
AddRoundKey(State, RoundKey); // добавление циклового ключа
}
В приведенной записи, "функции" - Round, ByteSub и т.д. выполняют свои действия над массивами, указатели (т.е. State, RoundKey) на которые им передаются.
Как можно заметить, последний цикл отличается от простого цикла только отсутствием замешивания столбцов. Каждое из приведенных преобразований разобрано далее.
Преобразование ByteSub представляет собой нелинейную замену байт, выполняемую независимо с каждым байтом состояния. Таблицы замены (или S-блоки) являются инвертируемыми и построены из композиции двух преобразований:
1. Первое - получение обратного элемента относительно умножения в поле GF(28), '00' переходит сам в себя.
2. Применение афинного преобразования (над GF(2)), определенного как:
Табл. 1.3. Таблицы замены
Применение описанного S-блока ко всем байтам состояния обозначено как ByteSub(State). Рисунок 1.5 иллюстрирует применение преобразования ByteSub к состоянию.
Рисунок 1.5 ByteSub действует на каждый байт состояния.
Последние 3 строки состояния циклически сдвигаются на различное число байт. Строка 1 сдвигается на С1 байт, строка 2 - на С2 байт и строка 3 - на С3 байт. Значения сдвигов С1, С2 и С3 зависят от длины блока Nb. Их величины приведены в таблице 1.4.
Таблица 1.4. Величина сдвига для разной длины блоков.
Операция сдвига последних 3 строк состояния на определенную величину обозначена как ShiftRow(State). Рисунок 1.5 показывает влияние преобразования на состояние.
Рисунок 1.5 ShiftRow действует на строки состояния.
В преобразовании замешивания столбцов (MixColumn) столбцы состояния рассматриваются как многочлены над GF(28) и умножаются по модулю x4+1 на многочлен c(x), выглядящий следующим образом:
c(x)='03' x3 + '01' x2 + '01' x + '02'(1.8)
Это может быть представлено в виде матричного умножения. Пусть b(x)=c(x)a(x),
Табл. 1.6 Матричное умножение
Применение этой операции ко всем четырем столбцам состояния обозначено как MixColumn(State). Рисунок 1.7 демонстрирует применение MixColumn к состоянию.