Автор работы: Пользователь скрыл имя, 27 Мая 2013 в 01:06, курсовая работа
Целью работы является освоение основных методов и алгоритмов криптографии с открытым ключом и тем самым закрепить знания практическими навыками использования криптографических методов с открытым ключом.
К основным задачам данной работы относятся:
− изучение криптографических алгоритмов с открытым ключом;
− использование алгоритмов криптографии с открытым ключом (зашифровывание/расшифровывание данных, генерация и управление ключами, использование электронных цифровых подписей, обеспечение конфиденциальности, целостности и достоверности передаваемой информации и др.).
ВВЕДЕНИЕ..............................................................................................................................3
1. Теоретические сведения.....................................................................................................5
2. Вспомогательные алгоритмы для реализации шифрования...........................................8
2.1 Алгоритм Евклида - нахождения наибольшего общего делителя................................8
2.2 Расширенный алгоритм Евклида для вычисления мультипликативного обратного.8
2.3 Алгоритм быстрого возведения в степень для ab mod n при больших значениях b.13
3. Алгоритм вычисления степеней целого числа am по модулю p
и целых чисел, принадлежащих показателю (p), первообразных корней по модулю p. Обмен ключами по схеме Диффи-Хеллмана..................................................................17
3.1 Алгоритм вычисления степеней целого числа am по модулю p и целых чисел, принадлежащих показателю (p), первообразных корней по модулю p. .......................17
3.2 Генерация и обмен секретными ключами по схеме Диффи-Хеллмана между пользователями сети.............................................................................................................20
4. Метод зашифровывания с открытым ключом RSA.......................................................24
5. Решение поставленной задачи методом RSA на языке С.............................................30
ЗАКЛЮЧЕНИЕ.....................................................................................................................31
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ.................................................................32
ПРИЛОЖЕНИЯ.....................................................................................................................33
f ´X1 + d ´X2 = 1769 ´ (-23) + 550 ´ 74 = -40687 + 40700 = 13 = X3;
f ´Y1+ d ´ Y2= 1769 ´ 37 + 550 ´ (-119) = 65453 - 65450 = 3 = Y3.
8. Y3 ¹ 0; Y3 ¹ 1.
Q =ëX3/Y3û= ë13/3û = 4.
T1 = X1 – Q ´ Y1 = (-23) – 4 ´ 37 = -171;
T2 = X2 – Q ´Y2 = 74 – 4 ´ (-119) = 550;
T3 = X3 – Q ´Y3 = 13 – 4 ´ 3 = 1.
X1 = Y1 = 37;
X2 = Y2 = -119;
X3 = Y3 = 3.
Y1 = T1 = -171;
Y2 = T2 = 550;
Y3 = T3 = 1.
Соотношения:
f ´T1 + d ´T2 = 1769 ´ (-171) + 550 ´ 550 = -302499 + 302500= 1 = T3;
f ´X1 + d ´X2 = 1769 ´ 37 + 550 ´ (-119) = 65453 - 65450 = 3 = X3;
f ´ Y1+ d ´ Y2= 1769 ´ (-171) + 550 ´ 550 = -302499 + 302500 = 1 = Y3.
9. Y3 = 1.
Q =ëX3/Y3û= ë1/1û = 1.
T1 = X1 – Q ´Y1 = -171 – 1 ´ (-171) = 0;
T2 = X2 – Q ´Y2 = 550 – 1 ´ 550 = 0;
T3 = X3 – Q ´ Y3 = 1 – 1 ´ 1 = 0.
X1 = Y1 = -171;
X2 = Y2 = 550;
X3 = Y3 = 1.
Y1 = T1 = 0;
Y2 = T2 = 0;
Y3 = T3 = 0.
Соотношения:
f ´T1 + d ´ T2 = 1769 ´ 0 + 550 ´ 0 = 0 = T3;
f ´X1 + d ´ X2 = 1769 ´ (-171) + 550 ´ 550 = - 302499 + 302500= 1 = X3;
f´Y1+d´Y2= 1769 ´ 0 + 550 ´ 0 = 0 = Y3.
Так как на предыдущем (на восьмом) этапе
f ´Y1+ d ´ Y2= 1769 ´ (-171) + 550 ´ 550 = -302499 + 302500 = 1 = Y3,
и d ´Y2 = 1 + f ´ (-Y1),то d ´ Y2 º 1 mod 1769.
Основные параметры вычислений занесены в таблицу (табл.1.1).
Таблица 2.1 Параметры вычислений gcd(550, 1769) = 1
Этапы |
Q |
X1 |
X2 |
X3 |
Y1 |
Y2 |
Y3 |
0 |
- |
1 |
0 |
1769 |
0 |
1 |
550 |
1 |
3 |
0 |
1 |
550 |
1 |
-3 |
119 |
2 |
4 |
1 |
-3 |
119 |
-4 |
13 |
74 |
3 |
1 |
-4 |
13 |
74 |
5 |
-16 |
45 |
4 |
1 |
5 |
-16 |
45 |
-9 |
29 |
29 |
5 |
1 |
-9 |
29 |
29 |
14 |
-45 |
16 |
6 |
1 |
14 |
-45 |
16 |
-23 |
74 |
13 |
7 |
1 |
-23 |
74 |
13 |
37 |
1119 |
3 |
8 |
4 |
37 |
-119 |
3 |
-171 |
550 |
1 |
9 |
1 |
-117 |
550 |
1 |
0 |
0 |
0 |
Ответ:gcd (550, 1769) = 1 и 550 ´ 550 º 1 mod 1769.
Во многих криптографических алгоритмах приходится выполнять операции возведения в большую целую степень другого целого числа (тоже большого) по модулю n. Если операцию возведения в степень выполнять непосредственно целыми числами и только потом проводить сравнение по модулю n, то промежуточные значения окажутся просто огромными.
Известно, что:
[(a1 mod n) ´ (a2 mod n)] mod n = (a1´ a2) mod n.
Тогда, мы можем рассматривать промежуточные результаты по модулю n. Это намного облегчает вычисления. Будем вычислять abmod n.
Будем пользоваться следующим алгоритмом.
Степень b представляется в двоичной системе счисления. Через k будем обозначать номера разрядов полученного двоичного числа, начиная с нуля справа налево. Через bi будем обозначать значение i-го разряда двоичного числа. Значение c в конце выполнения алгоритма будет соответствовать значению вычисленной степени.
На рис. 1.4 приводится блок-схема алгоритма быстрого возведения в степень для abmod n при больших значениях b.
Далее приводятся два примера, поясняющие работу данного алгоритма.
Рис. 2.2. Блок-схема алгоритма быстрого вычисления abmod n
Пример 1: Вычислить abmodn, где a= 19, b = 5 и n= 119. Иначе, 195 mod 119 =?
b = 510 = 101, k = 2, c = 0, d = 1, a = 19, n = 119.
1.k> 0, k = 2;
c = 2 ´ c = 2 ´ 0 = 0;
d = (d ´ d) mod n = (1 ´ 1) mod 119 = 1 mod 119 = 1;
bk= b2= 1;
c = c + 1 = 0 + 1 = 1;
d = (d ´ a) mod n = (1 ´ 19) mod 119 = 19 mod 119 = 19 - ë19 / 119û´ 119 = 19 – 0 ´119 = 19.
k = k – 1 = 2 – 1 = 1.
2.k> 0, k = 1;
c = 2 ´ c = 2 ´ 1 = 2;
d = (d ´ d) mod n = (19 ´ 19) mod 119 = 361 mod 119 = 361 - ë361 / 119û´ 119 = 361 – 3 ´ 119 = 361 – 357 = 4;
bk= b1= 0;
k = k – 1 = 1 – 1 = 0.
3. k> 0, k = 0;
c = 2 ´c = 2 ´ 2 = 4;
d = (d ´d) mod n = (4 ´ 4) mod 119 = 16 mod 119 = 16 - ë16 / 119û´ 119 = 16 – 0 ´ 119 = 16;
bk= b0= 1;
c = c + 1 = 4 + 1 = 5;
d = (d ´ a) mod n = (16 ´ 19) mod 119 = 304 mod 119 = 304 - ë304 / 119û´ 119 = 304 – 2 ´119 = =66.
k = k – 1 = 0 – 1 = -1.
Ответ: 195 mod 119 = 66.
Пример 2: Вычислитьabmodn, гдеa= 66,b= 77иn= 119.Иначе, 6677 mod 119=?
b = 7710 = 10011012, k = 6, c = 0, d = 1, a = 66, n = 119.
1.k> 0, k = 6;
c = 2 ´c = 2 ´ 0 = 0;
d = (d ´d) mod n = (1 ´ 1) mod 119 = 1 mod 119 = 1;
bk= b6= 1;
c = c + 1 = 0 + 1 = 1;
d = (d ´ a) mod n = (1 ´ 66) mod 119 = 66 mod 119 = 66 - ë66 / 119û´ 119 = 66 – 0 ´119 = 66.
k = k – 1 = 6 – 1 = 5.
2.k> 0, k = 5; b5= 0;
c = 2 ´c = 2 ´ 1 = 2;
d = (d ´ d) mod n = (66 ´ 66) mod 119 = 4356 mod 119 = 4356 - ë4356 /119û´ 119 = 4356 – (36´´ 119) = 4356 – 4284 = 72;
k = k – 1 = 4;
bk= b4= 0;
c = c ´ 1 = 2 ´ 2 = 4;
d = (d ´d) mod n = (72 ´ 72) mod 119 = 5184 mod 119 = 5184 - ë5184 / 119û´ 119 = 5184 – (43´119) = 5184 – 5117 = 67.
k = k – 1 = 4 – 1 = 3.
3.k> 0, k = 3; b3= 1;
c = 2 ´ c = 2 ´ 4 = 8;
d = (d ´ d) mod n = (67 ´ 67) mod 119 = 4489 mod 119 = 4489 - ë4489 /119û´ 119 = 4489 – (37 ´´119) = 4489 – 4403 = 86;
c = c + 1 = 8 + 1 = 9;
d = (d ´ a) mod n = (86 ´ 66) mod 119 = 5676 mod 119 = 5676 - ë5676 / 119û´ 119 = 5676 – (47´´119) = 5676 – 5593 = 83.
k = k – 1 = 3 – 1 = 2; b2= 1.
4.k> 0, k = 2; b2= 1;
c = 2 ´ c = 2 ´ 9 = 18;
d = (d ´ d) mod n = (83 ´ 83) mod 119 = 6889 mod 119 = 6889 - ë6889 /119û´ 119 = 6889 – (57 ´´ 119) = 6889 – 6783 = 106;
c = c + 1 = 18 + 1 = 19;
d = (d ´ a)mod n = (106 ´ 66) mod 119 = 6996 mod 119 = 6996 - ë6996 / 119û´ 119 = 6996 – (58 ´119)= 6996 – 6902 = 94.
k = k – 1 = 2 – 1 = 1; b1= 0.
5.k> 0, k = 1; b1= 0;
c = 2 ´ c = 2 ´ 19 = 38;
d = (d ´d) mod n = (94 ´ 94) mod 119 = 8836 mod 119 = 8836 - ë8836 /119û´ 119 = 8836 – (74 ´´119) = 8836 – 8806 = 30;
b1= 0;
6.k> 0, k = 0; b0= 1;
c = 2 ´c = 2 ´ 38 = 76;
d = (d ´ d) mod n = (30 ´ 30) mod 119 = 900 mod 119 = 900 - ë900 /119û´ 119 = 900 – (7 ´ 119 == 900 – 833 = 67;
c = c + 1 = 76 + 1 = 77;
d = (d ´a)mod n = (67 ´ 66) mod 119 = 4422 mod 119 = 4422 - ë4422 / 119û´ 119 = 4422 – (37´´119) = 4422 – 4403 = 19.
k=k– 1 = 0 – 1 = -1.
Так как k< 0, то получен следующий ответ.
Ответ: 6677mod119 = 19.
3.
Алгоритм вычисления степеней целого
числа am по модулю p
и целых чисел, принадлежащих показателю f(p),- первообразных корней
по модулю p. Обмен ключами по схеме
Диффи-Хеллмана
Для реализации данного метода необходимо вычислить первообразные корни по модулю, с частичным использованием уже освоенных математических методов и алгоритмов. Далее определяются и рассчитываются открытый и секретный ключи абонентов, производится обмен открытыми ключами абонентов, вычисляются каждой стороной общий секретный сеансовый ключ. Затем производятся зашифровывание определенного открытого текста и его расшифровывание с использованием этого общего сеансового ключа.
Этот процесс состоит из двух частей:
В дальнейшем нам понадобятся некоторые важные понятия из теории чисел.
Число положительных целых значений, которые меньше n и являются взаимно простыми с n, обозначается через f(n) и называется функцией Эйлера. Для простого числа p
f(p) =p– 1.
Если имеется два простых числа p и q, тогда для n=pq получим f(n) =f(pq) =f(p) ´f(q) = (p-1) ´(q-1).
Теорема Эйлера утверждает, что для любых взаимно простых чисел a и n af(n)º 1 mod n. Пример: a= 3, n = 10, f(n) =f(pq) =f(p) ´f(q) = (p-1) ´ (q-1) = (5-1) ´ (2-1) = 4.Следовательно,34 = 81 º 1mod10.
Важным является следующее.
Если a и n являются взаимно простыми, то существует, по крайней мере, одно целое число m, удовлетворяющее соотношению amº 1 mod n, где m=f(n). Для наименьшего из положительных m, при которых выполняется указанное условие, используются следующие названия:
Пример 1. Рассмотрим степени числа 5 по модулю 19:
Поэтому в нашем примере, любые две степени числа 5, показатели которых отличаются на 9 (или на число, кратное 9), сравнимы по модулю 19. Иначе, последовательность является периодической с периодом, равным наименьшему положительному показателю m, при котором 5m= 1 mod 19.
В общем случае можно сказать, что наивысшим из показателей, которому может принадлежать число a по модулю n, является f(n). Числа, принадлежащие показателю f(n), называются первообразными корнями по модулю n.
В таблице
(табл.2.1), в продолжение примера,
приводятся степени целых чисел
по модулю 19 (первая выделенная строка
соответствует степеням; затемненные
части строк соответствуют
Как видно, все последовательности заканчиваются числом 1.
В нашем примере длина
последовательности является
Любое из этих чисел называют первообразным корнем по модулю 19.
Важность этого понятия подтверждается тем, что если a является первообразным корнем n, его степени a1, a2,…,af(n) оказываются различными по модулю n и взаимно простыми с n.
В частности, для простого числа p, если a является первообразным корнем p, то a1, a2,…,ap-1 оказываются различными по модулю n и взаимно простыми с n.
Как видно из таблицы, для простого числа 19 его первообразными корнями являются числа 2, 3, 10, 13, 14 и 15.
Не все целые числа имеют первообразные корни. Этими числами могут быть числа 2, 4, pa и 2pa, где p- любое нечетное простое число.
Таблица 3.1 Степени целых чисел по модулю 19
На рисунке 3.1, приводится общая блок-схема алгоритма определения степеней целых чисел (am) по конкретно заданному модулю p и одновременно его первообразных корней.
Рис. 3.1.
Блок-схема алгоритма вычисления степеней
целого числа am
по модулю p и целых чисел, принадлежащих
показателю f(p)
3.2
Генерация и обмен секретными
ключами по схеме Диффи-
Эффективность алгоритма Диффи-Хеллмана опирается на трудностях вычисления дискрет-ных логарифмов. В общем виде
yºgx modp,
вычисление y при заданных g, x и p является относительно простой задачей даже при очень больших значениях x (имеются соответствующие эффективные алгоритмы). Однако если заданыy, g и p, то вычисление x (дискретное логорифмирование) является, вообще говоря, очень непростой задачей. Согласно [1], до недавного времени сложность асимптотически наиболее быстрого из известных алгоритмов вычисления дискретных логарифмов по модулю простого числа оценивалась величиной порядка
ez, где z = ((lnp)1/3ln (lnp))2/3.
Теперь рассмотрим алгоритм открытого распределения ключей Диффи-Хеллмана [1, 2]
Алгоритм Диффи-Хелмана основывается на трудностях вычисления дискретных логарифмов.
Глобальные открытые элементы:
простое число p;
первообразный корень простого числа pÞa, где a<p.
Вычисление ключа
Пользователь А выбирает случайное целое число XA<p и вычисляет YA = aXA modp.
XA<p- секретная величина (закрытый ключ пользователя А);
YA - открытая величина (открытый ключ пользователя А).
Вычисление ключа
Пользователь В выбирает случайное целое число XВ<p и вычисляет YВ = aXВmodp.
XВ<p- секретная величина (закрытый ключ пользователя В);
YВ - открытая величина (открытый ключ пользователя B).