Разработка и программная реализация электронной цифровой подписи асимметричным методом шифрования данных

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



?ть практически невозможным вычисление x, для которого H(x)=h.

для любого блока х должно быть практически невозможным исчисление ух, для которого H(x)=H(y). практично невозможно исчислить какую-либо пару разных х и у, для которых H(x)=H(y).

В качестве хеш-функции, применяемой в разрабатываемой в системе, выберем хеш-функцию, основанную на побитовом сложении по модулю 2. Эта функция удовлетворяет всем перечисленным требованиям, является достаточно простой в реализации и имеет высокую скорость исполнения.

Таблица 3.1-Скорости Эль-Гамаля для различных длин модулей при 160-битовом показателе степени

512 битов 768 битов 1024 битовШифрование 0.33 с 0.80 с1.09 сДешифрирование 0.24 с0.58 с0.77 сПодпись 0.25 с0.47 с0.63 сПроверка l.37 с5.12 с9.30 с

Схема формирования ЭЦП Эль-Гамаля

Определение открытого y и секретного x ключей:

Выбор двух взаимно простых больших чисел p и q, q<p

Выбор значения секретного ключа x, x<p

Определение значения открытого ключа у из выражения:

Формирование ЭЦП:

Вычисление хэш-значения сообщения

Выбор случайного числа k, 0<k<p-1 и НОД(k,p-1)=1

Определение значения а из выражения:

Определение значения b из выражения:

Цифровая подпись и открытый текст сообщения М отправляются получателю.

Аутентификация сообщения - проверка подлинности подписи:

Вычисление хэш-значения принятого открытого текста сообщения М

Подпись считается достоверной, если a<p, и выполняется условие

Процедура формирования ЭЦП:

Выбираем простое число р и два случайных числа q и x (q и x<p), p=11, q=2 и секретный ключ x=8;

Вычисляем значение открытого ключа у

;

Определяем хэш-значение исходного сообщения М, (312)

, в данном примере принимает m=3

Выбираем случайное число k, взаимно простое с p-1.

Принимаем k=9, НОД(9, 10)=1.

Для формирования ЭЦП вычисляем элементы подписи a и b

Элемент b определяем с помощью расширенного алгоритма Евклида из следующего соотношения:

В данном примере цифровой подписью является пара чисео a=6, b=5.

Цифровая подпись S=(a,b) и открытый текст сообщения М отправляются получателю. Для контроля целостности сообщения и достоверности ЭЦП получатель вычисляет хэш-значение принятого открытого текста сообщения М. При этом отправитель и получатель используют одну и ту же хэш-функцию.

Получив подписанное сообщение и открытый ключ у=3, получатель для проверки подлинности пiдписи проверяет вiполнение условия:

Так как условие выполняется, то принятое получателем сообщение признается подлинным.

Таким образом, процедура установления подлинности принятого сообщения состоит в проверке соответствия аутентификации сообщения.

Следует иметь ввиду, что каждая подпись по схеме Эль-Гамаля требует нового значения k. Случайное значение k должно храниться в секрете.

Рисунок 3.1-Блок-схема шифрование электронной цифровой подписи

3.2 Программная реализация

Рассмотрим сновные процедуры и функции, обеспечивающие работу модулей системы генерации ключей и обмена конфиденциальной информацией. Основная часть этих функций реализована в модуле Unit1.

Переменные, используемые в расматриваемом модуле именованы согласно математической модели. Так для работы алгоритма Эль-Гамаля используются переменные целого типа (integer), Q - простые числа для реализации алгоритма ELGAMAL- модуль, по которому выполняется шифрование сообщения- функция Эйлера,Kb - открытый и личный ключи пользователя системы

Возможности, предоставляемые пользователям системы клиентским приложением, определыены в модуле как элементы массива ClCmds:array[1..3] of string = ('-msg','-RSA','-sig');

Здесь

'-msg' - передача открытого сообщения,

'-ELGAMAL' - организация процесса ширования и передачи сообщения,

'-sig' - реализацияцифровой подписи для сообщения.

Процедура ChooseCommand(RecText :string) отвечает за обработку комманды сервера и выбор нужного действия

Центральное место в реализации алгоритмов шифрования и цифровой подписи занимает функция нахождения НОД - iNOD

iNOD(a,b:real):real;:real;:real;a0 do((iMod(a,i)=0) and (iMod(b,i) = 0)) :=i;:=0; :=i-1;;:=xnod;;

Генерация ключей реализована в процедуре ELGAMAL_keys

ELGAMAL_keys(P,Q:integer; var N,fn,Ka,Kb:integer);

begin:=P*Q;:=(P-1)*(Q-1);;:=(Random(fn-2)+2)(iNod(fn,ka)=1);:=(Random(fn-2)+2)(((Ka*Kb) mod fn=1));((Ka<>Kb) and (iNod(Kb,N)=1));;

Ключи, сгенерированные в процедуре ELGAMAL_keys используются в функии шифрования сообщения методом ELGAMAL - shifrD. В зависимости от того, какое значение Ka или Kb было присвоено формальному параметру Kab, будет выполнятся либо шифрование сообщения либо его расшифрование.

shifrD(Kab,N:integer;input:string):string;

var ,codeS:integer;,cod:real;,tmp:string;,iKab,jN,iRes:TFGInt;:='';StringToFGInt(FloatToStr(Kab),iKab);StringToFGInt(IntToStr(N),jN);i := 1 to length(input) do:=ord(input[i]);StringToFGInt(FloatToStr(code),iCode);(iCode,iKab,jN,iRes);String(iRes,tmp);:=StrToInt(tmp);:=res+ chr(codes);;:=res;;

Для организации цифровой подпси было принято решение использовать хеш-функцию, которая обрабатывает блоки данныхв 64 бит и, используя операцию сложения по модулю 2, на выходе выдает дайджест длиной в 8 бит. Поэтому весь передаваемый текст необходимо перевести в двоичные коды. Для этого использовалась функция

ch8to64b(InputText:string):string,

которая переводит 8 символов таблицы ASCII кодов в 64-битный блок:ch8to64b(InputText:string):string;,j:integer;,tmp:string;,tsmb:array[1..8] of string;i:=1 to 8 do[i]:=IntToBin(ord(InputText[i]));j:=1 to 8 do:=tsmb[i];[i]:=smb[i]+tmp[j+24];;;i:= 1 to 8 do:=BinText+smb[i];to64b:=BinText; end;

Функция function xHash