В настоящее время системы криптографической защиты с открытым ключом справедливо числятся среди наиболее перспективных. В таких системах для шифрования сообщения используется закрытый ключ, а для расшифровывания — открытый. Последний не является секретным и может быть опубликован для применения всеми пользователями системы, которые практикуют шифрование данных. При этом считается, что расшифровывание данных с помощью открытого ключа невозможно. Для этой операции получатель зашифрованной информации использует секретный ключ, который не может быть определен из открытого ключа. Одной из таких схем является схема Эль Гамаля, которая может быть использована для шифрования данных, формирования цифровых подписей и организации ключевой системы. Давайте посмотрим, как на практике программно реализовать упомянутую схему.
История вопроса
Сейчас существует целая ветвь алгоритмов, относимых к типу Эль Гамаль: это алгоритмы DSA, KCDSA и, наконец, самый сложный — алгоритм Шнорра. Сравнительный анализ указанных алгоритмов приведен в таблице.
Несмотря на то, что алгоритм Эль Гамаля выглядит самым простым в этой цепи, он, тем не менее, обеспечивает достаточную криптостойкость, основанную на сложности решения задачи дискретного логарифмирования.
Безопасность схемы Эль Гамаля обусловлена сложностью вычисления дискретных логарифмов в конечном поле. При использовании алгоритма шифрования Эль Гамаля длина шифртекста вдвое превышает длину исходного открытого текста. В реальных схемах шифрования необходимо использовать в качестве модуля большое простое число, имеющее в двоичном представлении длину 512–1024 бит.
Отметим, что формирование каждой подписи по данному методу требует нового значения k. В случае повторного использования упомянутого значения становится возможным раскрытие (подбор) секретного ключа x отправителя.
Теперь рассмотрим особенности программной реализации алгоритма кодирования информации Эль Гамаля.
< ... >