Криптография

ECC на практике

Sony PlayStation 3 взломана в 2010 году - не через перебор ключей, а через одну константу: Sony использовала один и тот же random nonce k в ECDSA для всех подписей прошивки. Математически это раскрывает приватный ключ. EdDSA решает эту проблему архитектурно - никакого случайного k.

  • **Signal Protocol**: X25519 для ECDHE в X3DH и Double Ratchet, Ed25519 для подписи Identity Keys. Обе операции на Curve25519.
  • **OpenSSH 9.0+**: Ed25519 рекомендован по умолчанию вместо RSA. Генерация ключа: 2ms vs 2 секунды для RSA-4096.
  • **WireGuard VPN**: только X25519 для обмена ключами. Никаких переговоров о криптографии - фиксированный набор примитивов.
  • **iOS**: Ed25519 для Secure Enclave операций (подпись токенов, ключей). Apple Keychain использует P-256 для совместимости с WebAuthn/FIDO2.

ECDH: обмен ключами на кривых

ECDH (Elliptic Curve Diffie-Hellman): Alice выбирает a, вычисляет A = a*G. Bob выбирает b, вычисляет B = b*G. Обмениваются. Общий секрет: S = a*B = a*(b*G) = b*(a*G) = b*A. Третий наблюдатель знает G, A, B, но не a, b, S.

ECDHE (Ephemeral): в TLS 1.3 каждое соединение использует новую пару ECDH-ключей. Даже если долгосрочный приватный ключ сервера скомпрометирован, прошлые сессии защищены - их ключи уничтожены. Это perfect forward secrecy (PFS).

Почему X25519 нельзя использовать для подписей?

ECDSA: подпись на эллиптических кривых

ECDSA (Elliptic Curve Digital Signature Algorithm) - адаптация DSA для эллиптических кривых. Подпись (r, s) для сообщения M с приватным ключом d: выбирается случайное k, R = k*G, r = R.x mod n, s = (H(M) + r*d) / k mod n.

PlayStation 3 (2010): Sony использовала константный k при ECDSA-подписи прошивки. Два разных файла -> одинаковый r в подписях. Это раскрыло приватный ключ PlayStation Network. Хакеры подписывали кастомное ПО как официальное. Любое повторение k = полная компрометация приватного ключа.

Какая катастрофическая уязвимость возникает при повторном использовании k в ECDSA?

EdDSA и Ed25519: детерминированные подписи

EdDSA (Edwards-curve Digital Signature Algorithm) устраняет главную уязвимость ECDSA: k генерируется детерминированно из приватного ключа и сообщения через хэш. Нет случайности = нет опасности слабого PRNG. Ed25519 - EdDSA на кривой Edwards25519.

Curve Edwards25519: -x^2 + y^2 = 1 + d*x^2*y^2 (форма Эдвардса, а не Вейерштрасса). Замечательное свойство: закон сложения одинаков для всех пар точек - нет специальных случаев. Это критично для constant-time реализации. OpenSSH, Signal, WhatsApp, iOS Secure Enclave используют Ed25519.

Почему EdDSA безопаснее ECDSA в реализациях с ненадёжным PRNG?

Curve25519: дизайн для безопасности

Curve25519 создан Бернштейном в 2006 году с явным принципом: все параметры генерируются детерминированно из минимального набора объяснённых критериев. Никаких 'nothing-up-my-sleeve' чисел с неизвестным происхождением.

X25519 (ECDH на Curve25519): работает только с x-координатой через Montgomery ladder. Ed25519 (EdDSA на twisted Edwards25519): изоморфна Curve25519. Одна кривая - два применения: обмен ключами (X25519) и подписи (Ed25519). Signal, WireGuard, OpenSSH, Tor - все используют обе.

Почему прозрачность генерации параметров Curve25519 важна для безопасности?

Итоги

  • **ECDH**: Q = k*G, общий секрет через скалярное умножение. ECDHE = ephemeral ключи для forward secrecy в каждой TLS-сессии.
  • **ECDSA**: уязвим при повторении nonce k. PS3-взлом - классический пример. Один повтор = полная компрометация приватного ключа.
  • **EdDSA/Ed25519**: детерминированный k из Hash(privkey, msg). Нет зависимости от PRNG. Компактные ключи (32 байта) и подписи (64 байта).
  • **Curve25519**: полностью прозрачные параметры - никаких seeds с неизвестным происхождением. X25519 для ECDH, Ed25519 для подписей.

Связанные темы

ECC на практике - основа современных протоколов:

  • ECC математика — Скалярное умножение, групповой закон - математическая основа ECDH и ECDSA операций.
  • Signal Protocol — X3DH использует X25519 для ECDH с несколькими prekeys. Double Ratchet использует X25519 для forward secrecy.
  • Side-channel атаки — Montgomery ladder и constant-time Edwards law - защита ECDH/EdDSA от timing-атак через скрытие зависимости от секретных данных.

Вопросы для размышления

  • В PS3-взломе Sony повторяла константный k в ECDSA. Если бы использовали Ed25519 - был бы тот же взлом возможен и почему?
  • X25519 и Ed25519 - одна кривая (Curve25519), но разные форматы. Можно ли использовать один ключ Ed25519 для X25519 и наоборот? Почему это плохая идея?
  • FIPS 140-3 одобряет P-256, но не X25519/Ed25519 (до 2023). Как это влияет на выбор криптографии в государственных системах США?

Связанные уроки

  • net-23-https-tls
  • net-35-wireguard
ECC на практике

0

1

Войти