The last lesson built elliptic curves: point addition, and scalar multiplication. Today builds the operation that makes Groth16 verification and KZG commitments actually work — the bilinear pairing. It’s a strange operation that takes two points and connects two completely separate worlds.
The big picture
A pairing is best understood as a bridge between two separate elliptic curve groups, landing somewhere entirely different on the other side.
It’s worth being precise about which group each piece actually belongs to, since , , and the result are all different kinds of object: is a point in , is a point in , and the output lands in a completely different group, .
The output of a pairing is not a point on either curve — it’s a different kind of object entirely. is the multiplicative group of a finite field: is a number, not a point.
What “bilinear” means
The word bilinear refers to one very specific, very useful algebraic property this operation has.
Scalars multiplied inside the pairing come back out as an exponent on the outside.
A numeric feel for it
A made-up number makes that scaling behavior concrete.
Why this matters for ZK
Here’s the payoff: the bilinear property lets a verifier confirm a hidden multiplication happened correctly, without ever learning the actual numbers involved.
That single check — one pairing equality, standing in for a multiplication the verifier never actually sees — is how Groth16 and KZG verify a proof.