В августе 19991 года Национальный институт стандартов и техники (National Institute of Standards and Technology, NIST) предложил для использования в своем Стандарте цифровой подписи (Digital Signature Standard, DSS) Алгоритм цифровой подписи (Digital Signature Algorithm, DSA). DSA, представляющий собой вариант алгоритмов подписи Schnorr и EIGamal.
Алгоритм использует следующие параметры:
· p = простое число длиной L битов, где L принимает значение, кратное 64, в диапазоне от 512 до 1024. (В первоначальном стандарте размер p был фиксирован и равен 512 битам.)
· q= 160-битовой простое число - множитель p-1.
· g= h(p-1)/qmod p, где h- любое число, меньшее p-1, для которого h(p-1)/qmod p больше 1.
· x = число, меньшее q.
· y= gxmod p.
В алгоритме также используется однонаправленная хэш-функция: H(m). Стандарт определяет использование SHA.
Первые три параметра, p, q и g, открыты и могут быть общими для пользователей сети. Закрытым ключом является x, а открытым - y. Чтобы подписать сообщение, m:
(1) Алиса генерирует случайное число k, меньшее q
(2) Алиса генерирует
r= (gk mod p)mod q
s = (k -1(H(m)+ xr))mod q
Ее подписью служат параметры rи s, она посылает их Бобу.
(3) Боб проверяет подпись, вычисляя
w = s-1 mod q
u1 = (H(m) * w)mod q
u2 = (rw)mod q
v= (() mod p) mod q
Если v= r, то подпись правильна.
Таблица 3.4. представляет собой краткое описание алгоритма.
Открытый ключ:
p | простое число длиной от 512 до 1024 битов (может использоваться группой пользователей) |
q | 160-битовый простой множитель p-1 (может использоваться группой пользователей) |
g | = h(p-1)/qmod p, где h- любое число, меньшее p-1, для которого h(p-1)/qmod p > 1 (может использоваться группой пользователей) |
y | = gxmod p (p-битовое число) |
Закрытый ключ:
x | < q(160-битовое число) |
Подпись:
k | выбирается случайно, меньшее q |
r | (подпись) = (gk mod p)mod q |
s | (подпись) = (k -1(H(m)+ xr))mod q |
Проверка:
w | = s-1 mod q |
u1 | = (H(m) * w)mod q |
u2 | = (rw)mod q |
v | = (() mod p) mod q |
Если v= r, то подпись правильна. |