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

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

Применение этой операции ко всем четырем столбцам состояния обозначено как MixColumn(State). Рисунок 4 демонстрирует применение MixColumn к состоянию.

ао.о

а,.0

aiti

аМ

а,.5

а:

a;j

а:.<

a2.s

аз..

а3

Ли

Им

а3,5

вс(х)

Ь0, 1

b.,i

kn

Ь]0

Ь*

Ь:,о

bzi

ki.j

Ьз.о

b„

Ej

kjj

Рисунок 4. MixColumn действует на столбцы состояния

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

В данной операции цикловой ключ добавляется к состоянию посредством простого EXOR.

Цикловой ключ вырабатывается из ключа шифрования

посредством алгоритма выработки ключей (key schedule).

Длина циклового ключа равна длине блока Nb.

Преобразование, содержащее добавление посредством EXOR циклового ключа к состоянию, обозначено как RoundKey).

Оно проиллюстрировано на рисунке 5.

299


Яо.о

Зо,1

Зо,1

Зо,5

ко,:

ko.i

bo,o

bo.i

ko,2

ко.з

3t,o

а,.,

ai,2

а,.3

3,4

35

Ф

km

км

к,.3

к,.,

Ь,0

b,,,

ku

ku

320

32.3

а2.4

к*,

Ьм

bi.,

k2.2

k2,3

Яз.О

a3.i

33,2

Зз,з

Эз,4

33,5

к,,

км

Ьз.о

b,.,

k3,2

кз.з

Рисунок 5. При добавлении ключа цикловой ключ складывается посредством EXOR с состоянием

Алгоритм выработки ключей (Key Schedule)

Цикловые ключи получаются из ключа шифрования посредством алгоритма выработки ключей. Он содержит два компонента: расширение ключа (Key Expansion) и выбор циклового ключа (Round Key Selection).

Основополагающие принципы алгоритма выглядят следующим

образом:

♦ Общее число бит цикловых ключей равно длине блока, умноженной на число циклов плюс 1 (например, для длины блока 128

бит и 10 циклов требуется 1408 бит циклового ключа).

♦Ключ шифрования расширяется в Расширенный Ключ

(Expanded Key).

♦Цикловые ключи берутся из Расширенного ключа следующим

образом: первый цикловой ключ содержит первые Nb слов, второй -

следующие Nb слов и т. д.

Расширение ключа (Key Expansion)

Расширенный ключ представляет собой линейный массив 4-байтовых слов и обозначен как W[Nb*(Nr+l)]. Первые Nk слов содержат ключ шифрования. Все остальные слова определяются рекурсивно из слов с меньшими индексами. Алгоритм выработки

300


ключей зависит от величины Nk: ниже приведена версия для Nk, равного или меньшего 6, и версия для Nk, большего 6.

Для Nk<6 или Nk=6 мы имеем: KeyExpansion(CipherKey,W) {

for (i = 0; i < Nk;W[i] = CipherKey [i] ;

for (j = Nk; j <Nb*(Nk+l); j+=Nk) I

W[j] = W[j-Nk] Л SubByte( Rotl ( W[j-1] ) ) Rcon[j/Nk];

for (i = 1; i < Nk && i+j < Nb* (Nr+1) ;

W[i+j] = W[i+j-Nk] Л W[i+j-l];

1

Как можно заметить, первые Nk слов заполняются ключом шифрования. Каждое последующее слово W[i] получается посредством EXOR предыдущего слова W[i-11 и слова на Nk позиций ранее W[i-Nk]. Для слов, позиция которых кратна Nk, перед EXOR применяется преобразование к W[i-l], а затем еще прибавляется цикловая константа. Преобразование содержит циклический сдвиг

байтов в слове, обозначенный как Rotl, затем следует SubByte -

применение замены байт.

Для Nk>6 мы имеем: KeyExpansion(CipherKey,W) {

for (i=0; i.<Nk;W [1]-CipherKey [i] ;

for .U-Nk-; j,<Nb* (Nk+1) ; j + = Nk) {

W[j] = W[j-Nk] Л SubByte(Rotl(W[j-l] ) ) Rcon[j/Nk];

for (i=l; i<4; i++) W[i+j] = W[i+j-Nk] Л W[i+j-

1] ;

W[j+4] = W[j+4-Nk] Л SubByte (W[j+3]) ;

for (i=5; i<Nk; i++) W[i+j] = H[i+j-Nk] л W[i+j-

1];

}

}

301



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