Криптосистемы Диффи-Хеллмана и Эль Гамаля
Криптосистемы Диффи-Хеллмана и Эль Гамаля основаны на вычислительной сложности задачи дискретного логарифмирования.
Криптосистема Диффи-Хеллмана была первым алгоритмом с открытыми ключами (предложен в 1976 г.). Вообще говоря, она не является шифром и предназначена для генерации ключа симметричного шифрования, который затем будет использован субъектами информационных отношений для защищенного обмена сообщениями по открытой сети. Эту криптосистему называют алгоритмом открытого распределения ключей Диффи-Хеллмана.
Предположим, что два пользователя А и В хотят организовать защищенный коммуникационный канал.
1. Обе стороны заранее уславливаются о модуле N (N должен быть простым числом) и примитивном элементе g в ,
(1 < g < N – 1), который образует все ненулевые элементы множества , т.е. . Установлено, что для любого простого N существует ровно примитивных элементов. Здесь – функция Эйлера.
Эти два целых числа N и g могут не храниться в секрете. Как правило, эти значения являются общими для всех пользователей системы. Для обеспечения стойкости число N должно иметь длину, большую или равную 512 бит, и разложение числа N – 1 на множители должно содержать хотя бы один большой простой множитель. При таком выборе числа N в настоящее время не существует эффективного алгоритма для решения задачи дискретного логарифмирования.
2. Затем пользователи А и В независимо друг от друга выбирают собственные секретные ключи и ( и – случайные большие целые числа, которые хранятся пользователями А и В в секрете).
3. Далее пользователь А вычисляет открытый ключ , а пользователь В – открытый ключ .
4. Затем стороны А и В обмениваются вычисленными значениями открытых ключей и по незащищенному каналу.
5. Далее пользователи А и В вычисляют общий секретный ключ, используя следующие сравнения:
· пользователь А: ;
· пользователь В: .
При этом K = K', так как .
Ключ K может использоваться в качестве общего секретного ключа (ключа шифрования ключей) в симметричной криптосистеме.
Кроме того, обе стороны А и В могут шифровать сообщения, используя следующее преобразование шифрования (типа RSA):
.
Для выполнения расшифрования получатель сначала находит ключ расшифрования с помощью сравнения , а затем восстанавливает сообщение
.
Рассмотрим пример. Допустим, модуль N = 47, а примитивный элемент g = 23. Предположим, что пользователи А и В выбрали свои секретные ключи: и .
Для того чтобы иметь общий секретный ключ K, они вычисляют сначала значения частных открытых ключей:
,
.
После того, как пользователи А и В обменяются своими значениями и , они вычисляют общий секретный ключ:
.
Кроме того, они находят секретный ключ расшифрования, используя следующее сравнение: , откуда
Теперь, если открытый текст М = 16, то шифртекст .
В результате расшифрования получится .
Криптосистема Эль Гамаля, предложенная в 1985 г., может быть использована как для шифрования, так и для цифровых подписей. Безопасность схемы Эль Гамаля обусловлена сложностью вычисления дискретных логарифмов в конечном поле.
Для того чтобы генерировать пару ключей (открытый ключ – секретный ключ), сначала выбирают некоторое большое простое число Р и большое целое число G, причем G < Р. Числа Р и G могут быть распространены среди группы пользователей.
Затем выбирают случайное целое число X, причем Х < Р. Число X является секретным ключом и должно храниться в секрете.
Далее вычисляют . Число Y является открытым ключом.
Для того чтобы зашифровать сообщение М, выбирают случайное целое число K, 1< K < Р – 1, такое, что числа K и (Р – 1) являются взаимно простыми.
Затем вычисляют числа
;
.
Пара чисел (а, b) является шифртекстом. Заметим, что длина шифртекста вдвое больше длины исходного открытого текста М.
Для того чтобы расшифровать шифртекст (а, b), вычисляют
.
Поскольку
, , то соотношение расшифрования справедливо.
Рассмотрим пример. Выберем Р = 11, G = 2, секретный ключ X = 8. Вычисляем . Итак, открытый ключ Y = 3. Пусть сообщение М = 5. Выберем некоторое случайное число
K = 9. Убедимся, что НОД(K, Р – 1) = 1. Действительно, НОД(9, 10) = 1. Вычисляем пару чисел а и b:
;
.
Получим шифртекст (a, b) = (6, 9).
Выполним расшифрование этого шифртекста. Вычисляем сообщение М, используя секретный ключ X:
.
Выражение М = 9/68 mod 11 можно представить в виде . Решая данное сравнение, находим М = 5.
В реальных схемах шифрования необходимо использовать в качестве модуля Р большое целое простое число, имеющее в двоичном представлении длину 512...1024 бит.