ECDSA

ECDSA (Elliptic Curve Digital Signature Algorithm) — подпись на эллиптических кривых. При том же уровне стойкости ключи в разы короче RSA: 256-bit ECDSA ≈ 3072-bit RSA.

Популярные кривые

КриваяРазмерГде
P-256 (secp256r1, prime256v1)256 bitTLS, самая частая
P-384 (secp384r1)384 bitTLS, паранойя
P-521 (secp521r1)521 bitредко
secp256k1256 bitBitcoin, Ethereum

P-* — NIST-кривые. secp256k1 — Koblitz-кривая, немного быстрее но менее исследована.

Как работает подпись

  1. Хеш сообщения h = Hash(m)
  2. Случайное k (nonce)
  3. R = k×G, r = R.x mod n
  4. s = k⁻¹(h + r×d) mod n
  5. Подпись: (r, s)

Опасность повторного k

Если k совпало для двух подписей — приватный ключ вычисляется алгебраически!

Sony PS3 hack (2010). Sony использовала константный k. fail0verflow восстановил ключ подписи прошивки, взломав платформу.

Решение: RFC 6979 — детерминистический k = HMAC(privkey, hash). Используется в Bitcoin, Ed25519 by design.

ECDSA vs Ed25519

Malleability

ECDSA-подпись (r, s) и (r, n-s) — обе валидные. В Bitcoin это была проблема (BIP-62, low-s normalization).

См. также