Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
Проблема с реализацией алгоритма DSA
 
Описание алгоритма:
Цитата
p – простое число, которое при 512Ј L Ј 1024 удовлетворяет условию 2L-1 < p < 2L, L кратно 64.
q – простой делитель p-1, где 2159 < q < 2160.
g = h(p-1)/q mod p, где h любое целое, для которого 1 < h < p-1 и h(p-1)/q mod p > 1.
x равно случайному или псевдослучайному целому числу, для которого 0 < x < q.
y = gx mod p.

k равно случайному или псевдослучайному целому числу, для которого 0 < k < q.

Целые p, q и g могут быть общедоступными и использоваться группой пользователей. Секретным и открытым ключами являются х и у, соответственно. Параметры х и k используются только для формирования электронной цифровой подписи и должны храниться в секрете. Параметр k генерируется для каждой подписи.

Подпись сообщения M представляет собой два числа r и s, вычисленные согласно формулам:

r = (g**k mod p) mod q
s = (k-1(SHA(M) + xr)) mod q. (здесь k-1 величина обратная k).

SHA(M) – представляет собой дайджест сообщения M (160-битовая строка). После вычисления r и s следует проверить, не равно ли одно из них нулю.

Для верификации электронной подписи проверяющая сторона должна иметь параметры p, q и g, а также открытый ключ отправителя (подписанта) y.

Пусть M, r и s представляют собой полученное сообщение и электронную подпись. Получатель начинает верификацию с проверки условия 0 < r < q и 0 < s < q. Если хотя бы одно из условий не выполнено, электронная подпись некорректна. Далее производится вычисление:

w = (s)-1 mod q
u1 = ((SHA(M)w) mod q
u2 = (®w) mod q
v = (((g)u1 (y)u2) mod p) mod q.
Для начала решил отладить на небольших числах. Вроде все запрограммировал правильно, но при некоторых значениях начальных велечин все работает, а при других ЭЦП оказывается неверна.

Пример(не работает):
P=659
Q=47
G=571
X=19
K=31
m=4
Пример(работает):

P=983
Q=491
G=739
X=131
K=409
m=от 1 до 33
 
Пересчитал все с помощью калькулятора. Дело все-таки в выборе начальных велечин. Все стальное работает правильно. Но кажется все значения выбраны правильно !
P-простое, Q-простое, делит P-1, G-простое. Может есть еще какие-то требования к начальным значениям ?
 
Продемонстрируйте, что значит "не работает".
Страницы: 1
Читают тему