Криптография
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). Как это влияет на выбор криптографии в государственных системах США?