Хелпикс

Главная

Контакты

Случайная статья





Программа реализована на языке программирования Python .



 

Цифровая подпись Эль-Гамаля на эллиптическойкривой.

Часть 1. Теория:

 

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

· Случайное число должно сразу после вычисления подписи уничтожаться, так как если злоумышленник знает случайное число и саму подпись, то он легко может найти секретный ключ по формуле: и полностью подделать подпись.

Число должно быть случайным и не должно дублироваться для различных подписей, полученных при одинаковом значении секретного ключа.

· Использование свертки объясняется тем, что это защищает подпись от перебора сообщений по известным злоумышленнику значениям подписи. Пример: если выбрать случайные числа , удовлетворяющие условиям , НОД(j, p-1)=1 и предположить что

то легко удостовериться в том, что пара является верной цифровой подписью для сообщения .

· Цифровая подпись Эль-Гамаля стала примером построения других подписей, схожих по своим свойствам. В их основе лежит выполнение сравнения: , в котором тройка принимает значения одной из перестановок ±r, ±s и ±m при каком-то выборе знаков. Например, исходная схема Эль-Гамаля получается при , , . На таком принципе построения подписи сделаны стандарты цифровой подписи США и России. В американском стандарте DSS (DigitalSignatureStandard), используется значения , , , а в Российском стандарте: , , .

· Еще одним из преимуществ является возможность уменьшения длины подписи с помощью замены пары чисел на пару чисел ), где является каким-то простым делителем числа . При этом сравнение для проверки подписи по модулю нужно заменить на новое сравнение по модулю : . Так сделано в американском стандарте DSS (DigitalSignatureStandard).

 

Криптостойкость и особенности

В настоящее время криптосистемы с открытым ключом считаются наиболее перспективными. К ним относится и схема Эль-Гамаля, криптостойкость которой основана на вычислительной сложности проблемы дискретного логарифмирования, где по известным p, g и y требуется вычислить x, удовлетворяющий сравнению:

ГОСТ Р34. 10-1994, принятый в 1994 году в Российской Федерации, регламентировавший процедуры формирования и проверки электронной цифровой подписи, был основан на схеме Эль-Гамаля. С 2001 года используется новый ГОСТ Р 34. 10-2001, использующий арифметику эллиптических кривых, определенных над простыми полями Галуа. Существует большое количество алгоритмов, основанных на схеме Эль-Гамаля: это алгоритмы DSA, ECDSA, KCDSA, схема Шнорра.

 

Часть 2. Практика:

Программа реализована на языке программирования Python.

# -*- coding: utf-8 -*-

 

# создаёт кортеж (a, b) из чисел a и b

def zero(a, b):

if a is None: a=0

if b is None: b=0

return (a, b)

 

# колличество единиц в двоичном представление числа (хэш-функция для ФИАТА-ШАМИРА)

defoneOccur(n):

i = 0

for a in n:

while a< > 0:

if a%2==1:

           i = i+1

a = a> > 1

return i

 

# нахождение обратного для n по модулю mod

defobr(n, mod):

for a in range(1, mod):

if n*a%mod==1:

return a

 

import random

p = 53

g = 7

x = 17

k, k_obr = None, None

whilek_obr is None:

k = random. randint(1, p-1)

k_obr = obr(k, p-1)

y = g**x%p

r = g**k%p

 

# подпись Эль-Гамаля

def EDS(mes):

h = oneOccur(mes)

s = (h-x*r)*k_obr%(p-1)

return (r, s)

 

# проверкаподписи

defcheckEDS(mes, sign):

h = oneOccur(mes)%p

return g**h%p, (y**sign[0])*(sign[0]**sign[1])%p

 

# многочлены для тестов

a = [1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1]

b = [1, 0, 1]

 

#print devide(a[: ], b[: ]) # деление

#print GCD(a[: ], b[: ]) # НОД

#printkelli() # таблица келли над GF(32)

 

mes = [2, 4, 3, 76, 24, 4, 34] # сообщение

sign = EDS(mes) # подпись Эль-Гамаля

printsign

printcheckEDS(mes, sign) # проверкаподписи



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.