Обмен ключами Диффи — Хеллмана — метод, позволяющий двум сторонам договориться об общем секретном ключе по незащищённому каналу, ни разу не передавая сам ключ.
Как работает протокол Диффи — Хеллмана
Протокол опубликовали Уитфилд Диффи и Мартин Хеллман в 1976 году; это первый практический пример криптографии с открытым ключом. Стороны договариваются об открытых параметрах, каждая выбирает секретное число и отправляет другой вычисленное из него значение. Объединив свой секрет с полученным значением, обе приходят к одному результату, а перехватчику, который видит только переданные значения, пришлось бы решить задачу дискретного логарифмирования. Из общего секрета затем выводятся симметричные сеансовые ключи.
Современные системы в основном используют вариант на эллиптических кривых (ECDH), особенно X25519 (RFC 7748). Если для каждого сеанса генерируются новые ключи (DHE или ECDHE), последующая кража долговременного ключа сервера не раскрывает прошлый трафик — это свойство называют прямой секретностью (forward secrecy).
Почему это важно
Эфемерный обмен Диффи — Хеллмана обязателен в TLS 1.3 и используется в SSH, IPsec VPN, WireGuard и протоколе Signal. Его известные слабости хорошо изучены:
- Нет собственной аутентификации — злоумышленник в позиции «человек посередине» может провести отдельный обмен с каждой стороной, поэтому значения нужно подписывать или привязывать к сертификатам.
- Слабые группы — атака Logjam (2015) была атакой понижения версии, вынуждавшей TLS-серверы использовать 512-битные «экспортные» группы, которые быстро взламывались.
- Квантовая угроза — алгоритм Шора взломает классический и эллиптический варианты, поэтому браузеры и мессенджеры уже комбинируют X25519 с постквантовым ML-KEM в гибридном обмене ключами.
Рекомендации
- Использовать ECDHE с X25519 или NIST P-256 либо группы конечных полей не менее 2048 бит.
- Отключить экспортные наборы шифров и статический (неэфемерный) обмен ключами.
- Всегда аутентифицировать обмен сертификатами или закреплёнными ключами.
- Включать гибридный постквантовый обмен ключами там, где он поддерживается.