X25519 ECDH

Эллиптическая кривая Curve25519 · обмен ключами

Что это

X25519 — алгоритм обмена ключами по Диффи-Хеллмана на эллиптической кривой Curve25519, разработанной Даниэлем Бернштейном в 2005 году. Публикация функции X25519 — RFC 7748 (2016).

Формально: X25519 — это функция от 32-байтового скалярного ключа и 32-байтовой точки на кривой, возвращающая 32-байтовую точку. Используется в связке ECDHE (Ephemeral Diffie-Hellman on Elliptic Curves) — каждый раз генерируются новые эфемерные ключи.

Как работает обмен

Алиса                                    Боб
─────────────────────────────────────────────
приватный ключ a  (32 байта, случайно)
публичный ключ A = X25519(a, 9)
                    ────A────►
                                          приватный b
                                          публичный B = X25519(b, 9)
                    ◄────B────
общий секрет = X25519(a, B)              общий секрет = X25519(b, A)

       ── оба получили одинаковый 32-байтовый секрет ──

Число 9 (u-координата базовой точки) — фиксированное в стандарте.

Свойства

Где используется

ПротоколРоль
TLS 1.3Основная key exchange group (обгоняет P-256 по популярности с ~2019 года)
WireGuardЕдинственный ECDH алгоритм — статичные и эфемерные ключи Noise IK
Signal, WhatsApp*Обмен ключами в X3DH
SSHcurve25519-sha256 — приоритетный алгоритм в OpenSSH 6.5+
TorОбмен ключами в ntor handshake
Age, MinisignФайловое шифрование

X25519 vs P-256

X25519P-256 (secp256r1)
АвторBernstein (2005)NIST/NSA (2000)
Тип кривойMontgomeryWeierstrass
Скорость~2-3x быстрее
Размер ключа32 байта32 байта (x-coord) + 32 (y)
Устойчивость к side-channelby designтребует аккуратной реализации
Требования FIPSтолько с 2023 (FIPS 186-5)да, давно
Квантовая угроза: X25519, как и все схемы на дискретном логарифме, ломается алгоритмом Шора на достаточно большом квантовом компьютере. Поэтому X25519 в 2024-2026 годах сочетают с post-quantum алгоритмом ML-KEM-768 — гибридная схема X25519MLKEM768. См. /mlkem и /pq.

Технические детали

Curve25519 — кривая Монтгомери: y² = x³ + 486662x² + x над полем 2²⁵⁵ - 19. Отсюда и название — 25519.

Порядок группы: 2²⁵² + 27742317777372353535851937790883648493 (~2²⁵²). Кофактор 8.

Базовая точка: u-координата = 9.