Вы находитесь на странице: 1из 3

UTM, Курс: Securitatea în sisteme distribuite

Тема: Schema Диффи – Хеллмана dr.,conf.univ. A. Cerbu

Теория
Предположим, существует два абонента: Алиса и Боб. Обоим абонентам известны
некоторые два числа g и p, которые не являются секретными и могут быть известны также
другим заинтересованным лицам. Для того, чтобы создать неизвестный более никому
секретный ключ, оба абонента генерируют большие случайные числа: Алиса — число a,
Боб — число b. Затем Алиса вычисляет остаток от деления (1):
A=ga mod p  (1)

и пересылает его Бобу, а Боб вычисляет остаток от деления (2): 


B=gb mod p  (2)

и передаёт Алисе. Предполагается, что злоумышленник может получить оба этих


значения, но не модифицировать их (то есть, у него нет возможности вмешаться в процесс
передачи).
На втором этапе Алиса на основе имеющегося у неё a и полученного по сети B вычисляет
значение (3):
Ba mod p = gab mod p (3)

Боб на основе имеющегося у него b и полученного по сети A вычисляет значение (4):


Ab  mod p = gab mod p(4)

Как нетрудно видеть, у Алисы и Боба получилось одно и то же число (5):


K= gab mod p (5)
Его они и могут использовать в качестве секретного ключа, поскольку здесь
злоумышленник встретится с практически неразрешимой (за разумное время) проблемой
вычисления (3) или (4) по перехваченным и , если числа p, a, b выбраны достаточно
большими. Наглядная работа алгоритма показана на рисунке[4].

1
UTM, Курс: Securitatea în sisteme distribuite

Тема: Schema Диффи – Хеллмана dr.,conf.univ. A. Cerbu

Алгоритм Диффи — Хеллмана, где K — итоговый общий секретный ключ

При работе алгоритма каждая сторона:

1. генерирует случайное натуральное число a — закрытый ключ


2. совместно с удалённой стороной устанавливает открытые
параметры p и g (обычно значения p и g генерируются на одной стороне и
передаются другой), где
p является случайным простым числом
(p-1)/2 также должно быть случайным простым числом (для повышения
безопасности)[5]
g является первообразным корнем по модулю p (также является простым
числом)
3. вычисляет открытый ключ A, используя преобразование над закрытым ключом
A = ga mod p

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


5. вычисляет общий секретный ключ K, используя открытый ключ удаленной
стороны B и свой закрытый ключ a
K = Ba mod p
К получается равным с обеих сторон, потому что:
Ba mod p = (gb mod p)a  mod p = gab mod p = (ga mod p)b mod p = Ab mod p
В практических реализациях для a и b используются числа порядка 10100 и p порядка 10300.
Число g не обязано быть большим и обычно имеет значение в пределах первого десятка.
Практика

Пусть
p = 5,
g=7

User1 создаёт a = 4,
User2 выбирает b = 8

User1: A = g^(a) mod p = 7^4 mod 5 = 2401 mod 5 = 1


User2: B = g^(b) mod p = 7^8 mod 5 = 5 764 801 mod 5 = 1

User1 на основе имеющегося a и полученного по сети B вычисляет значение:


User1: s1 = B^(a) mod p = 1^4 mod 5 = 1

User2 на основе имеющегося у него b и полученного по сети A вычисляет значение:


User2: s2 = A^(b) mod p = 1^8 mod 5 = 1
2
UTM, Курс: Securitatea în sisteme distribuite

Тема: Schema Диффи – Хеллмана dr.,conf.univ. A. Cerbu

Секретный ключ User1 = 1


Секретный ключ User2 = 1 => s1 = s2