ПРАКТИЧЕСКАЯ ЧАСТЬ. ПРОГРАММА ПОСТРОЕНИЯ КЛЮЧЕЙ RSA , ШИФРОВКА И РАСШИФРОВКА ИНФОРМАЦИИ ПО АЛГОРИТМУ RSA ,ПРОГРАММА ПРОВЕРКИ ЧИСЕЛ НА ПРОСТОТУ ФЕРМА.
Основной проблемой при работе с шифрованием информации является использование больших чисел, не позволяющих шифровать информацию вручную за малый промежуток времени. Целью практической части является написание программы по построению открытого и секретного ключей RSA, а также шифрования и расшифровки числовой информации, подающейся в программу пользователем. Средой для реализации данной программы выбран язык программирования Delphi. Данная среда является языком высокого уровня объектно-ориентированного программирования, проста в изучении и дает возможность наглядного представления результатов. Проектная работа состоит из формы с размещенными на ней визуальными объектами (кнопки, поля ввода/вывода) и программного кода привязанного к каждому из объектов.
|
На рисунке 1 представлен общий вид проекта в среде Delphi.
При нажатии кнопки «построение ключей» программа находит два простых числа, находит их произведение, вычисляет функцию Эйлера, подбирает секретный ключ D, при котором выполняется равенство E*D=1(mod F(N)) (подробнее о построении ключей см. стр. 12) и выводит уже готовые открытый ключ - (E,N) и закрытый – (D,N).
Далее пользователь вводит числа, которые требуется зашифровать через пробел в первое поле (числа вводятся в диапазоне от 1 до 53, чтобы избежать работы с большими числам).
После нажатия кнопки «зашифровать», в поле два выводиться результат работы программы – числа, зашифрованные по алгоритму RSA. Человек, не владеющий парой чисел N, D не может восстановить исходные числа по зашифрованным. При нажатии кнопки «расшифровать» программа совершает процесс расшифровки тех числе, которые находятся в поле два (в поле два числа могут быть получены путем ввода вручную пользователем, а не только как результат шифрования). В третье поле выводится результат расшифровки чисел. Кнопка «очистить поле ввода» обнуляет все три поля в программе и позволяет избежать очистки полей вручную. Кнопка «выход» отвечает за закрытие программы. Далее на рисунках приведены блок-схемы работы каждой из вышеперечисленных кнопок.
|
|
Вывод
|
Проведем проверку верности алгоритма шифровки по основной формуле 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!