Раздел: Документация
0 ... 95 96 97 98 99 100 101 ... 169 Цикловое преобразование Цикловое преобразование состоит из четырех различных преобразований. На псевдо-Си это выглядит следующим образом: Round (State, RoundKey) { ByteSub(State); // замена байт ShiftRow (State); // сдвиг строк MixColumn(State); // замешивание столбцов AddRoundKey(State, RoundKey); // добавление циклового ключа } Последний цикл шифра немного отличается. Вот как он выглядит: FinalRound (State, RoundKey) < ByteSub(State) ; // замена байт // сдвиг строк // добавление циклового ключа } В приведенной записи «функции» Round, ByteSub и т. д. выполняют свои действия над массивами, указатели (т. е. State, RoundKey) на которые им передаются. Как можно заметить, последний цикл отличается от простого цикла только отсутствием замешивания столбцов. Каждое из приведенных преобразований разобрано далее. Замена байт (ByteSub) Преобразование ByteSub представляет собой нелинейную замену байт, выполняемую независимо с каждым байтом состояния. Таблицы замены (или S-блоки) являются инвертируемыми и построены из композиции двух преобразований: 1. Первое — получение обратного элемента относительно умножения в поле GF(28), описанного в разделе 2.1. 00 переходит сам в себя. 296 2. Применение афинного преобразования (над GF(2)), определенного как:
Применение описанного S-блока ко всем байтам состояния обозначено как ByteSub(State). Рисунок 2 иллюстрирует применение преобразования ByteSub к состоянию.
Рисунок 2. ByteSub действует на каждый байт состояния Преобразование сдвига строк (ShiftRow) Последние 3 строки состояния циклически сдвигаются на различное число байт. Строка 1 сдвигается на С1 байт, строка 2 — на С2 байт и строка 3 — на СЗ байт. Значения сдвигов CI, С2 и СЗ зависят от длины блока Nb. Их величины приведены в таблице 2. 297
Таблица 2. Величина сдвига для разной длины блоков Операция сдвига последних 3 строк состояния на определенную величину обозначена как ShiftRow(State). Рисунок 3 показывает влияние преобразования на состояние.
Рисунок 3, shiftroi действует на строки состояния преобразование замешивания столбцов (mlxcolumn) В этом преобразовании столбцы состояния рассматриваются как многочлены над GF(28) и умножаются по модулю на многочлен с(х), выглядящий следующим образом: с(х)-03хЗ + 01х2 + 01х + 02 Как описано в разделе это может быть представлено в виде матричного умножения. Пусть b (х) - с (х) а (х)
298 0 ... 95 96 97 98 99 100 101 ... 169
|