> ELLIPTIC CURVE CIPHER
The idea in plain English: An elliptic curve is a special kind of looping shape defined by a math equation. On this curve, you can "add" two points together to get a third point — but the rule for addition is geometric, not like regular addition. If you take a starting point G and add it to itself k times, you get point P = kG. If someone gives you G and P, finding k is extremely hard — even for supercomputers. This is the elliptic curve discrete logarithm problem. The message is hidden in k, the secret scalar.
Why this really exists: ECC is everywhere. Bitcoin and Ethereum use secp256k1 for every transaction and wallet. HTTPS (TLS) uses Curve25519 or P-256 for secure web connections. Your SSH keys are probably Ed25519. ECC offers the same security as RSA but with much shorter keys (256 bits vs 3072 bits). Every time you visit a website with HTTPS, you're using elliptic curve cryptography.
▸ Concrete Example
Simple curve: y² = x³ + 2x + 3 (mod 97). Base point G = (1, 6).
k=1: G = (1, 6)
k=2: 2G = G+G = (83, 25) (using curve point addition formulas)
k=3: 3G = 2G+G = (36, 90)
...
k=72: 72G = (62, 44) = P ✓
k = 72 → ASCII 'H'
At higher difficulties, the curve and field are larger, making exhaustive search impossible. The puzzle keeps it small enough to be solvable.
▸ How to Solve (Step by Step)
1. Get the curve parameters (a, b, modulus p), base point G, and public point P
2. Implement elliptic curve point addition over the finite field
3. Use baby-step-giant-step or Pollard's rho to find k = discrete_log(G, P)
4. k is an ASCII code (or concatenation of codes)
5. Convert to character(s) → the answer word
if p1 is None: return p2
if p2 is None: return p1
x1, y1 = p1; x2, y2 = p2
if p1 == p2:
lam = (3*x1*x1 + a) * pow(2*y1, -1, mod) % mod
else:
lam = (y2-y1) * pow(x2-x1, -1, mod) % mod
x3 = (lam*lam - x1 - x2) % mod
y3 = (lam*(x1-x3) - y1) % mod
return (x3, y3)
# Baby-step-giant-step for discrete log
▸ Real-World Applications
- Bitcoin: Every transaction uses ECDSA with secp256k1 curve
- HTTPS: TLS 1.3 defaults to X25519 key exchange (Curve25519)
- SSH keys: Ed25519 is the modern standard for secure shell access
- Signal/WhatsApp: The Signal Protocol uses ECC for end-to-end encryption