Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

бжд / 1 / отчет№2

.doc
Скачиваний:
18
Добавлен:
10.12.2013
Размер:
45.06 Кб
Скачать

Министерство образования Российской Федерации

Пермский государственный технический университет

Кафедра ИТАС

Лабораторная работа №

по предмету «Методы и средства защиты информации»

Тема: «Шифр RSA»

Выполнил:

Габова Н.А.

гр. АСУ-02-1

Проверил:

Мосиенко А.Ю.

Пермь, 2006

Цель работы:

Получить практические навыки по использованию алгоритма шифрования RSA.

Алгоритм:

Алгоритм RSA стоит у истоков асимметричной криптографии.

Первым этапом любого асимметричного алгоритма является создание пары ключей : открытого и закрытого и распространение открытого ключа "по всему миру". Для алгоритма RSA этап создания ключей состоит из следующих операций :

  1. Выбираются два простых (!) числа p и q

  2. Вычисляется их произведение n(=p*q)

  3. Выбирается произвольное число e (e<n), такое, что НОД(e,(p-1)(q-1))=1, то есть e должно быть взаимно простым с числом (p-1)(q-1).

  4. Методом Евклида решается в целых числах (!) уравнение e*d+(p-1)(q-1)*y=1. Здесь неизвестными являются переменные d и y – метод Евклида как раз и находит множество пар (d,y), каждая из которых является решением уравнения в целых числах.

  5. Два числа (e,n) – публикуются как открытый ключ.

  6. Число d хранится в строжайшем секрете – это и есть закрытый ключ, который позволит читать все послания, зашифрованные с помощью пары чисел (e,n).

Шифрование производится с помощью этих чисел :

  1. Отправитель разбивает свое сообщение на блоки, равные k=[log2(n)] бит, где квадратные скобки обозначают взятие целой части от дробного числа.

  2. Подобный блок, как Вы знаете, может быть интерпретирован как число из диапазона (0;2k-1). Для каждого такого числа (назовем его mi) вычисляется выражение ci=((mi)e)mod n. Блоки ci и есть зашифрованное сообщение Их можно спокойно передавать по открытому каналу, поскольку операция возведения в степень по модулю простого числа, является необратимой математической задачей. Обратная ей задача носит название "логарифмирование в конечном поле" и является на несколько порядков более сложной задачей. То есть даже если злоумышленник знает числа e и n, то по ci прочесть исходные сообщения mi он не может никак, кроме как полным перебором mi.

Дешифрование производиться следующим образом:

По теореме Эйлера, частный случай которой утвержает, что если число n представимо в виде двух простых чисел p и q, то для любого x имеет место равенство (x(p-1)(q-1))mod n = 1. Возведем обе части равенства в степень (-y) : (x(-y)(p-1)(q-1))mod n = 1(-y) = 1. Теперь умножим обе части на x : (x(-y)(p-1)(q-1)+1)mod n = 1*x = x. Для того чтобы прочесть сообщение ci=((mi)e)mod n достаточно возвести его в степень d по модулю m : ((ci)d)mod n = ((mi)e*d)mod n = mi.

Листинг программ:

program RSA_shifr;

var p,q,n,e,d,m,o:integer;

c1,c:LongInt;

st1,str3:string;

f1,f2:text;

procedure shifr(var st,str3:string);

var str1,str2:string;

s,i,j:integer;

begin

val(st,m,o);

s:=length(st);

for i:=1 to s

do begin

str1:=copy(st,i,1);

val(str1,m,o);

c1:=1;

for j:=1 to e

do c1:=c1*m;

c:=c1 mod n;

str(c,str2);

if c<=9

then str3:=concat(str3,str2,' ')

else str3:=concat(str3,str2);

end;

end;

begin

p:=3;

q:=5;

n:=p*q;

e:=7;

d:=7;

assign(f1,'TEXT.txt');

reset(f1);

assign(f2,'TEMP.txt');

rewrite(f2);

readln(f1,st1);

shifr(st1,str3);

writeln(f2,str3);

close(f1);

close(f2);

erase(f1);

rename(f2,'text.txt');

end.

program RSA_deshifr;

var p,q,n,e,d,m,o,i,j:integer;

c1,c:LongInt;

st1,st2,s1,s2:string;

f1,f2:text;

procedure deshifr(var st1,st2:string);

var str2,str3:string;

s:integer;

begin

s:=length(st1);

for i:=1 to s

do begin

if ((i mod 2)=1)

then

begin

str2:=copy(st1,i,2);

if pos(' ',str2)<>0

then delete(str2,pos(' ',str2),1);

val(str2,c1,o);

c:=1;

for j:=1 to d

do c:=c*c1;

m:=c mod n;

str(m,str3);

st2:=concat(st2,str3,'');

end

else;

end;

end;

begin

p:=3;

q:=5;

n:=p*q;

e:=7;

d:=7;

assign(f1,'text.txt');

reset(f1);

assign(f2,'temp.txt');

rewrite(f2);

readln(f1,st1);

deshifr(st1,st2);

writeln(f2,st2);

close(f1);

close(f2);

erase(f1);

rename(f2,'text.txt');

end.

Результаты тестирования:

исходный файл:

123456789

зашифрованный файл:

1 8 124 5 6 132 9

расшифрованный файл:

123456789

4

Соседние файлы в папке 1