Разработка и программная реализация электронной цифровой подписи асимметричным методом шифрования данных
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
?ть практически невозможным вычисление 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