Caloogy Article
中文

Bilinear Pairings and BLS Signatures: Compressing Ten Thousand Signatures into One

Date
Feb 4, 2026
Series
Cryptography
Reading
4 min
Topics
PairingBilinear mapBLSSignature aggregation

The one-sentence version

A bilinear pairing is a special map e:G1×G2→GTe: G_1 \times G_2 \to G_T satisfying e(aP,bQ)=e(P,Q)abe(aP, bQ) = e(P, Q)^{ab}: "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:

  1. The intuition: what a pairing can do, and why signature aggregation matters
  2. Real-world use: the Ethereum consensus layer, zk-SNARKs, Filecoin, threshold signatures
  3. 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 aPaP and bPbP, we can compute aP+bP=(a+b)PaP + bP = (a+b)P. But we can't "multiply" two points to get abPabP, or Diffie–Hellman would be insecure.

A pairing offers a compromise: it can't compute abPabP directly, but it can test "does a⋅ba \cdot b equal cc", even if you see only aPaP, bQbQ and cPcP and don't know a,b,ca, b, c. 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.

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 tt 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 G1,G2,GTG_1, G_2, G_T all be groups of prime order rr, with G1,G2G_1, G_2 written additively and GTG_T multiplicatively. A map e:G1×G2→GTe: G_1 \times G_2 \to G_T is called a bilinear pairing if:

  1. Bilinear: e(P1+P2,Q)=e(P1,Q) e(P2,Q)e(P_1 + P_2, Q) = e(P_1, Q)\,e(P_2, Q) and e(P,Q1+Q2)=e(P,Q1) e(P,Q2)e(P, Q_1 + Q_2) = e(P, Q_1)\,e(P, Q_2). It follows that e(aP,bQ)=e(P,Q)abe(aP, bQ) = e(P, Q)^{ab}.
  2. Non-degenerate: e(P,Q)≠1e(P, Q) \ne 1 (for generators).
  3. 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 rr-torsion points of an elliptic curve, and GTG_T is a subgroup of the finite field extension Fpk×\mathbb{F}_{p^k}^\times, where kk is called the embedding degree. BLS12-381 has k=12k = 12.

3.2 BLS signatures

Let PP be a generator of G1G_1, and HH a hash function mapping messages into G2G_2 ("hash-to-curve").

Correctness takes one line:

e(P,xH(m))=e(P,H(m))x=e(xP,H(m)).e(P, xH(m)) = e(P, H(m))^x = e(xP, H(m)).

BLS signatures are also deterministic (no random number needed), naturally avoiding the nonce-reuse accidents of ECDSA.

3.3 Aggregation

When nn people sign the same message mm, add the signatures and the public keys separately:

σ=∑iσi,pk=∑ipki.\sigma = \sum_i \sigma_i,\qquad \mathrm{pk} = \sum_i \mathrm{pk}_i.

By bilinearity,

e(P,σ)=∏ie(P,xiH(m))=e(∑ixiP, H(m))=e(pk,H(m)).e(P, \sigma) = \prod_i e(P, x_i H(m)) = e\Big(\sum_i x_i P,\ H(m)\Big) = e(\mathrm{pk}, H(m)).

One pairing equation verifies everyone. Different messages can also be aggregated, but verification then takes n+1n+1 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: G1=G2=GT=(Z11,+)G_1 = G_2 = G_T = (\mathbb{Z}_{11}, +), P=1P = 1, e(a,b)=ab mod 11e(a, b) = ab \bmod 11

This ee really is bilinear (it is just the distributive law of multiplication), but the discrete logarithm here is trivial (aPaP is just aa), so it has no security at all and only serves to show the structure.

Message hash: H(m)=5H(m) = 5.

Private key Public key Signature σ=x⋅5\sigma = x \cdot 5 Verify e(P,σ)e(P, \sigma) vs e(pk,H(m))e(\mathrm{pk}, H(m))
Alice 3 3 15≡415 \equiv 4 1⋅4=41 \cdot 4 = 4 vs 3⋅5=15≡43 \cdot 5 = 15 \equiv 4 ✓
Bob 7 7 35≡235 \equiv 2 1⋅2=21 \cdot 2 = 2 vs 7⋅5=35≡27 \cdot 5 = 35 \equiv 2 ✓
Aggregate 3+7=103 + 7 = 10 4+2=64 + 2 = 6 1⋅6=61 \cdot 6 = 6 vs 10⋅5=50≡610 \cdot 5 = 50 \equiv 6 ✓

The aggregate signature 66 verifies against the aggregate public key 1010. (Checked with Python.)

3.5 Rogue-key attacks

Aggregation has a trap. After seeing Alice's public key pkA\mathrm{pk}_A, Mallory deliberately announces her "public key" as

pkM=yP−pkA.\mathrm{pk}_M = yP - \mathrm{pk}_A.

The aggregate public key is then pkA+pkM=yP\mathrm{pk}_A + \mathrm{pk}_M = yP. Mallory knows yy, and can single-handedly forge a signature "jointly from Alice and Mallory".

Countermeasures:


Summary

Layer Key points
Intuition A pairing is a "balance scale": it tests ab=cab = c without knowing a,ba, b
Algebra Bilinearity: a group homomorphism when one side is fixed, e(aP,bQ)=e(P,Q)abe(aP, bQ) = e(P, Q)^{ab}
BLS Signature =xH(m)= x H(m); signatures and public keys aggregate by simple addition
Engineering Ethereum consensus, zk-SNARKs, KZG; guard against rogue keys; pairings are relatively slow