Криптография
Обмен ключами
Каждый раз при открытии HTTPS-сайта браузер и сервер создают общий секретный ключ за 1-2 RTT - никогда не встречаясь раньше, через публичный интернет, где каждый пакет может перехватить провайдер или спецслужба. Это Diffie-Hellman - идея, изменившая крипография в 1976 году.
- **TLS 1.3**: ECDHE (Ephemeral Elliptic Curve DH) - обязательный обмен ключами. X25519 и P-256 - две стандартные группы. Ephemeral ключи дают perfect forward secrecy.
- **Signal X3DH**: расширенный triple DH для установки первого сеанса с незнакомым контактом без предварительного общения. Используется в WhatsApp (>2 млрд пользователей).
- **Logjam (2015)**: NSA использовала 1024-битные DH-группы для пассивной прослушки. Уязвимость затронула ~8% HTTPS-серверов. После Logjam индустрия мигрировала на ECDH.
- **WireGuard**: только X25519 для обмена ключами - никаких переговоров о cipher suite. Простота протокола = меньше поверхность атаки.
Проблема распределения ключей
До 1976 года казалось, что для безопасного общения двух сторон нужен предварительный секретный канал для передачи ключа. Это порочный круг: для защиты ключа нужен ключ. Симметричные системы масштабировались плохо: для n участников нужно n(n-1)/2 пар ключей.
Whitfield Diffie и Martin Hellman опубликовали 'New Directions in Cryptography' в 1976 году. Это была революция: возможность обмена ключами по открытому каналу. GCHQ (британская разведка) разработала аналогичную идею раньше, но засекретила её. Патент Diffie-Hellman истёк в 1997 году.
Почему распределение симметричных ключей не масштабируется на интернет-уровне?
Diffie-Hellman: публичный обмен ключами
Аналогия: Alice и Bob публично договариваются о базовом цвете краски (публичные параметры). Каждый добавляет свой секретный цвет и обменивается смесями. Затем каждый добавляет свой секрет к смеси партнёра - получают одинаковый цвет, который никто не видел в процессе.
Что именно Alice и Bob НЕ передают через публичный канал в DH-обмене?
Задача дискретного логарифма
Безопасность DH основана на задаче дискретного логарифма (DLP): зная g, p и y=g^x mod p, найти x. Для конкретных значений это просто (p=23, g=5, y=8 -> x=6). Для больших p (2048+ бит) - вычислительно неосуществимо при правильном выборе параметров.
Logjam (2015): атака показала, что многие TLS-серверы использовали 512-битные DH-группы ('export grade'), которые взламываются за секунды, и 1024-битные группы, взломанные спецслужбами. Минимум сегодня - 2048 бит для classical DH, но лучше ECDH на Curve25519 или P-256.
Почему ECDH с 256-битным ключом безопаснее classical DH с 2048-битным ключом?
MITM-атака на DH
Базовый DH не аутентифицирует стороны. Man-in-the-Middle атака: Eve перехватывает сообщения и устанавливает отдельные DH-сессии с Alice и Bob. Обе стороны думают, что общаются напрямую, а Eve читает всё.
TLS решает MITM через сертификаты: сервер подписывает DH-параметры своим приватным RSA или EC ключом, а сертификат удостоверяет CA. Клиент проверяет подпись и сертификат - Eve не может создать подпись без приватного ключа сервера.
Signal Protocol использует X3DH (Extended Triple Diffie-Hellman) для начального обмена ключами с аутентификацией через Identity Keys. Даже при компрометации одного сессионного ключа прошлые и будущие сессии защищены (forward secrecy + break-in recovery).
Что обеспечивает TLS-сертификат в контексте DH-обмена ключами?
Ключевые идеи
- **Проблема ключей**: для n участников симметричной криптографии нужно O(n^2) ключей, доставляемых по защищённому каналу. DH решает эту задачу.
- **DH-обмен**: два участника создают общий секрет через публичный канал, не передавая сам секрет. Безопасность - на задаче дискретного логарифма.
- **ECDH vs classical DH**: 256-битная кривая ~ 3072-битному классическому DH. X25519 - рекомендованная группа в 2024 году.
- **MITM без аутентификации**: базовый DH уязвим к MITM. TLS-сертификаты аутентифицируют DH-параметры через подписи CA.
Связанные темы
DH - фундамент асимметричной криптографии и протоколов:
- Эллиптические кривые — ECDH использует группу точек на эллиптической кривой вместо Z/pZ. Задача ECDLP значительно сложнее DLP при том же размере ключа.
- TLS 1.3 — TLS 1.3 использует ECDHE для forward secrecy. Server подписывает DH-параметры для защиты от MITM.
- Signal Protocol — X3DH (Extended Triple DH) решает задачу аутентифицированного обмена ключами с незнакомым контактом.
Вопросы для размышления
- DH ephemeral: в TLS 1.3 каждая сессия использует новую DH-пару. Почему это важнее долгосрочного DH-ключа сервера?
- Если Eve записала весь DH-трафик сегодня, а завтра взломает квантовым компьютером DLP - расшифрует ли она прошлые сессии?
- X25519 использует специально выбранную кривую Бернштейна. Почему выбор кривой критичен для безопасности ECDH?