Контрольная (домашняя) работа №1 «Защита данных с помощью ассиметричных шифров»
1.1 Цель работы: изучить, освоить и программно реализовать алгоритм шифрования RSA
1.2 Теоретическое введение
Системы с открытым ключом (СОК). Алгоритм RSA
Рассмотрим системы с открытым ключом. Суть их состоит в том, что каждым адресатом ИС генерируются два ключа, связанные между собой по определенному правилу. Один ключ объявляется открытым, а другой закрытым. Открытый ключ публикуется и доступен любому, кто желает послать сообщение адресату. Секретный ключ сохраняется в тайне. Исходный текст шифруется открытым ключом адресата и передается ему. Зашифрованный текст в принципе не может быть расшифрован тем же открытым ключом. Дешифрование сообщение возможно только с использованием закрытого ключа, который известен только самому адресату. Криптографические системы с открытым ключом используют так называемые необратимые или односторонние функции, которые обладают следующим свойством: при заданном значении x относительно просто вычислить значение f(x), однако если y=f(x), то нет простого пути для вычисления значения x. Под необратимостью понимается не теоретическая необратимость, а практическая невозможность вычислить обратное значение, используя современные вычислительные средства за обозримый интервал времени.
Алгоритм RSA
Криптосистема RSA, разработанная в 1977 году и получившая название в честь ее создателей: Рона Ривеста (Rivest), Ади Шамира (Shamir) и Леонарда Эйдельмана (Adleman). В его основу положен тот факт, что нахождение больших простых чисел в вычислительном отношении осуществляется легко, но разложение на множители произведения двух таких чисел практически невыполнимо. Доказано (теорема Рабина), что раскрытие шифра RSA эквивалентно такому разложению. Поэтому для любой длины ключа можно дать нижнюю оценку числа операций для раскрытия шифра. В настоящее время алгоритм RSA используется во многих стандартах, среди которых SSL, S-HHTP, S-MIME, S/WAN, STT и PCT.
Рассмотрим математические результаты, положенные в основу этого алгоритма.
Теорема 1. (Малая теорема Ферма.)
Если р - простое число, то xp-1 = 1 (mod p) (1) для любого х, простого относительно р, и xp = х (mod p) (2) для любого х.
Доказательство. Достаточно доказать справедливость уравнений (1) и (2) для хZp. Проведем доказательство методом индукции.
Очевидно, что уравнение (2) выполняется при х=0 и 1. Далее xp=(x-1+1)p= C(p,j)(x-1)j=(x-1)p+1 (mod p), 0jp, так как C(p,j)=0(mod p) при 0<j<p. С учетом этого неравенства и предложений метода доказательства по индукции теорема доказана.
Определение. Функцией Эйлера (n) называется число положительных целых, меньших n и простых относительно n.
N |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
(n) |
1 |
2 |
2 |
3 |
2 |
6 |
4 |
6 |
4 |
10 |
4 |
Теорема 2. Если n=pq, (p и q – отличные друг от друга простые числа), то (n)=(p-1)(q-1).
Теорема 3. Если n=pq, (p и q – отличные друг от друга простые числа) и х - простое относительно р и q, то x(n) = 1 (mod n).
Следствие. Если n=pq, (p и q – отличные друг от друга простые числа) и е простое относительно (n), то отображение Еe,n: xxe (mod n) является взаимно однозначным на Zn.
Очевиден и тот факт, что если е – простое относительно (n), то существует целое d, такое,
ed = 1 (mod (n)) (3) (3)
В криптосистеме RSA открытый ключ e, секретный ключ d, сообщение M и криптограмма C принадлежат множеству целых чисел: ZN={0, 1, 2, …, N-1}, где N – модуль: N=P*Q. Здесь P и Q – случайные большие простые числа.
В качестве открытого ключа e выбирают число, взаимно простое с (N) так, чтобы выполнялось условие
1 < e (N) (4)
Далее с помощью формулы (3) вычисляется закрытый (секретный) ключ d.
Открытый ключ e используют для шифрования данных, закрытый ключ d – для расшифрования.
Шифрование определяет криптограмму C в соответствии со следующей формулой:
C=Me (mod N) (5)
Обращение этой функции, т.е. определение значения M по известным значениям C, e и N, практически не осуществимо при N2512.
Однако, обратную задачу, т.е. задачу расшифрования криптограммы C, можно решить по следующей формуле:
M=Cd (mod N) (6)
Такой результат следует из приведенных выше теорем и формулы (3).
{e,N} образует открытый ключ, а {d,N} – закрытый (хотя можно взять и наоборот).
Получатель, который создает криптосистему, защищает два параметра: закрытый ключ d, пару чисел (P,Q), произведение которых дает значение модуля N. С другой стороны, получатель открывает значение модуля N и открытый ключ e.
Описание последовательности действий алгоритма RSA.
Предположим, что пользователь А хочет передать пользователю В сообщение в зашифрованном виде, используя криптосистему RSA. В таком случае пользователь А выступает в роли отправителя сообщения, а пользователь В – в роли получателя. Рассмотрим последовательность действий пользователя В и пользователя А.
Пользователь В выбирает два произвольных больших простых числа P и Q.
Пользователь В вычисляет значение модуля N=P*Q.
Пользователь В вычисляет функцию Эйлера (N) и выбирает случайным образом значение открытого ключа е, взаимно простого с (N), с учетом условия (4).
Пользователь В вычисляет значение секретного ключа d, используя формулу (3).
Пользователь В пересылает пользователю А пару чисел (е,N) по незащищенному каналу.
Если пользователь А хочет передать пользователю В сообщение М, он выполняет следующие шаги.
Пользователь А разбивает исходный открытый текст М на блоки, каждый из которых может быть представлен в виде числа Mi = 0, 1, …, N–1.
Пользователь А шифрует текст, представленный в виде последовательности чисел Mi по формуле Ci=Mie (mod N) и отправляет криптограмму {Ci} пользователю В (где mod – сложение по модулю 2).
Пользователь В расшифровывает принятую криптограмму {Ci}, используя закрытый ключ d по формуле Mi=Cid (mod N) (где mod – сложение по модулю 2).
В результате будет получена последовательность чисел {Mi}, которые представляют собой исходное сообщение М. Чтобы алгоритм RSA имел практическую ценность, необходимо иметь возможность без существенных затрат генерировать большие простые числа, уметь оперативно вычислять значения ключей e и d.
