Skip to content
uencoder
TASK

Use ECDH for key exchange

ECDH (Elliptic Curve Diffie-Hellman) establishes shared secrets using elliptic curves. Smaller keys, same security as DH.

  1. 1

    ECDH: Alice has private key a, public key A = a*G. Bob has private key b, public key B = b*G. They exchange public keys. Alice computes shared = a*B = a*b*G. Bob computes shared = b*A = b*a*G. Both get the same point — the x-coordinate is the shared secret. Use Curve25519 for ECDH — it is fast, constant-time, and secure.

  2. 2
    Random Bytes Generator →

    Generate the private key — a random integer in [1, n-1] where n is the curve order. For Curve25519, the private key is 32 random bytes with specific bit clamping. Use a CSPRNG — the private key must be unpredictable.

  3. 3
    Hash Calculator →

    Hash the shared secret to derive a symmetric key. The raw x-coordinate of the shared point is not uniformly distributed — hash it with SHA-256 to get a uniformly random key. Use HKDF for key derivation: K = HKDF(shared_secret, info="encryption key").

Frequently asked questions

ECDH vs DH?
ECDH uses elliptic curve groups — smaller keys for equivalent security (256-bit ECDH ≈ 3072-bit DH). ECDH is faster and uses less bandwidth. Use ECDH with Curve25519 for new systems. Classic DH with large primes is still secure but slower.
What is X25519?
X25519 is the Diffie-Hellman key exchange function using Curve25519. It is specified in RFC 7748 and used in TLS 1.3, SSH, and Signal. It is fast, constant-time (resistant to timing attacks), and handles all edge cases (no invalid curve attacks). Use X25519 for ECDH in new systems.

Workflows that solve this

Learn more

Want to understand why?

Related tools