- •Федеральное агенство по образованию Государственное образовательное учреждение высшего профессионального образования «Санкт-Петербургский государственный электротехнический университет» («лэти»)
- •Введение
- •1. Обзор современного состояния темы
- •2. Алгоритмы и атаки, включенные в состав обучающей программы
- •2.1. Критерии отбора алгоритмов
- •2.2. Симметричные алгоритмы шифрования
- •2.3. Описание симметричных криптографических алгоритмов
- •2.3.1. Алгоритм Blowfish
- •2.3.2. Алгоритм гост
- •3. Алгоритмы шифрования с открытым ключом
- •3.1. Алгоритм rsa
- •3.2. Алгоритм Эль-Гамаля
- •4. Алгоритмы цифровой подписи
- •4.1. Схема rsa
- •4.2. Схема dsa
- •4.3. Схема подписи Эль-Гамаля
- •4.4. Алгоритм гост
- •5. Криптографические атаки
- •5.1. Атака на общий модуль против алгоритма rsa
- •5.2. Атака на выбранный шифртекст против алгоритма rsa
- •5.3. Атака против алгоритма dsa
- •6. Особенности реализации алгоритмов
- •6.1. Управление ключами
- •6.1.1. Генерация ключей
- •6.1.2. Хранение ключей
- •6.1.3. Длина ключа
- •6.2. Особенности реализации асимметричных алгоритмов
- •6.2.1. Модульная арифметика
- •6.2.2. Представление многозначных чисел
- •6.2.3. Сложение многозначных чисел
- •6.2.4. Умножение многозначных чисел
- •6.2.5. Деление многозначных чисел
- •6.3. Особенности реализации симметричных алгоритмов
- •6.3.1. Дополнение сообщений
- •6.3.2. Таблицы подстановки для алгоритма шифрования гост 28147-89
- •6.3.3. Подключи и таблицы подстановки для алгоритма Blowfish
- •6.3.4. Режим использования блочных шифров
- •Проектирование интерфейса
- •7.1. Сценарии использования программы
- •7.2. Пошаговое выполнение симметричных алгоритмов
- •7.3. Пошаговое выполнение асимметричных шифров
- •7.4. Пошаговое выполнение алгоритмов цифровой подписи
- •7.5. Демонстрация работы атак
- •7.5.1. Криптоанализ алгоритма rsa на основе выбранного шифртекста
- •7.5.2. Криптоанализ алгоритма rsa для случая общего модуля
- •8. Оценка скорости работы алгоритма
- •9. Структура диалога
- •10. Заключение
- •Список литературы
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.
Установить счетчик i = 1.
Преобразовать подблок Lи вычислить текущее значение переменнойV:
L := L Ki;
V := F(L).
Преобразовать подблок R:
R := R V.
Если i= 16, то перейти к шагу 7.
Прирастить i:=i+1 и переставить подблокиRиL:
W := R; R := L; L := W.
Перейти к шагу 2.
Преобразовать подблок R:
R := R K17.
Преобразовать подблок L:
L := L K18.
Выход: 64-битовый блок зашифрованного текста L|R.
Алгоритм дешифрования
Вход: 64-битовый блок зашифрованного текста C=L|R.
Преобразовать подблок R:
R := R K17.
Преобразовать подблок L:
L := L K18.
Установить счетчик i = 16.
Вычислить текущее значение переменной Vи преобразовать подблокR:
V := F(L);
R := R V.
Преобразовать подблок L:
L := L K17-i.
Если i=1, то перейти к шагу 9.
Переставить подблоки RиL:
W := R; R := L; L := W.
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.
Установить счетчик i=1.
V := R
вычислить номер выбираемого подключа j:
j = (i-1) mod 8, если i<25,
j = (32-i) mod 8, если i25.
Преобразовать подблок R:
R := (R + Qj) mod 232;
R := F’(R);
R := R 11;
R := R L.
L := V.
Если i≠ 32, тоi:=i+1 и перейти к шагу 2.
Выход: 64-битовый блок шифрованного текста C=L|R.
Алгоритм дешифрования
Вход: 64-битовый блок шифрованного текста C=L|R.
Установить счетчик i =1.
V := L.
Вычислить номер выбираемого подключа j:
j = (i-1) mod 8, если i8,
j = (32-i) mod 8, если i>8.
Преобразовать подблок L:
L := (L+Qj) mod 232;
L := F’(L);
L := L 11;
L := L R.
Преобразовать подблок R:
R := V.
Если i≠ 32, тоi:=i+1 и перейти к шагу 2.
Выход: 64-битовый блок открытого текста T=L|R.