Использование современных симметрических (DES), и асимметрических (RSA) алгоритмов шифрования
Содержание
1. Реализовать алгоритм DES и 4 режима шифрования. Шифрование реализовать для любой длины сообщения и любой длины ключа до 56 бит включительно.
2. Зашифровать сообщения длиной 1 МБ, 10 МБ, 20 МБ и ключом 5,6,7 байт. Для каждого режима, длины сообщения и ключа замерять время и скорость зашифрования
3. В режимах шифрования DESOFB и CFB размер блока шифрования брать равным порядковому номеру в списке группы
4. Реализовать алгоритм RSA. Сгенерировать 3 пары открытый/закрытый ключей. Брать файлы размером 20 Кб, 50 Кб, 100 Кб, 500 Кб, 1 МБ.
5. Каждый файл шифровать с 3 парами ключей. Посчитать время зашифрования/расшифрования и среднюю скорость шифрования/расшифрования для каждой пары ключей и каждого файла.
6. Программа должна предусматривать сохранение зашифрованного и расшифрованного файла на диск, а также вывод на экран скорости и времени шифрования.
Примечание.
1. Исходный текст брать произвольный, используя символы из Алфавита (Алфавит брать из Таблицы 1, согласно Вашего варианта)
2. Ваш вариант=(Номер в списке группы) mod 23
3. Буквам поставить в соотвествие числа [0..мощность_алфавита-1] (например букве а->0,б->1, в->2 итд.)
Таблица 1.
№ п/п | A | B | Алфавит |
15 | 2000 | 5000 | Цифры, спецсимвол(@) и строчные буквы русского алфавита |
Шифр RSA
Алгоритм RSA предложили в 1978 г. три автора: Р.Райвест (Rivest), А.Шамир (Shamir) и А.Адлеман (Adleman). Алгоритм получил свое название по первым буквам фамилий его авторов. Алгоритм RSA стал первым полноценным алгоритмом с открытым ключом, который может работать как в режиме шифрования данных, так и в режиме электронной цифровой подписи.
Надежность алгоритма основывается на трудности факторизации больших чисел и трудности вычисления дискретных логарифмов.
В криптосистеме RSA открытый ключ КA, секретный ключ КB, сообщение М и криптограмма С принадлежат множеству целых чисел
ZN={0,1,2,...,N-1} (1)
где N - модуль:
N = P*Q. (2)
Здесь Р и Q - случайные большие простые числа. Для обеспечения максимальной безопасности выбирают Р и Q равной длины и хранят в секрете.
Множество ZN с операциями сложения и умножения по модулю N образует арифметику по модулю N.
Открытый ключ КA выбирают случайным образом так, чтобы выполнялись условия:
(3)
, (4) где - функция Эйлера, указывающая количество положительных целых чисел в интервале от 1 до N, которые взаимно просты сN.Условие (4) означает, что открытый ключ КA и функция Эйлера
должны быть взаимно простыми.Далее, используя расширенный алгоритм Евклида, вычисляют секретный ключ K B, такой, что
KB * К A = 1 ( mod() (5)или
Это можно осуществить, так как получатель В знает пару простых чисел (P,Q) и может легко найти
. Заметим, что K B и N должны быть взаимно простыми.Открытый ключ К A используют для шифрования данных, а секретный ключ K B -для расшифрования.
Преобразование шифрования определяет криптограмму С через пару (открытый ключ КA, сообщение М) в соответствии со следующей формулой:
(6)
Обращение функции
, т.е. определение значения М по известным значениям С, К A и N, практически не осуществимо при N > 2512.Однако обратную задачу, т.е. задачу расшифрования криптограммы С, можно решить, используя пару (секретный ключ K B, криптограмма С) по следующей формуле:
(7)
Процесс расшифрования можно записать так:
DB (ЕА (М)) = М. (8)
Подставляя в (8) значения (6) и (7), получаем:
Или
(9)Величина
играет важную роль в теореме Эйлера, которая утверждает, что если НОД (х,N)=1, тоили в несколько более общей форме
(10)Сопоставляя выражения (9) и (10), получаем
или, что то же самое,
.Именно поэтому для вычисления секретного ключа KB используют соотношение (5).
Таким образом, если криптограмму
возвести в степень K B, то в результате восстанавливается исходный открытый текст М, так как
Таким образом, получатель В, который создает криптосистему, защищает два параметра: секретный ключK B и пару чисел(P,Q), произведение которых дает значение модуля N. С другой стороны, получатель В открывает значение модуля N и открытый ключ К А .
Противнику известны лишь значения К А и N. Если бы он смог разложить число N на множители Р и Q, то он узнал бы "потайной ход" - тройку чисел {Р,Q, К A }, вычислил значение функции Эйлера
и определил значение секретного ключа K B.
Однако, как уже отмечалось, разложение очень большого N на множители вычислительно не осуществимо (при условии, что длины выбранных Р и Q составляют не менее 100 десятичных знаков).
Алгоритм шифрования и расшифрования в криптосистеме RSA
Предположим, что пользователь А хочет передать пользователю В сообщение в зашифрованном виде, используя криптосистему RSA. В таком случае пользователь А выступает в роли отправителя сообщения, а пользователь В - в роли получателя. Как отмечалось выше, криптосистему RSA должен сформировать получатель сообщения, т.е. пользователь В. Рассмотрим последовательность действий пользователя В и пользователя А.
1. Пользователь В выбирает два произвольных больших простых числа Р и Q.
2. Пользователь В вычисляет значение модуля N=Р*Q.
3. Пользователь В вычисляет функцию Эйлера (8):
4. Выбирает случайным образом значение открытого ключа К A с учетом выполнения условий:
5. Пользователь В вычисляет значение секретного ключа kB, используя расширенный алгоритм Евклида при решении сравнения
6. Пользователь В пересылает пользователю А пару чисел (N, К A) по незащищенному каналу.
Если пользователь А хочет передать пользователю В сообщение М, он выполняет следующие шаги.
7. Пользователь А разбивает исходный открытый текст М на блоки, каждый из которых может быть представлен в виде числа
Мi=0,1,2,...,N-1 .
8. Пользователь А шифрует текст, представленный в виде последовательности чисел М, по формуле
9. Пользователь А отправляет криптограмму C1, С2, С3,...,Ci, ... пользователю В.
10. Пользователь В расшифровывает принятую криптограмму C1, С2, С3,...,Ci, ..., используя секретный ключ kB, по формуле
.В результате будет получена последовательность чисел Mi, которые представляют собой исходное сообщение М. Чтобы алгоритм RSA имел практическую ценность, необходимо иметь возможность без существенных затрат генерировать большие простые числа, уметь оперативно вычислять значения ключей К A и К B.