ПРАКТИЧЕСКАЯ ЧАСТЬ. ПРОГРАММА ПОСТРОЕНИЯ КЛЮЧЕЙ RSA , ШИФРОВКА И РАСШИФРОВКА ИНФОРМАЦИИ ПО АЛГОРИТМУ RSA ,ПРОГРАММА ПРОВЕРКИ ЧИСЕЛ НА ПРОСТОТУ ФЕРМА.



Основной проблемой при работе с шифрованием информации является использование больших чисел, не позволяющих шифровать информацию вручную за малый промежуток времени. Целью практической части является написание программы по построению открытого и секретного ключей RSA, а также шифрования и расшифровки числовой информации, подающейся в программу пользователем. Средой для реализации данной программы выбран язык программирования Delphi. Данная среда является языком высокого уровня объектно-ориентированного программирования, проста в изучении и дает возможность наглядного представления результатов. Проектная работа состоит из формы с размещенными на ней визуальными объектами (кнопки, поля ввода/вывода) и программного кода привязанного к каждому из объектов.

Рис 6.1
  

 

На рисунке 1 представлен общий вид проекта в среде Delphi.

При нажатии кнопки «построение ключей» программа находит два простых числа,  находит их произведение, вычисляет функцию Эйлера, подбирает секретный ключ D, при котором выполняется равенство E*D=1(mod F(N)) (подробнее о построении ключей см. стр. 12) и выводит уже готовые открытый ключ - (E,N) и закрытый – (D,N).

 Далее пользователь вводит числа, которые требуется зашифровать через пробел в первое поле (числа вводятся в диапазоне от 1 до 53, чтобы избежать работы с большими числам).

После нажатия кнопки «зашифровать», в поле два выводиться результат работы программы – числа, зашифрованные по алгоритму RSA. Человек, не владеющий парой чисел N, D не может восстановить исходные числа по зашифрованным. При нажатии кнопки «расшифровать» программа совершает процесс расшифровки тех числе, которые находятся в поле два (в поле два числа могут быть получены путем ввода вручную пользователем, а не только как результат шифрования). В третье поле выводится результат расшифровки чисел. Кнопка «очистить поле ввода» обнуляет все три поля в программе и позволяет избежать очистки полей вручную. Кнопка «выход» отвечает за закрытие программы. Далее на рисунках приведены блок-схемы работы каждой из вышеперечисленных кнопок.   

 

 

Вывод

Рис.5.2
На рисунке 5.2 представлен вид программы после выполнения алгоритмов шифровки и дешифровки.                                                                                            

  

Проведем проверку верности алгоритма шифровки по основной формуле y=xE(mod N)

получаем число, равное числу, подсчитанному программой. Проводим проверку для других чисел.

Числа, вычисленные по формуле, совпадают с результатами программы, следовательно, алгоритм шифрования работает, верно. Числа, полученные в результате расшифровки, соответствуют исходным, следовательно, алгоритм корректно производит вычисления. Для точности можно провести проверку по формуле x=yD(mod N).  

Данные проверки позволяют убедиться, что программа работает, верно, для выбранного диапазона чисел. Данный вариант программы имеет отличие от общепринятой реализации в виде уменьшенного количества ключей, используемых в алгоритме (по современным стандартам под ключи отводится не менее 1024 бит).  Полный код программы представлен в разделе приложения.

ЗАКЛЮЧЕНИЕ

В ходе курсовой работы была выполнена поставленная цель – изучение алгоритма шифрования RSA и алгоритмов хеширования, объяснение принципа их действия, сравнение и выявление сильных сторон и недостатков алгоритма RSA, создание программы для построения ключей RSA и реализации алгоритма шифрования. Задачи, решенные для достижения поставленной цели:

· Изучение литературы по теме шифрование и хеширование

· Написание теоретической части посвященной алгоритму RSA и хешированию

· Построение модели программы в среде объектно-ориентированного программирования Delphi

