Более надежный и удобный для реализации на персональных компьютерах алгоритм цифровой подписи был разработан в 1984 г. американцем арабского происхождения Эль Гамалем. В 1991г. НИСТ США обосновал перед комиссией Конгресca США выбор алгоритма цифровой подписи Эль Гамаля в качестве основы для национального стандарта.
Идея EGSA (El Gamal Signature Algorithm) основана на том, что для обоснования практической невозможности фальсификации цифровой подписи может быть использована более сложная вычислительная задача, чем разложение на множители большого целого числа — задача дискретного логарифмирования. Кроме того, Эль Гамалю удалось избежать явной слабости алгоритма цифровой подписи RSA, связанной с возможностью подделки цифровой подписи под некоторыми сообщениями без определения секретного ключа.
Алгоритм цифровой подписи Эль Гамаля:
Ø Выбирают несекретные параметры алгоритма: два больших целых числа p — простое и g < p:
p (~10308 или ~21024) и g (~10154 или ~2512);
Ø Отправитель выбирает секретный ключ x для подписывания документов. Им является случайное целое число x ÎZ p, то есть 1< x < p;
Ø Отправитель вычисляет открытый ключ y, используемый для проверки своей подписи. Он и вычисляет
y = gx mod p
и передает его всем потенциальным получателям документов;
Ø Отправитель хэширует сообщение M с помощью хэш-функции h (·) в целое число m:
m = h (M), 1< m <(p -1);
Ø Отправитель генерирует секретный параметр алгоритма: случайное целое число k, 1< k <(p -1), такое, что k и (p -1) являются взаимно простыми;
Ø Наконец отправитель вычисляет цифровую подпись S=(а, b), состоящую из двух целых чисел а и b, вычисляемых следующим образом:
а = gk mod p,
и число b вычисляется с помощью секретного ключа x из уравнения
m = x · a + k · b mod (p - 1),
используя расширенный алгоритм Евклида.
Тройка чисел (M, а, b) передаётся получателю, в то время как пара чисел (x, k) держится в секрете.
После приема подписанного сообщения (M, а, b) получатель должен проверить, соответствует ли подпись S=(а,b) сообщению M. Для этого получатель:
Ø Хеширует принятое сообщение M, то есть вычисляет m = h (M).
Ø Вычисляет значение А = gm mod p.
Ø Признает сообщение M подлинным только, если оно совпало с
А = ya ab mod p.
Иначе говоря, он проверяет справедливость соотношения
А = ya ab mod p = gm mod p.
Mожно строго математически доказать, что последнее равенство будет выполняться тогда и только тогда, когда подпись S=(a, b) под документом M получена с помощью именно того секретного ключа x, из которого был получен открытый ключ y. Таким образом, можно надежно удостовериться, что отправителем сообщения M был обладатель именно данного секретного ключа x, не раскрывая при этом сам ключ, и что отправитель подписал именно этот конкретный документ M.
Следует отметить, что выполнение каждой подписи по методу Эль Гамаля требует нового значения k, причем это значение должно выбираться случайным образом. Если нарушитель раскроет когда-либо значение k, повторно используемое отправителем, то он сможет раскрыть секретный ключ x отправителя.
Схема Эль Гамаля является характерным примером подхода, который допускает пересылку сообщения M в открытой форме вместе с присоединенным аутентификатором (а, b). В таких случаях процедура установления подлинности принятого сообщения состоит в проверке соответствия аутентификатора сообщению.
Пример. Выберем: числа p =11, g = 2 и секретный ключ x = 8. Вычисляем значение открытого ключа:
y = gx mod p = y = 28 mod 11 = 3.
Предположим, что исходное сообщение M характеризуется хэш-значением m = 5. Для того чтобы вычислить цифровую подпись для сообщения M, имеющего хэш-значение m = 5, сначала выберем случайное целое число k = 9.
Убедимся, что числа k и (p -1) являются взаимно простыми. Действительно, HОД (9,10) =1.
Далее вычисляем элементы а и b подписи:
а = gk mod p = 29 mod 11= 6,
элемент b определяем, используя расширенный алгоритм Евклида:
m = x · a + k · b mod (p -1).
При m = 5, а = 6, x = 8, k = 9, p = 11 получаем b = 3 как решение уравнения
5=(6·8+9· b) mod 10 или 9· b º-43 mod 10.
Итак, цифровая подпись представляет собой пару: а = 6, b = 3.
Далее отправитель передает подписанное сообщение. Приняв подписанное сообщение и открытый ключ y = 3, получатель вычисляет хэш-значение для сообщения M: m = 5, а затем вычисляет два числа:
yaab mod p = 36 · б3 mod 11 =10 mod 11;
gm mod p =25 mod 11 =10 mod 11.
Так как эти два целых числа равны, принятое получателем сообщение признается подлинным.
Схема цифровой подписи Эль Гамаля имеет ряд преимуществ по сравнению со схемой цифровой подписи RSA:
1. При заданном уровне стойкости алгоритма цифровой подписи целые числа, участвующие в вычислениях, имеют запись на 25% короче, что уменьшает сложность вычислений почти в два раза и позволяет заметно сократить объем используемой памяти.
2. При выборе модуля p достаточно проверить, что это число является простым и что у числа (p -1) имеется большой простой множитель (т.е. всего два достаточно просто проверяемых условия).
3. Процедура формирования подписи по схеме Эль Гамаля не позволяет вычислять цифровые подписи под новыми сообщениями без знания секретного ключа (как в RSA).
Однако алгоритм цифровой подписи Эль Гамаля имеет и некоторые, недостатки по сравнению со схемой подписи RSA. В частности, длина цифровой подписи получается в 1,5 раза больше, что в свою очередь увеличивает время ее вычисления.