Алгоритм цифровой подписи DSA (Digital Signature Algorithm) предложен в 1991 г. в НИСТ США для использования в стандарте цифровой подписи DSS (Digital Signature Standard). Алгоритм DSA является развитием алгоритмов цифровой подписи Эль Гамаля и К.Шнорра. Он состоит из следующих шагов:
1. Отправитель и получатель электронного документа генерируют используемые при вычислениях большие целые числа g, p, q, являющиеся открытыми параметрами криптосистемы:
- g и p - простые числа, L бит каждое (512< L £1024);
- q - простое число длиной 160 бит (делитель числа (p -1)).
Они могут быть общими для всех пользователей сети.
2. Отправитель выбирает случайное целое число x (1< x<q), являющееся его секретным ключом.
3. Затем отправитель вычисляет значение открытого ключа
y = gх mod p,
которое передается всем получателям документов.
Ø Для того чтобы подписать документ M, отправитель хэширует его в целое хэш-значение m с использованием односторонней функции хэширования h (·), определенной в алгоритме безопасного хэширования SHA:
|
|
m = h (M), 1< m<q.
5. Затем отправитель генерирует случайное целое число k, 1< k<q, и вычисляет:
r = (gk mod p) mod q.
6. Далее отправитель вычисляет с помощью секретного ключа x число:
s =(m + r*x)/ k mod q.
Пара чисел (r,s)= S образует цифровую подпись S под документом M.
Таким образом, подписанное сообщение представляет собой тройку чисел [ M, r, s ].
7. Получатель подписанного сообщения [ M, r, s ] проверяет выполнение условий 0< r<q, 0< s<q и отвергает подпись, если хотя бы одно из этих условий не выполнено.
8. Затем получатель вычисляет хэш-функцию m = h (M), значение
w =1 /s mod q
и числа U 1 = (m * w) mod q,
U 2 = (r * w) mod q.
9. Далее получатель с помощью открытого ключа y вычисляет значение
v =((gU 1 * y U 2) mod p) mod q
и проверяет выполнение условия v = r.
Если условие v=r выполняется, тогда подпись S =(r,s) под документом M признается получателем подлинной.
Можно строго математически доказать, что последнее равенство будет выполняться тогда и только тогда, когда подпись S = (r,s) под документом M получена с помощью именно того секретного ключа x, из которого был получен секретный ключ y.
Таким образом, можно надежно удостовериться, что отправитель сообщения владеет именно данным секретным ключом x (не раскрывая при этом значения ключа x) и что отправитель подписал именно данный документ M.
По сравнению с алгоритмом цифровой подписи Эль Гамаля алгоритм DSA имеет следующие основные преимущества:
1. При любом допустимом уровне стойкости, т.е. при любой паре чисел g и p (от 512 до 1024 бит), числа q, x, r, s имеют длину по 160 бит, сокращая длину подписи до 320 бит.
2. Большинство операций с числами как при вычислении подписи, так и при ее проверке производится по модулю числа q длиной 160 бит, что сокращает объем памяти и время вычисления подписи.
|
|
Недостатком алгоритма DSA является то, что при подписывании и при проверке подписи приходится выполнять сложные операции деления по модулю q:
s = (m+r x)/ k mod q, w = 1/ s mod q,
что не позволяет получать максимальное быстродействие.
Но этот недостаток может быть устранен с помощью выполнения предварительных вычислений. Заметим, что значение r не зависит от сообщения M и его хэш-значения m. Можно заранее создать строку случайных значений k и затем для каждого из этих значений вычислить значения r. Можно также заранее вычислить обратные значения k -1 для каждого из значений k. Затем, при поступлении сообщения M можно вычислить значение s для данных значений r и k -1. Эти предварительные вычисления значительно ускоряют работу алгоритма DSA.
Отечественный стандарт цифровой подписи
Отечественный стандарт цифровой подписи обозначается как ГОСТ Р 34.10-94. Он использует однонаправленную хэш-функцию h (M), основанную на использовании стандартного симметричного алгоритма ГОСТ 28147-89. Алгоритм цифровой подписи, определяемый этим стандартом, концептуально близок к алгоритму DSA.
Стандарт ГОСТ Р 34.11-94 использует следующие параметры алгоритма:
открытые:
р - большое простое число длиной 509-512 бит либо 1020-1024 бит;
q - простой сомножитель числа (р -1), имеющий длину 254-256 бит.
секретный:
а - любое число, меньшее (р -1), такое, что aq mod p =1;
Секретный ключ:х –случайное число, меньше q;
Открытый ключ:у = aх mod p.
Чтобы подписать некоторое сообщение m, а затем проверить подпись, выполняются следующие шаги.
1. Пользователь А генерирует случайное число k, причем k < q.
2. Пользователь А вычисляет значения
r = (ak mod p) mod q,
s = (х · r + k · h (m)) mod q.
Если h (m) mod q = 0, то значение h (m) mod q принимают равным единице. Если r = 0 или s =0, то выбирают другое значение k и начинают снова.
Цифровая подпись представляет собой два числа, каждое длиной 256 битов, которые пользователь А отправляет эти числа пользователю В:
r mod 2256 и s mod 2256..
3. Пользователь В проверяет полученную подпись, вычисляя
v = h (m) q -2 mod q,
z 1 = (s · v) mod q,
z 2= ((q - r) · v) mod q,
u = ((а z 1 · у z 2) mod p) mod q.
Если u = r, то подпись считается верной.
Различие между этим алгоритмом и алгоритмом DSA заключается в том, что в DSA
s = (k -1 (х · r + h (m))) mod q,
что приводит к другому уравнению верификации.
Следует также отметить, что в отечественном стандарте ЭЦП параметр q имеет длину 256 бит. Западных криптографов вполне устраивает q длиной примерно 160 бит. Различие в значениях параметра q является отражением стремления разработчиков отечественного стандарта к получению более безопасной подписи.
Криптографические протоколы