· Подведение итога работы программы

Первая часть работы включает теорию по теме исследовательской работы.

В ней представленная общая информация по темам шифрование, криптография и квантовая криптография. Подробно описанная теория по алгоритму RSA, общая информация по теме хеширование.  Вторая часть, основанная на теории представленной в первой части, демонстрирует верность работы выбранных алгоритмов, и правильность логических утверждений, на которых они основаны. Тема остается актуальной до момента прекращения использования алгоритма RSA в мире.

 

СПИСОК ЛИТЕРАТУРЫ

1. Бегунц Александр Владимирович, к.ф.-м.н., доцент мех-мата МГУ. Лекция «Криптография: вчера, сегодня, завтра» . http://teacher.msu.ru/school/proforientir/math/crypto ссылка действительна на 09.02.2014.

2. Галисеев Г.В. Программирование в среде Delphi 7. Самоучитель.        : - М.: Издательский дом "Вильямс", 2003. - 288 с. : ил.

3. Иван Саломатин. О хэшах и безопасном хранении паролей.
 http://web-bricks.ru/comments/about_hashes_and_passwords/ ссылка действительна на 08.12.2013.

4. Поляков К.Ю. учебник по информатике для 10-11 классов. : -М.: Издательский дом "Бином", 2013.

5. Романьков В.А. Введение в криптографию. Курс лекций/В.А. Романьков - М.: Форум, 2012. - 240с.

 

 

ПРИЛОЖЕНИЕ

Программный код:

unit Unit1;

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

 

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Button4: TButton;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

a,b,r,f,n,e,d,x,x1,r1,e1,z1,y,y1,q,h,j,l:Integer;

 

 

g:array[1..1000] of integer;

 

g1:array[1..1000] of integer;

implementation

 

{$R *.dfm}

function NOD(a, b:integer):integer; // 1?? ??????? ?????????? ??????????? ?????? ????????

begin

If a<>0 then NOD:= NOD(b mod a,a) else NOD:= b;

End;

 

procedure TForm1.Button1Click(Sender: TObject);

var

l:integer;

begin

 

Randomize;

 

repeat

 

Repeat

 

y:=0;

 

y1:=0;

 

a:=random(9)+3;

 

b:=random(9)+3;

 

For l := 2 To Trunc(Sqrt(a)) Do

 

If a Mod l <> 0 Then continue else begin Y:=1; break; end;

 

For l := 2 To Trunc(Sqrt(b)) Do

 

If b Mod l <> 0 Then continue else begin Y1:=1; break; end;

 

until (y=0)and(y1=0);

 

n:=a*b;

 

//f:=(

 

repeat

 

e:=random(7)+2;

 

z1:=NOD(e,f);

 

until( z1=1 );

 

d:=0;

 

repeat

 

d:=d+1;

 

Until (d*e) mod f = 1;

 

Until d<>e;

 

Label1.Caption:= 'открытый ключ n = '+IntToStr(n);

 

Label2.Caption:= 'открытый ключ e = '+IntToStr(e);

 

Label3.Caption:= 'закрытый ключ d = '+IntToStr(d);

 

 

end;

 

procedure TForm1.Button2Click(Sender: TObject);

var w,h,p: integer;

 

l,l1,l2: string;

 

begin

 

l:= edit1.Text;

 

l1:=l;

 

q:=0;

 

while pos(' ',l1)<>0 do begin

 

w:= pos(' ',l1);

 

l2:=copy(l1,1,w-1);

 

q:=q+1;

 

g[q]:=strtoint(l2);

 

delete(l1,1,w);

 

end;

 

q:=q+1;

 

g[q]:=strtoint(l1);

 

l:='';

 

for p:=1 to q do begin

 

j:=1;

 

for h:=1 to e do j:=(j*g[p]) mod n;

 

g[p]:=j;

end;

end;

end.

 

 


Дата добавления: 2020-04-25; просмотров: 256; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!