Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Эл-ты_криптологии-лек.doc
Скачиваний:
24
Добавлен:
24.11.2019
Размер:
757.76 Кб
Скачать

3.6.4. Стандарты на цифровую подпись

Опишем российский государственный стандарт ГОСТ Р34.10-94. В его основе лежит алгоритм DSA (Digital Signature Algorithm), являющийся модификацией подписи Эль-гамаля. Суть DSA такова.

Вначале для некоторого сообщества пользователей выбираются общие несекретные параметры. Прежде всего, это два простых числа: q длиной 256 бит и р длиной 1024 бита, для которых выполняется соотношение

p = bq + 1 (3.30)

для некоторого целого b. Старшие биты q и р должны быть равны 1.

Затем выбирается число а > 1 такое, что:

aq mod p = 1. (3.31)

В результате получаем три общих открытых параметра: q, р и a.

Замечание. При выполнении (3.31) справедливо следующее утверждение: возведение числа a в произвольную степень t по mod p даст тот же результат, что и возведение числа a в степень t' = (t mod q): a t = a nq + t' = a q…a qa t' mod p = a t' mod p. Следовательно, степени показателей в этом алгоритме никогда не будут превышать 256 бит.

Далее каждый пользователь выбирает случайное число x, 1 < x < q, и вычисляет:

y = ax mod p, (3.32)

Число x будет секретным ключом пользователя, а число yоткрытым ключом. Предполагается, что несекретные ключи всех пользователей указываются в некотором несекретном, но "сертифицированном" справочнике, который должен быть у всех, кто собирается проверять подписи. На этом этап выбора параметров заканчивается. (Отметим, что в настоящее время найти x по y практически невозможно при указанной выше длине модуля p).

Пусть имеется сообщение . Рассмотрим алгоритм генерации подписи.

1. Вычисляем значение хеш-функции h = h( ) (в российском варианте алгоритма DSA хеш-функция определяется по ГОСТ Р34.11-94).

2. Формируем случайное число k, 0 < k < q.

3. Вычисляем r = (ak mod p) mod q. Если оказывается, что r = 0, то возвращаемся к шагу 2.

4. Вычисляем s = (kh + xr) mod q. Если s = 0, то возвращаемся к шагу 2.

5. Получаем подписанное сообщение < ; r, s>.

Алгоритм проверки подписи:

1. Вычисляем хеш-функцию для сообщения h = h( ).

2. Проверяем выполнение неравенств 0 < r < q, 0 < s < q.

3. Вычисляем u1 = sh1 mod q, u2 = rh1 mod q.

4. Вычисляем v = ( mod p) mod q.

5. Проверяем выполнение равенства v = r.

Если хотя бы одна из проверок на шагах 2 или 5 не дает нужного результата, то подпись считается недействительной. Если же проверки удачны, то подпись считается подлинной.

Покажем, что если подпись была сформирована обладателем секретного ключа, то выполняется равенство v = r.

Запишем цепочку равенств, которая непосредственно следует из описания метода (напомним, что в соответствии со следствием формулы (3.31), далее все показатели степени числа a рассматриваются по модулю q):

v = ( mod p) mod q = ( mod p) mod q =

= ( mod p) mod q = ( mod p) mod q = r.

Рассмотренный алгоритм предполагает выбор числа a. Для этого рекомендуется использовать следующий метод. Берем случайное число g > 1 и вычисляем

a = g(p–1)/q mod p, (3.33)

(результат деления (p–1)/q будет целым числом – см. (3.30)).

Если a > 1, то это то, что нам нужно, то есть полученное число будет удовлетворять равенству (3.31). Действительно, на основании (3.33) и теоремы Ферма имеем: aq mod p = = g((p–1)/q)q mod p = gp–1 mod p = 1.

В США также принят стандарт цифровой подписи на основе алгоритма DSA – FIPS 186 (1991 г.). Кратко рассмотрим отличия американского стандарта от российского.

1. Длина числа q берется равной 160 бит.

2. Используется другая хеш-функция – SHA-1.

3. При генерации подписи на шаге 4 параметр s вычисляется по формуле

s = k1(h + xr) mod q.

4. При проверке подписи на шаге 3 параметры u1 и u2 вычисляются по формулам

u1 = hs1 mod q, u2 = rs1 mod q.