The one-sentence version
A bilinear pairing is a special map satisfying : "coefficients" on either side can move freely across the brackets. With it, a BLS signature needs just one line of verification; even better, many people's signatures can simply be added into one, and only that one is verified. This is how Ethereum handles votes from hundreds of thousands of validators in each epoch.
This article has three layers:
- The intuition: what a pairing can do, and why signature aggregation matters
- Real-world use: the Ethereum consensus layer, zk-SNARKs, Filecoin, threshold signatures
- The mathematics: bilinearity, BLS signatures and aggregation, rogue-key attacks and a toy worked example
Layer 1: The Intuition
1.1 What's missing on an elliptic curve
In an elliptic curve group, we can add points and multiply them by integers: given and , we can compute . But we can't "multiply" two points to get , or Diffie–Hellman would be insecure.
A pairing offers a compromise: it can't compute directly, but it can test "does equal ", even if you see only , and and don't know . It is like a balance scale: you don't know the weight of each block, but you can see whether the two sides balance.
1.2 Why signature aggregation matters
Imagine a committee of 10,000 members, each of whom must sign the same block.
- Ordinary signatures (ECDSA, Schnorr): 10,000 signatures must be stored and verified.
- BLS signatures: the 10,000 signatures simply add up into one 96-byte signature, and verification adds up the 10,000 public keys too and performs one check.
For a blockchain, where storage and verification time are both extremely expensive, this difference is decisive.
Layer 2: Real-World Use
| Where | How it's used |
|---|---|
| The Ethereum consensus layer (Beacon Chain, since 2020) | Validators sign votes on the BLS12-381 curve, and a committee's signatures are aggregated into one; with hundreds of thousands of validators each epoch, only aggregation makes it feasible |
| zk-SNARKs (Groth16, KZG commitments) | Verifiers use pairings to check polynomial equations |
| Ethereum EIP-4844 (blobs) | KZG commitments rely on pairings |
| Filecoin, Chia, Dfinity | BLS signatures, with threshold BLS producing random beacons |
| Threshold signatures | BLS pairs naturally with Shamir's secret sharing: adding share signatures with Lagrange coefficients gives the complete signature |
The cost: pairing operations are relatively slow (one pairing costs from a few to a dozen or so times an elliptic curve scalar multiplication), and they require specially constructed "pairing-friendly curves".
Pairings began as an attack
The MOV attack of 1993 used a pairing to "move" the discrete logarithm on certain elliptic curves into a finite field and solve it there, breaking those curves. Only around 2000 did Joux's three-party key exchange, Boneh–Franklin identity-based encryption and BLS signatures turn it into a constructive tool.
Layer 3: The Mathematics
3.1 The definition of a bilinear pairing
Let all be groups of prime order , with written additively and multiplicatively. A map is called a bilinear pairing if:
- Bilinear: and . It follows that .
- Non-degenerate: (for generators).
- Efficiently computable (Miller's algorithm).
In abstract algebra terms: fixing one side, it is a group homomorphism in the other.
Real pairings (the Weil pairing, the Tate pairing and its optimized ate variant) are defined on the -torsion points of an elliptic curve, and is a subgroup of the finite field extension , where is called the embedding degree. BLS12-381 has .
3.2 BLS signatures
Let be a generator of , and a hash function mapping messages into ("hash-to-curve").
- Private key: ; public key:
- Signature:
- Verification:
Correctness takes one line:
BLS signatures are also deterministic (no random number needed), naturally avoiding the nonce-reuse accidents of ECDSA.
3.3 Aggregation
When people sign the same message , add the signatures and the public keys separately:
By bilinearity,
One pairing equation verifies everyone. Different messages can also be aggregated, but verification then takes pairings.
3.4 A worked example (a toy pairing)
Real pairings can't be computed by hand, so here is an insecure toy model that shows the algebraic structure:
Toy: , ,
This really is bilinear (it is just the distributive law of multiplication), but the discrete logarithm here is trivial ( is just ), so it has no security at all and only serves to show the structure.
Message hash: .
| Private key | Public key | Signature | Verify vs | |
|---|---|---|---|---|
| Alice | 3 | 3 | vs ✓ | |
| Bob | 7 | 7 | vs ✓ | |
| Aggregate | vs ✓ |
The aggregate signature verifies against the aggregate public key . (Checked with Python.)
3.5 Rogue-key attacks
Aggregation has a trap. After seeing Alice's public key , Mallory deliberately announces her "public key" as
The aggregate public key is then . Mallory knows , and can single-handedly forge a signature "jointly from Alice and Mallory".
Countermeasures:
- Proof of possession: registering a public key requires signing a specific message with the matching private key, proving you know it. Ethereum validators submit this when depositing.
- Or multiply each public key by a coefficient hashed from all the public keys (similar to how MuSig handles Schnorr).
Summary
| Layer | Key points |
|---|---|
| Intuition | A pairing is a "balance scale": it tests without knowing |
| Algebra | Bilinearity: a group homomorphism when one side is fixed, |
| BLS | Signature ; signatures and public keys aggregate by simple addition |
| Engineering | Ethereum consensus, zk-SNARKs, KZG; guard against rogue keys; pairings are relatively slow |