Автоматическая система контроля

Автоматизация технологических процессов

Симметричные алгоритмы шифрования

KeyExpansion(CipherKey,W

{(i = 0; i < Nk; i++) W = CipherKey;(j = Nk; j < Nb*(Nk+1); j+=Nk)

{ = W ^ SubByte( Rotl( W ) ) ^ Rcon;(i = 1; i < Nk && i+j < Nb*(Nr+1); i++)

}

}

Как можно заметить, первые Nk слов заполняются ключом шифрования. Каждое последующее слово W получается посредством EXOR предыдущего слова W и слова на Nk позиций ранее W Для слов, позиция которых кратна Nk, перед EXOR применяется преобразование к W, а затем еще прибавляется цикловая константа. Преобразование содержит циклический сдвиг байтов в слове, обозначенный как Rotl, затем следует SubByte - применение замены байт. Для Nk>6 мы имеем:

(CipherKey,W)

{(i=0; i<Nk; i++) W=CipherKey;

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

{ = W ^ SubByte(Rotl(W)) ^ Rcon;(i=1; i<4; i++) W = W ^ W; = W ^ SubByte(W);(i=5; i<Nk; i++) W = W ^ W;

}

}

Отличие для схемы при Nk>6 состоит в применении SubByte для каждого 4-го байта из Nk. Цикловая константа независит от Nk и определяется следующим образом:

Rcon = ( RC, '00' , '00' , '00' ) (2.4)

где: RC='01'=xtime(Rcon)

Выбор циклового ключа.ый цикловой ключ получается из слов массива циклового ключа от W и доW Это показано на рисунке 2.12.

Рис 2.12: Расширение ключа и выбор циклового ключа для Nb=6 и Nk=4.

Замечание: Алгоритм выработки ключей можно осуществлять и без использования массива W Для реализаций, в которых существенно требование к занимаемой памяти, цикловые ключи могут вычисляться на лету посредством использования буфера из Nk слов.

Шифр Rijndael состоит из:

· начального добавления циклового ключа;

· Nr-1 циклов;

· заключительного цикла.

На псевдо-Си это выглядит следующим образом:

Rijndael (State, CipherKey)

{(CipherKey, ExpandedKey); // Расширение ключа(State, ExpandedKey); // Добавление циклового ключа( i=1 ; i<Nr ; i++) Round(State,ExpandedKey+Nb*i); // циклы(State, ExpandedKey+Nb*Nr); // заключительный цикл

}

Если предварительно выполнена процедура расширения ключа, то Rijndael будет выглядеть следующим образом:

Rijndael (State, CipherKey)

{(State, ExpandedKey);( i=1 ; i<Nr ; i++) Round(State,ExpandedKey+Nb*i);(State, ExpandedKey+Nb*Nr);

}

Замечание: Расширенный ключ должен всегда получаться из ключа шифрования и никогда не указывается напрямую. Нет никаких ограничений на выбор ключа шифрования.

Blowfish

Алгоритм был разработан в 1993 году Брюсом Шнайером (Bruce Schneier). Этот алгоритм, по заявлению автора, разрабатывался как быстрый, компактный и простой алгоритм с настраиваемой стойкостью (ключ до 448 бит).является сетью Фейштеля, у которой количество итераций равно 16. Длина блока равна 64 битам, ключ может иметь любую длину в пределах 448 бит. Хотя перед началом любого шифрования выполняется сложная фаза инициализации, само шифрование данных выполняется достаточно быстро.

Алгоритм состоит из двух частей: расширение ключа и шифрование данных. Расширение ключа преобразует ключ длиной, по крайней мере, 448 бит в несколько массивов подключей общей длиной 4168 байт.

В основе алгоритма лежит сеть Фейштеля с 16 итерациями. Каждая итерация состоит из перестановки, зависящей от ключа, и подстановки, зависящей от ключа и данных. Операциями являются XOR и сложение 32-битных слов.использует большое количество подключей. Эти ключи должны быть вычислены заранее, до начала любого шифрования или дешифрования данных. Элементы алгоритма:

1. Р - массив, состоящий из восемнадцати 32-битных подключей: Р1, Р2, ., Р18.

2. Четыре 32-битных S-boxes c 256 входами каждый. Первый индекс означает номер S-box, второй индекс - номер входа.

3. S1,0, S1,1, … S1,255;

4. S2,0, S2,1, … S2,255;

. S3,0, S3,1, … S3,255;

. S4,0, S4,1, … S4,255;

Метод, используемый для вычисления этих подключей, будет описан ниже.

Входом является 64-битный элемент данных X, который делится на две 32-битные половины, X1 и Xr.

= Xl XOR Pi (2.5)

Xr = F (Xl) XOR Xr (2.6)

Xl and Xr

Разделить Xl на четыре 8-битных элемента A, B, C, D.

F (Xl) = ((S1,А + S2,B mod 232) XOR S3,C) + S4,D mod 232

Дешифрование отличается от шифрования тем, что Pi используются в обратном порядке.

Генерация подключей: Подключи вычисляются с использованием самого алгоритма Blowfish. Для этого следует:

1 Инициализировать первый Р-массив и четыре S-boxes фиксированной строкой.

2 Выполнить операцию XOR P1 с первыми 32 битами ключа, операцию XOR P2 со вторыми 32 битами ключа и т.д. Повторять цикл до тех пор, пока весь Р-массив не будет побитно сложен со всеми битами ключа. Для коротких ключей выполняется конкатенация ключа с самим собой. Перейти на страницу: 1 2 3 4 5 6 7

Другие статьи по теме

Исследование и разработка конструкции широкополосного симметрирующего устройства На сегодняшний день развитие НТП (научно технический прогресс) в области электроники все чаще приводит к созданию новых типов электронных приборов и к возможности проектирования на их ос ...

Многофункциональное приемопередающее устройство диапазона 433 МГц В настоящее время многие зарубежные и отечественные производители микросхем имеют в своей линейке продуктов однокристальные ресиверы или приемопередатчики с возможностью работы как с одн ...

Территориальное планирование сетей телерадиовещания с учетом ЭМС РЭС на основе геоинформационных технологий На этапе проектирования телекоммуникационных сетей с появлением электронных карт и геоинформационных систем появилась возможность проведения более точных расчетов размещения радиоэлектр ...