КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Краткое описание
Программа демонстрации работы метода шифровании RSA. Характеристика метода. Криптостойкость алгоритма RSA основывается на предположении, что исключительно определить секретный ключ по известному, поскольку для этого необходимо решить задачу о существовании делителей целого числа. Данная задача не имеет до настоящего времени эффективного (полиномиального) решения. Более того, вопрос существования эффективных алгоритмов решения, таких задач является открытым. В связи с этим для чисел, состоящих из 200-т цифр (а именно такие числа рекомендуется использовать), традиционные методы требуют выполнения огромного числа операций (около 1023). Метод является очень перспективным, поскольку не требуется передачи ключа пользователям. Это выгодно отличает его от других методов криптографической защиты данных. Но в настоящее время к этому методу относятся вероятностно -сомнительно, поскольку в ходе дальнейшего развития науки и техники может быть найден эффективный алгоритм определения делителей целых чисел, в результате чего метод станет абсолютно незащищённым. В остальном, метод RSA обладает только достоинствами. К числу этих достоинств, следует отнести очень высокую криптостойкость, довольно простую программную и аппаратную реализации. Правда, использование этого метода для защиты информации неразрывно связано с уровнем развития вычислительной техники. Программа осуществляет генерацию секретного и открытого ключей, шифрование текстового файла и его дешифрование. Данная программа предназначена для демонстрации работы метода шифрования открытым ключом RSA. Текст, для шифрования считывается из файла исходных данных TEXT.DAT, затем шифруется и в шифрованном виде записывается в файл TEXT.RSA. После этого программа осуществляет дешифрацию, результат которой записывается в файл TEXT.RES. Числа р и q генерируются случайным образом на заданном границами интервале. Число d определяется как взаимно простое с результатом умножения (р-1)(q-l). Число е определяется как удовлетворяющее соотношению (e*d)mod(p-l)(q-l)=l. С целью избежать зависания программы при выборе d и е в процессе подбора этих чисел генерируются новые значения р и q. Шифрование производится по формуле: Ci=Mi*mod n, где Mi и Ci имеют тот же смысл, что и в при шифровании. Числа р и q берутся маленькими по сравнению с реальными задачами, поскольку даже при небольшом их увеличении не хватает разрядной сетки для вычислений (Mi возведенное в степень e«d получается огромным). О работе с программой. После вычислений и печати сообщения о завершении работы можно нажать любую клавишу и провести вычисления заново, а можно нажать <Escape> и выйти из программы. program RSA_security_method; uses Crt, Plus, Win Work, Win; const
{ Переменные и константы, } {используемые в программе } {границы для генерации чисел } { р, q, e, d. Эти числа генерируются } { случайным образом в заданных } {пределах и затем производится } {проверка их допустимости. } var a,b:longint; z:longint; n:longint; e:longint; d:longint; p,q:longint; i:longint; x,xl:double; df:text; rfl:text; rf:text; C,M:longint; Man W: WindowType; { Вспомогательные переменные} { Произведение(я-1)(р-1) } { Произведение p*q } { Число е } { Число d } { Числа р и q } {Счетчик } { Файл данных (текст) } {Файл результата! } { Файл результата 2 } { Считанный символ } { Коды символа } { Окно сообщения } const {Символы оформления } WatSymbols: array[1..4] of char = (‘\’, '|',’/’,'-'); WaitNum: byte = 1;
{Функция возведения числа в положительную целую степень Power } { Num - число для возведения в степень. } function Power(Num, Р: Longint): Longint; var i: Longint; {Используемые переменные} Mult: Longint; {Счётчик } begin Mult:=l; {Начальное значение } for i:= 1 to P do Mult:= Mult *Num;{Последовательное умножение} Power:= Mult;
Begin {Основная программа} repeat TextAttr:= darkgray; ClrScr; {Очистка экран } OpenWin(5, 5, 75, 17, 'Метод RSA', white+16*blue, white+16*blue, 1, 0, true, 1, yellow, blue, MainW); WriteStr(9, 2, 'Программа демонстрации работы метода шифрования RSA.', white+16*blue); WriteStr(25, 4, 'Идет подбор параметров', white+16*blue); repeat RANDOMIZE; {Иниц-я ген-pa ел. чисел} WriteStr(35, 6, WaitSymbols[WaitNumJ, white+16*blue); if WaitNum<4 then inc(WaitNum) else WaitNum:=l; repeat
repeat p:=round(random*(RMp-LMp+1)+LMp); i:=2; while ((-int(p/i)+p/i)<>0) and (i<p) do inc(i); until i=p; repeat repeat
q:=round(random*(RMq-LMq+1)+LMq); i:=2; while ((-int(q/i)+q/i)<>0) and (i<q) do inc(i); until i=q;
until (p<>q) and (p*q>35); n:=p*q; z:=(p-i)*(q-i); a:=z; {repeat} d:=round(random*(RMd-LMd+1)+LMd); b:=d; while a<>b do if a>b then a:=a-b else b:=b-a; until (a=l) and (pod) and (p<>q); {repeat}
e::=round(random*(RMe-LMe+1)+LMe); until ((e*d) mod z)=l; {e:=round(z/(d mod z));} GotoXY(25,4); writeln(' Параметры метода '); GotoXY(25,6); writeln(' Число р=',р:2,' Чисто n=',n:2); GotoXY(25,7); Writeln(‘Число q=',q:2,' Число d=',d:2); GotoXY(25,8); writeln(' Число е=',е:2); textattr:=white+16*blue;
assign(rfl,'text.rsa'); rewrite(rfl); assign(rf,'text.res'); rewrite(rf); while not EoF(df) do begin read(df,Sym); case Sym of 'А'..'Я': M:=ord(Sym)-127; ‘.‘:M:=35; ‘,’:M:=36; '! ':M:=37; '? ':M:=38; ' + ':M:=39; {Возведение Ме}
‘-‘:М:=40; else M:=l; end; х:=ехр(еЛп(М)-1п(п)); xl:=frac(xl); C:=round(n*xl); Write(rfl,C); x:=exp(d*ln(M)-ln(n)); xl:=frac(x); M:=round(n*xl); Case M of 1..33:M:=M+127; 34: M:=32; 35: M:=ord('.'); 36: M:=ord(','); 37: M:=ord('! '); 38: M:=ord('? '); 39: M:=ord(' -'); 40: M:=ord(' + '); end;
write(rf,chr(M)); end;
readln(df); writeln(rfl); writeln(rf); end; close(df); close(dfl); close(rf); GotoXY(20,10): write(' Работа программы завершена успешно '); Sym:=readkey; Close Win(MainW);
Textattr:=lightgray; until Sym= #27; ClrScr; end;
Дата добавления: 2014-01-06; Просмотров: 365; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |