8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

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)), определенного как:

Уо

1

1

11

11

0

0

0

бо

+

0

У)

0

1

1

1

0

0

б,

1

Уг

0

0

1

1

1

1

1

0

о2

1

Уз

0

0

0

1

1

1

1

1

бз

0

У4

1

0

0

0

1

1

1

1

о4

0

у5

1

1

0

0

0

1

1

1

о5

0

1

1

1

0

0

0

1

1

б6

1 1

У7

1

1

1

1

0

0

0

1

07

Применение описанного S-блока ко всем байтам состояния обозначено как ByteSub(State). Рисунок 2 иллюстрирует применение преобразования ByteSub к состоянию.

ао.о

a«,i

J. Ял , \

ао.д

а,л

1.2

«у

ai.s

•ы

a3S

-...1

a3.i

а™

а»

а?.5

k],0

km

шг

k,,

kj.j I кзз

Рисунок 2. ByteSub действует на каждый байт состояния

Преобразование сдвига строк (ShiftRow)

Последние 3 строки состояния циклически сдвигаются на различное число байт. Строка 1 сдвигается на С1 байт, строка 2 — на С2 байт и строка 3 — на СЗ байт.

Значения сдвигов CI, С2 и СЗ зависят от длины блока Nb. Их величины приведены в таблице 2.

297


Nb

с1

C2

C3

4

1

2

3

6

1

2

3

8

1

3

4

Таблица 2. Величина сдвига для разной длины блоков

Операция сдвига последних 3 строк состояния на определенную величину обозначена как ShiftRow(State). Рисунок 3 показывает влияние преобразования на состояние.

т

п

0

p

• ••

Й4( faaeSk t->

т

п

о

Р

II,

j

k

i

•••

>

J

к

i

d

е

f

...

6ЬШ+шГАИПиШк2\—

-1

>—•—

d

е

/

w

X

у

z

...

ЫЫб+ШЬб -1-r

w

X

3L

Рисунок 3, shiftroi действует на строки состояния

преобразование замешивания столбцов (mlxcolumn)

В этом преобразовании столбцы состояния рассматриваются как многочлены над GF(28) и умножаются по модулю на многочлен с(х), выглядящий следующим образом:

с(х)-03хЗ + 01х2 + 01х + 02

Как описано в разделе это может быть представлено в виде матричного умножения. Пусть b (х) - с (х) а (х)

bo

02

03

01

01

ао

Ь.

01

02

03

01

ai

Ь2

01

01

02

03

ы

03

01

01

02

аз

298



0 ... 95 96 97 98 99 100 101 ... 169