Автор работы: Пользователь скрыл имя, 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
Пример RSA-2: Вычислить abmodn, где a =C= 66, b = d = 77 (закрытый ключ) и n= 119.
Иначе
M = 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, то получен следующий ответ.
Ответ: M= 6677mod119 = 19.
5. Решение поставленной задачи методом RSA на языке С.
Постановка задачи.
Пользователю A необходимо зашифровать последовательность чисел с помощью метода RSA, после чего полученную последовательность пользователь B должен расшифровать и получить исходную последовательность.
Алгоритм.
В начале выбираем 2 простых числа p и q. Находим их произведение n=pq и высчитываем f=f(n)=(p-1)(q-1). Далее выполняется цикл для выбора подходящего простого числа 1<e<n, характеризующееся условием gsd(e,f)=1, которое является открытым ключом, где функция gsd — функция нахождения наибольшего общего делимого двух чисел. После завершения поиска соответствующего e, мы определяем переменную d, которая является мультипликативным обратным для числа e по mod , и является секретным ключом, посредством вызова соответствующей функции mult. Далее пользователь A вводит последовательность чисел mi, которая является шифруемой, с помощью функции mod возводим каждый его член в степень e по mod n, и получаем шифрованную последовательность ci, и посылаем ее пользователю B. Затем полученную шифрованную последовательность чисел ci пользователь B возводит почленно в степень d по mod n и мы обратно получаем исходную шифруемую последовательность.
ЗАКЛЮЧЕНИЕ
Из всего изложенного следует, что надежная криптографическая система должна удовлетворять таким требованиям:
процедуры зашифровывания и расшифровывания должны быть "прозрачны" для пользователя;
дешифрование закрытой информации должно быть максимально затруднено;
содержание передаваемой информации не должно сказываться на эффективности криптографического алгоритма;
надежность криптозащиты не должна зависеть от содержания в секрете самого алгоритма шифрования (примерами этого являются как алгоритм DES).
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
1. Аскеров Т.М. Защита информации и информационная безопасность: Учебное пособие / Под общей редакцией К.И. Курбакова. - М.: Рос.экон. акад., 2001. 387 с.
2. Diffie, W., and Hellman, M. «Multiuser CryptographicTechniques».
ProceedingsoftheAFIPSNationalC
3. Столингс Вильям. Криптография и защита сетей / Пер. с анг. – 2-е изд.- М.: Издательский дом «Вильямс», 2001. - 672 с.: ил. -Парал. Тит.анг.
4. Толковый словарь по вычислительной технике / Пер. с англ. - М.: Издательский отдел «Русская Редакция» ТОО «ChannelTradingLtd.», 1995. - 496 с.: ил.
5. http://allbest.ru/
6. Брайан Керниган, Деннис Ритчи «Язык программирования C» - М.: Издательство: «Невский диалект», 2001
ПРИЛОЖЕНИЯ
Приложение 1
Коды символов по Windows 1251 и 866 [5]
Приложение 2
Реализация метода RSA на языке С.
#include<stdio.h>
void main () {
unsigned p,q,n,f,i,l,k;
unsigned e; //открытый ключ
unsigned d; //Закрытый ключ
unsigned m1[10],m2[10]; //открытое сообщение
unsigned c; //закрытое сообщение
unsigned gsd (unsigned, unsigned); // функция нахождения НОД
unsigned mult (unsigned, unsigned): // функция нахождения мультипликативного обратного
unsigned mod (unsigned, unsigned, unsigned); // функция возведения в степень по mod n
printf ("Введите 2 простых числа");
scanf ("%d%d",&p,&q);
n=p*q;
f=(p-1)*(q-1);
do {
printf ("Введите случайное простое число");
scanf ("%d",&e);
} while (e>f || gsd(e,f)!=1);
d=mult(e,f);
if (d<0) d=d+f;
printf (“Введите длину сообщения”);
scanf (“%d”, &l);
printf ("Введите сообщение");
for (i=0; i<l; i++) {
scanf ("%d",&ma[i]);
}
for (i=0; i<l; i++) { //зашифрование
c[i]=mod(ma[i],e,n);
}
for (i=0; i<l; i++) { //расшифрование
mb[i]=mod(c[i],d,n);
} k=0;
for (i=0; i<l; i++) {
if (m1==m2) k++;
} if (k==l) printf (“Успех”);
}
unsigned gsd (unsigned e, unsigned f) {
int x[2];
int y[2];
int t[2];
int q;
unsigned i;
x[0]=1; x[1]=0; x[2]=f;
y[0]=0; y[1]=1; y[2]=e;
if (y[2]==0) return (x[2]);
if (y[2]==1) return (y[2]);
while (y[2]!=0 || y[2]!=1) {
q=x[2]%y[2];
for (i=0; i<=2; i++) {
t[i]=x[i]-q*y[i];
} for (i=0; i<=2; i++) {
x[i]=y[i];
y[i]=t[i];
}
}
if (y[2]==0) return (x[2]);
if (y[2]==1) return (y[1]);
}
unsigned mult (unsigned e, unsigned f) {
int x[2];
int y[2];
int t[2];
int q;
unsigned i;
x[0]=1;x[1]=0;x[2]=f;
y[0]=0;y[1]=1;y[2]=e;
while (y[2]!=0 || y[2]!=1) {
q=x[2]%y[2];
for (i=0; i<=2; i++) {
t[i]=x[i]-q*y[i];
} for (i=0; i<=2; i++) {
x[i]=y[i];
y[i]=t[i]; }
}
if (y[1]<0) y[1]= y[1]+f;
return (y[1]);
}
unsigned mod (unsigned a, unsigned b, unsigned n) {
unsigned c,d,k;
unsigned t[100];
d=1; k=0; c=0;
while (b!=0) {
t[k]=b%2;
b/=2;
k++;}
while (k>=0) {
c*=2;
d=(d*d)%n;
if (t[k]==1) {
c++;
d=(d*a)%n;
} k--;
} return (d); }