Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Обучающая программа / Пояснительная записка.doc
Скачиваний:
39
Добавлен:
01.05.2014
Размер:
240.13 Кб
Скачать

2.3. Описание симметричных криптографических алгоритмов

2.3.1. Алгоритм Blowfish

Описание алгоритма приведено в [2]. Длина ключа может составлять от 64 до 448 бит. Длина обрабатываемого блока – 64 бита. В алгоритмах шифрования/дешифрования используется несколько массивов подключей: массив 32-битовых подключей K1,K2,…,K18и четыре последовательности 32-битовых подключей, каждая из которых содержит 256 элементов,

Q0(1),Q1(1), …,Q255(1);

Q0(2),Q1(2), …,Q255(2);

Q0(3),Q1(3), …,Q255(3);

Q0(4),Q1(4), …,Q255(4).

Последовательности Q(i)используются для задания функцииF(X), гдеX– 32-битовый аргумент. При заданномXвычисление этой функции производится следующим образом. 32-битовое словоXпредставляется в виде конкатенации 8-битовых слов:X=x3|x2|x1|x0.

Затем производится вычисление:

F(X) = {[(Qx3(1) +Qx2(2))mod232]Qx1(3)} +Qx0(4)(mod232).

Последовательности Q(i)фактически задают большую таблицу отображения входных 32-битовых подблоков в выходные 32-битовые подблоки.

Алгоритм шифрования

Вход: 64-битовый блок открытых данных T=L|R, представленный в виде конкатенации 32-битовых подблоковLиR.

  1. Установить счетчик i = 1.

  2. Преобразовать подблок Lи вычислить текущее значение переменнойV:

L := L  Ki;

V := F(L).

  1. Преобразовать подблок R:

R := R  V.

  1. Если i= 16, то перейти к шагу 7.

  2. Прирастить i:=i+1 и переставить подблокиRиL:

W := R; R := L; L := W.

  1. Перейти к шагу 2.

  2. Преобразовать подблок R:

R := R  K17.

  1. Преобразовать подблок L:

L := L  K18.

Выход: 64-битовый блок зашифрованного текста L|R.

Алгоритм дешифрования

Вход: 64-битовый блок зашифрованного текста C=L|R.

  1. Преобразовать подблок R:

R := R  K17.

  1. Преобразовать подблок L:

L := L  K18.

  1. Установить счетчик i = 16.

  2. Вычислить текущее значение переменной Vи преобразовать подблокR:

V := F(L);

R := R  V.

  1. Преобразовать подблок L:

L := L  K17-i.

  1. Если i=1, то перейти к шагу 9.

  2. Переставить подблоки RиL:

W := R; R := L; L := W.

  1. i:=i-1 и перейти к шагу 4.

Выход: блок открытого текста L|R.

2.3.2. Алгоритм гост

Этот алгоритм шифрования определен в стандарте ГОСТ 28147-89 [4].

Длина ключа составляет 256 бит. Длина обрабатываемого блока – 64 бита (56 бит без учета контрольных разрядов)

Процедуры шифрования и дешифрования соответствуют итеративной схеме Фейстеля, в которой функция F(R,K) задается операцией суммирования по модулю 232, табличными подстановками, выполняемыми над 4-битовыми подблоками, и операцией циклического сдвига влево на 11 бит «11», выполняемой над 32-битовым подблоком.

Табличные подстановки осуществляются следующим образом. Подблок Rпредставляется в виде конкатенации 4-битовых подблоков:R=r7|r6|r5 |r4|r3|r2|r1|r0. Затем над каждым подблокомriвыполняется операция подстановки, задаваемая таблицамиS7,S6, …,S0. Каждая таблица представляет собой некоторую перестановку чисел {0, 1,…, 15}, т.е. таблицаSпредставляется упорядоченным набором 4-битовых чиселs0,s1,…,s15. Обозначим операцию подстановки, выполняемую с помощью таблицыSнад подблокомrкакS(r). Эта операция заключается в замене значенияrна значениеsr, т.е.S(r) =sr. Введем функциюF’(R), задаваемую выражениемF’(R), задаваемую выражениемF’(R) =S7(r7) |S6(r6) | … |S0(r0).

Алгоритм шифрования

Вход: 64-битовый блок исходного текста T, представленный в виде конкатенации двух 32-битовых подблоковLиR:T=L|R.

  1. Установить счетчик i=1.

  2. V := R

  3. вычислить номер выбираемого подключа j:

j = (i-1) mod 8, если i<25,

j = (32-i) mod 8, если i25.

  1. Преобразовать подблок R:

R := (R + Qj) mod 232;

R := F(R);

R := R 11;

R := R  L.

  1. L := V.

  2. Если i≠ 32, тоi:=i+1 и перейти к шагу 2.

Выход: 64-битовый блок шифрованного текста C=L|R.

Алгоритм дешифрования

Вход: 64-битовый блок шифрованного текста C=L|R.

  1. Установить счетчик i =1.

  2. V := L.

  3. Вычислить номер выбираемого подключа j:

j = (i-1) mod 8, если i8,

j = (32-i) mod 8, если i>8.

  1. Преобразовать подблок L:

L := (L+Qj) mod 232;

L := F’(L);

L := L 11;

L := L  R.

  1. Преобразовать подблок R:

R := V.

  1. Если i≠ 32, тоi:=i+1 и перейти к шагу 2.

Выход: 64-битовый блок открытого текста T=L|R.