ECDSA
ECDSA (Elliptic Curve Digital Signature Algorithm) — подпись на эллиптических кривых. При том же уровне стойкости ключи в разы короче RSA: 256-bit ECDSA ≈ 3072-bit RSA.
Популярные кривые
| Кривая | Размер | Где |
|---|---|---|
| P-256 (secp256r1, prime256v1) | 256 bit | TLS, самая частая |
| P-384 (secp384r1) | 384 bit | TLS, паранойя |
| P-521 (secp521r1) | 521 bit | редко |
| secp256k1 | 256 bit | Bitcoin, Ethereum |
P-* — NIST-кривые. secp256k1 — Koblitz-кривая, немного быстрее но менее исследована.
Как работает подпись
- Хеш сообщения
h = Hash(m) - Случайное
k(nonce) - R = k×G, r = R.x mod n
- s = k⁻¹(h + r×d) mod n
- Подпись: (r, s)
Опасность повторного k
Если k совпало для двух подписей — приватный ключ вычисляется алгебраически!
Sony PS3 hack (2010). Sony использовала константный k. fail0verflow восстановил ключ подписи прошивки, взломав платформу.
Решение: RFC 6979 — детерминистический k = HMAC(privkey, hash). Используется в Bitcoin, Ed25519 by design.
ECDSA vs Ed25519
- ECDSA — стандарт NIST, есть в HW-модулях (HSM, TPM, YubiKey)
- Ed25519 — быстрее, детерминизм by design, без выбора кривой
Malleability
ECDSA-подпись (r, s) и (r, n-s) — обе валидные. В Bitcoin это была проблема (BIP-62, low-s normalization).