Калькулятор протокола Диффи — Хеллмана

Учебный калькулятор обмена ключами Диффи — Хеллмана. Задайте простой модуль p, основание g и секретные числа сторон или сгенерируйте параметры — калькулятор вычислит открытые ключи и общий секрет, проверит, является ли g первообразным корнем, и для малых p покажет, как перехватчик восстановит секрет.

Желательно первообразный корень по модулю p
p = 2q + 1, где q тоже простое
Алиса отправляет A = gᵃ mod p—
Боб отправляет B = gᵇ mod p—
Общий секрет K—
Основание g—

Ход обмена

Рекламный блок «после калькулятора» (ads/after-calc.html)

Как договориться о ключе по открытому каналу

Протокол Диффи — Хеллмана (1976) позволяет двум сторонам получить общий секретный ключ, обмениваясь сообщениями, которые может читать кто угодно.

  1. Стороны открыто договариваются о большом простом числе p и основании g.
  2. Алиса выбирает секретное число a и отправляет A = ga mod p.
  3. Боб выбирает секретное число b и отправляет B = gb mod p.
  4. Алиса вычисляет K = Ba mod p, Боб — K = Ab mod p. Оба получают одно и то же число gab mod p.

Перехватчик знает p, g, A и B, но чтобы найти K, ему нужно вычислить a по A — решить задачу дискретного логарифма. Для чисел в 2048 бит и больше это считается практически невозможным.

Пример

p = 23, g = 5. Алиса выбирает a = 6 и отправляет A = 5⁶ mod 23 = 8. Боб выбирает b = 15 и отправляет B = 5¹⁵ mod 23 = 19. Алиса считает 19⁶ mod 23 = 2, Боб — 8¹⁵ mod 23 = 2. Общий секрет K = 2.

Рекламный блок «внутри статьи» (ads/in-article.html)

Выбор параметров

Основание g должно порождать большую подгруппу: лучше всего, если g — первообразный корень, то есть его степени пробегают все числа от 1 до p − 1. Удобно брать «безопасное» простое p = 2q + 1, где q тоже простое: тогда у группы нет маленьких подгрупп, в которые можно «загнать» ключ. На практике используют стандартизированные группы размером 2048–4096 бит или эллиптические кривые (X25519), где ключи намного короче при той же стойкости.

Уязвимость к подмене

Сам по себе протокол не проверяет, с кем идёт обмен. Злоумышленник посередине может провести два отдельных обмена — с Алисой и с Бобом — и читать всю переписку. Поэтому в TLS, SSH и мессенджерах открытые ключи Диффи — Хеллмана подписываются, а подлинность собеседника проверяется сертификатами или сравнением отпечатков ключей.

Рекламный блок «внизу страницы» (ads/bottom.html)