Автор работы: Пользователь скрыл имя, 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
Производится обмен открытыми ключами.
Пользователь А вычисляет общий секретный сеансовый ключ
K= (YB) XAmodp.
Пользователь B вычисляет общий секретный сеансовый ключ
K = (YA) XBmodp.
Эти последние формулы дают одинаковые результаты:
K=(YB)XAmodp=(aXВmodp)XAmodp=(
Злоумышленнику могут быть известны величины p, a, YA и YB.
Злоумышленнику для определения секретного ключа пользователя В необходимо вычислить
XВ = Inda, p (YB), иначеYВ = a XВ mod p.
Только после этого он может определить общий секретный ключ K. Вычисление XВ из последнего соотношения (дискретного логарифма) является, вообще говоря, очень непростой задачей.
Взаимный
обмен сообщениями с
Рассмотрим использование данного метода на конкретном примере.
Пример: Произвести обмен ключами между двумя пользователями А и В и сгенерировать общий сеансовый секретный ключ по схеме Диффи-Хеллмана.
1. Определение общих открытых элементов (в начале данный пункт задания выполняется пользователем А (условно) и полученные результаты в открытом виде передаются (условно) пользователю В). Для экономии времени одновременно пользователь В аналогичную работу выполняет с другими значениями p и a.
Это простое число p и его первообразный корень a. Рекомендуется в качестве p выбрать двухразрядное число, равное или меньшее по значению 97. Для рассматриваемого примера, ради обеспечения простоты, мы выберем p=19.
Первообразный корень для выбранногоpможет быть определен двояко.
В первом случае (именно рекомендуется пойти по этому пути) первообразный корень выбирается из множества первообразных корней, полученных в результате выполнения расчетов по пункту -«Вычисление степеней целого числа am по модулю p и целых чисел, принадлежащих показателю f(p), - первообразных корней по модулю p». При этом значение p берется из предыдущей программы, где определялись первообразные корни.
Во втором случае первообразный корень для выбранного p подбирается из условия, что целыми числами с первообразными корнями могут быть только числа 2, 4, na и 2na(где n- любое нечетное простое число). Естественно, выбранный в данном случае первообразный корень a<p.
Отметим, что выбор простого числа требует дальнейшей проверки множества соответствующих первообразных корней путем выполнения расчетов по предложенному алгоритму и чисел, которые могут выступать в качестве первообразных корней для выбранного p.
Для нашего примера p=19 и a=10 (см. таблица 3.1).
2. Выбор секретных ключей
В соответствии
с выбранным значением pопредел
3. Вычисление в соответствии с найденным a и выбранному p открытых ключей YA и YB(соответственно пользователями А и В) для пользователей А и В на основе XA и XB(при этом используется ниже указанная программа)
YA=aXA mod p = 105mod 19.
YB=aXBmod p = 107mod 19.
В действительности целые числа, используемые в приведенных соотношениях очень большие и выполнить данные расчеты не так легко. Поэтому необходимо эти расчеты производить в соответствии с пунктом «Быстрое возведение в степень для abmod n при больших значениях b». В нашем примере YA=aXAmodp= 105mod19 = 3, то есть . YA= 3.
YB=aXBmodp= 107mod19 = 15, то есть, YB= 15.
4. Выполнение процесса обмена открытыми ключами (условно).
Пользователь А получает в свое распоряжение открытый ключ пользователя В-YB.
Пользователь B получает в свое распоряжение открытый ключ пользователя A-YA.
5. Вычисление каждой стороной
значения своего сеансового
Пользователь A вычисляет свой сеансовый секретный ключ K
K = (YB)XAmodp.
Пользователь B вычисляет свой сеансовый секретный ключ K
K= (YA)XBmodp.
Для нашего примера
Пользователь A:K= (YB)XAmodp= 155mod19 = 2; K= 2.
Пользователь B:K= (YA)XBmodp=37mod19 = 2; K= 2.
6. Посылка (условно)
При зашифровании секретный сеансовый ключ используется как гамма (зашифрование методом гаммирования), то есть ключ последовательно повторяется столько раз, пока не будет накрыто все передаваемое сообщение. Зашифрование производится с применением поразрядной операции сложения по модулю два.
Сообщение (А) -....ЗВЕЗДА
Шестнадцатиричный (таблица 2 приложения)
код 866 (A).…...878285878480
Двоичный код.1000 0111 1000 0010 1000 0101 1000 0111 1000 0100 1000 0000
Гамма K (A).…1010 1010 1010 1010 1010 1010 1010 1010 1010 1010 1010 1010
Åmod 2………0010 1101 0010 1000 0010 1111 0010 1101 0010 1110 0010 1010
Гамма К (B).....1010 1010 1010 1010 1010 1010 1010 1010 1010 1010 1010 1010
Двоичный код 1000 0111 1000 0010 1000 0101 1000 0111 1000 0100 1000 0000
Шестнадцатиричный
код 866 (B)…..……878285878480
Сообщение (B) -....ЗВЕЗДА
7. С целью проверки совместной
работы пользователей
8. Необходимо такую же работу,
одновременно с пользователем
А, произвести и пользователю
В (условно) согласно п. 1 для
передачи другого слова
4. Метод зашифровывания с открытым ключом RSA
Алгоритмы шифрования с открытым ключом зависят от двух ключей: одного ключа для зашифровывания и другого ключа, связанного с первым, для расшифровывания. С точки зрения вычислений, нереально определить ключ расшифровывания, зная только используемый криптографический алгоритм и ключ зашифровывания. В некоторых алгоритмах любой из этих ключей может применяться для зашифровывания, а другой - для расшифровывания.
Криптографические
системы с открытым ключом зависят
от некоторой обратимой
Здесь мы изучим этот метод шифрования и алгоритмы вычислений, применяемых при его реализации.
Работа состоит из трех частей:
Операции зашифровывания открытого текста и расшифровывания закрытого текста в RSA состоят из операций возведения большого целого числа в большую целую степень по модулю n.
Обобщенная блок-схема генерации ключей, необходимых для алгоритма RSA приводится на рис. 4.1.
Рис. 4.1. Генерация ключей для RSA
На рис. 4.2 приводится блок-схема алгоритмов зашифровывания и расшифровывания для RSA.
Рис. 3.2. Блок-схема алгоритмов зашифровки и расшифровки для RSA
Далее приводятся два примера, поясняющие работу алгоритма RSA.
Пример RSA-0. Выбор целого e, взаимно простого с f(n) и меньшего, чем f(n). А также определение такого d, что de = 1 modf(n) и d<f(n).
Это подготовительный этап для выполнения алгоритма RSA.
Из таблицы 1 приложения выбираем два простых числа p= 7 и q= 17.
Вычисляем n=p´q= 7 ´ 17 = 119.
Вычисляем f(n) =(p-1)´(q-1)= 6 ´16 = 96.
Выбираем e по условию, что gcd (e, f(n)) = 1 и 1<e<f(n) Для этого будем пользоваться расширенным алгоритмом Евклида для нахождения наибольшего общего делителя двух чисел, который при определении и уточнении, что таким делителем является 1, выдает и мультипликативное обратное для e по модулю f(n).
gcd (d, f) =gcd (e=5, f(n) = 96) = 1.
Выполняем алгоритм:
X1 = 1, X2 = 0, X3 = 96.
Y1 = 0, Y2 = 1, Y3 = 5.
Y3¹ 0,
Y3¹ 1.
Q = ëX3/Y3û= ë96/5û = 19.
T1 = X1 – Q´Y1 = 1 – 19 ´ 0 = 1,
T2 = X2 – Q´Y2 = 0 – 19 ´ 1 = -19,
T3 = X3 – Q ´Y3 = 96 – 19 ´ 5 = 1.
X1 = Y1 = 0,
X2 = Y2 = 1,
X3 = Y3 = 5.
Y1 = T1 = 1,
Y2 = T2 = -19,
Y3 = T3 = 1.
Соотношения:
f ´T1 + d ´ T2 = 96 ´ 1 + 5 ´ (-19) = 1 = T3,
f ´X1 + d ´ X2 = 96 ´ 0 + 5 ´ 1 = 5 = X3,
f ´Y1 + d ´ Y2 = 96 ´ 1 + 5 ´ (-19) = 1 = Y3.
Так как Y3 = 1, то Y3 gcd(5, 96) = 1 наибольший общий делитель.
Тогда Y2 =d-1mod96 = -19. Так как Y2 отрицательное целое, то мультипликативное обратное будет 96-19 = 77.
Таким образом, для нашего примераe= 5 и d= 77.
Пример RSA-1: Вычислить abmodn, где a = M = 19, b =e = 5 (открытый ключ) и n = (p´q) = 119, С - зашифрованный текст.
Иначе
195 mod 119 = C?
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.
Ответ:C= 195mod119 = 66.
Далее рассмотрим пример для обратного преобразования