Данный алгоритм[8] также является алгоритмом секретного обмена между абонентами ключом. Он основан на трудности вычисления дискретного логарифма.
Рассмотрим простейшую схему создания общего ключа двумя абонентами.
Абоненты выбирают большое простое число и – первообразный корень по модулю . Получается пара , которая объявляется открытой.
Абонент выбирает случайное большое секретное число и посылает абоненту : .
Абонент выбирает случайное большое секретное число и посылает абоненту : .
Абонент вычисляет ключ: .
Абонент вычисляет ключ: .
Проверим, одинаковый ли у абонентов ключ:
Далее полученным ключом можно работать в симметричной криптосистемой.
Для того чтобы сократить размер возможных окончательных значений ключа, важно чтобы функция модульного возведения в степень была настолько почти взаимнооднозначной, насколько это возможно. В том случае, когда является простым числом, всегда существует такое , что принимает каждое из значений в промежутке , когда пробегает значения из того же интервала. Поэтому выбирают как первообразный корень по модулю .
Пример
.
В примере пункта 4.2.3.4 мы выяснили, что первообразные корни по модулю : 3 и 5. Возьмем, например . – открыта.
Абонент сгенерировал случайное число , и вычислив , послал абоненту .
Абонент сгенерировал случайное число , и вычислив , послал абоненту .
Абонент принял и вычислил ключ: .
Абонент принял и вычислил ключ: .●