
вычисляет

– сообщение с подписью
Вычисляем значение хеш-функции, получим

Подпись верна.
Определение Хеш-функции.
Хеш-функцией называется любая функция

, которая строке сообщения

произвольной длины

ставит в соответствие целое число фиксированной длины.
9. Криптографические алгоритмы
9.1 Шифр Эль-Гамаля
Пусть имеются абоненты

, которые хотят передавать друг другу зашифрованные сообщения, не имея никаких защищённых каналов связи.
Для всей группы абонентов выбирается некоторое большое простое число

и число

, такие, что различные степени

– различные числа по модулю

. Числа

и

передаются абонентам в открытом виде.
Затем каждый абонент выбирает своё секретное число

,

, и вычисляет соответствующе ему открытое число

,

(

)
В результате получаем следующую таблицу ().
Табл(). Ключи пользователей в системе Эль=Гамаля.
Алгоритм передачи сообщения

от

к

выглядит следующим образом: будем считать, что сообщение

.
Шаг 1. Алиса формирует случайное число

,

, вычисляет числа:

(9.1.2)

(9.1.3)
и передаёт пару чисел

абоненту Бобу.
Шаг 2. Боб, получив

, вычисляет

(9.1.4)
/*Пример*/
Алиса хочет передать Бобу сообщение

. Допустим

Пусть Боб выбрал для себя секретное число

и вычислил по формуле (9.1.1)

Алиса выбирает случайное число

, например

, и вычисляет по (9.1.2) и (9.1.3):

.
Теперь Алиса посылает Бобу шифрограмму (17,12). Боб вычисляет по формуле (9.1.4):

Боб расшифровал сообщение
Электронная подпись на базе Эль-Гамаля.
Алиса выбирает большое простое число

и число

, такие, что различные степени

– это различные числа по модулю

. Эти числа передаются или хранятся в открытом виде и могут быть общими для целой группы пользователей. Алиса выбирает случайное число

,

, которое она держит в секрете. Это её секретный ключ.
Затем она вычисляет число

(9.1.5)
Это число

Алиса публикует в качестве открытого ключа. Заметим, что при больших

, зная

, невозможно найти

(это задача дискретного логарифмирования).
Теперь Алиса может подписывать сообщения. Допустим, она хочет подписать сообщение

. Опишем последовательность действий для построения подписи.
Вначале Алиса вычисляет значение хеш-функции для сообщения

, которое должно удовлетворять неравенству

. Затем Алиса случайным образом выбирает число

, взаимно простое число с

, и вычисляет число:

(9.1.6)
Далее Алиса вычисляет числа:

(9.1.7)

(9.1.8).
Под

в (9.1.8) подразумевается число, удовлетворяющее уравнению

(9.1.9)
Такое

существует, так как

и

взаимно просты, и может быть найдено по алгоритму Евклида. Наконец Алиса формирует подписанное сообщение

(9.1.10).
Получив сообщение Боб заново вычисляет значение хеш-функции

и проверяет подпись, используя равенство

(9.1.11)
/*Пример*/
Пусть общие параметры для некоторого сообщества пользователей

. Алиса выбирает свой секретный ключ

и вычисляет открытый ключ

по формуле (9.1.5):