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-координата базовой точки) — фиксированное в стандарте.
Свойства
- Скорость — на порядок быстрее классического P-256 (secp256r1).
- Простая реализация — Montgomery ladder, устойчив к тайминг-атакам by design.
- Малый размер — 32 байта на публичный ключ, 32 байта на общий секрет.
- ~128 бит защиты от классических атак (эквивалент AES-128).
- Не даёт цифровой подписи — для подписей используется отдельный алгоритм на той же кривой: Ed25519.
Где используется
| Протокол | Роль |
|---|---|
| TLS 1.3 | Основная key exchange group (обгоняет P-256 по популярности с ~2019 года) |
| WireGuard | Единственный ECDH алгоритм — статичные и эфемерные ключи Noise IK |
| Signal, WhatsApp* | Обмен ключами в X3DH |
| SSH | curve25519-sha256 — приоритетный алгоритм в OpenSSH 6.5+ |
| Tor | Обмен ключами в ntor handshake |
| Age, Minisign | Файловое шифрование |
X25519 vs P-256
| X25519 | P-256 (secp256r1) | |
|---|---|---|
| Автор | Bernstein (2005) | NIST/NSA (2000) |
| Тип кривой | Montgomery | Weierstrass |
| Скорость | ~2-3x быстрее | — |
| Размер ключа | 32 байта | 32 байта (x-coord) + 32 (y) |
| Устойчивость к side-channel | by design | требует аккуратной реализации |
| Требования FIPS | только с 2023 (FIPS 186-5) | да, давно |
Технические детали
Curve25519 — кривая Монтгомери: y² = x³ + 486662x² + x над полем 2²⁵⁵ - 19. Отсюда и название — 25519.
Порядок группы: 2²⁵² + 27742317777372353535851937790883648493 (~2²⁵²). Кофактор 8.
Базовая точка: u-координата = 9.