- •Методические материалы
- •1. Основные понятия
- •2. Традиционные криптосистемы
- •2.1. Некоторые особенности криптосистем. Примеры традиционных криптосистем
- •2.2. Теоретическая стойкость криптосистем 2
- •2.2.1. Системы с совершенной секретностью
- •2.2.2. Шифр Вернама
- •2.2.3. Элементы теории информации
- •2.2.4. Расстояние единственности шифра с секретным ключом
- •2.3. Современные криптосистемы с секретным ключом 4
- •2.3.1. Основные положения
- •2.3.2. Блоковые шифры
- •2.3.2.1. Общие положения
- •2.3.2.2. Блоковый шифр гост 28147-89
- •2.3.2.3. Режимы функционирования блоковых шифров
- •2.3.3. Потоковые шифры
- •2.3.3.1. Общие положения
- •2.3.3.2. Режим ofb блокового шифра
- •2.3.3.3. Режим ctr блокового шифра
- •2.3.3.4. Алгоритм rc4 6
- •3. Криптосистемы с открытым ключом 7
- •3.1. Основные положения
- •3.2. Криптосистема Диффи-Хеллмана
- •3.3. Шифр Шамира
- •3.4. Шифр Эль-Гамаля
- •3.5. Шифр rsa. Односторонняя функция с "лазейкой"
- •3.6. Цифровая (электронная) подпись
- •3.6.1. Криптографические хеш-функции
- •3.6.2. Цифровая подпись rsa
- •3.6.3. Цифровая подпись на базе шифра Эль-Гамаля
- •3.6.4. Стандарты на цифровую подпись
- •3.7. Криптографические протоколы
- •3.7.1. Протокол для доказательства с нулевым знанием
- •3.7.2. Протокол для поддержки электронных денег
- •Рекомендуемая литература
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.