Chaum-Pedersen Protocol: Equality of Discrete Logarithms #
The Chaum-Pedersen protocol is a Sigma protocol for proving equality of discrete
logarithms. Given generators g and h of a cyclic group of prime order,
the prover demonstrates knowledge of x such that u = g^x AND v = h^x,
thereby proving that u and v share the same discrete logarithm with respect
to g and h respectively, without revealing the exponent.
Protocol #
- Statement:
(g, h, u, v)whereu = groupExp g xandv = groupExp h x - Witness:
x(the common exponent) - Relation:
R((g,h,u,v), x) <=> u = groupExp g x /\ v = groupExp h x - Commit: Sample random
r, send(a1, a2) = (groupExp g r, groupExp h r) - Challenge: Random scalar
e - Response:
z = r + e*x - Verify:
groupExp g z = groupMul a1 (groupExp u e)ANDgroupExp h z = groupMul a2 (groupExp v e) - Simulate: Sample
z, computea1 = groupMul (groupExp g z) (groupInv (groupExp u e)),a2 = groupMul (groupExp h z) (groupInv (groupExp v e)) - Extract: From two transcripts
(a, e, z)and(a, e', z'), extractx = (z-z')/(e-e')
Security properties #
chaumPedersen_complete-- completenesschaumPedersen_SHVZK_visible-- special honest-verifier zero-knowledge (given challenge)chaumPedersen_special_soundness-- special soundness (witness extraction)chaumPedersen_uc_secure-- UC security at eps = 0
References #
- [Chaum & Pedersen, Wallet Databases with Observers, CRYPTO 1992]
- [Damgard, On Sigma Protocols]
Chaum-Pedersen Protocol Types #
Chaum-Pedersen statement: (g, h, u, v).
Instances For
Chaum-Pedersen witness: the common exponent x.
Equations
Instances For
Chaum-Pedersen commitment message: (r, groupExp g r, groupExp h r).
Instances For
Chaum-Pedersen challenge: a random scalar.
Equations
Instances For
Chaum-Pedersen response: z = r + e*x.
Equations
Instances For
Chaum-Pedersen Relation #
The equality-of-discrete-logs relation:
R((g, h, u, v), x) <=> u = groupExp g x /\ v = groupExp h x.
Equations
Instances For
Chaum-Pedersen Protocol Algorithms #
Chaum-Pedersen commitment: sample random r, return (r, groupExp g r, groupExp h r).
Equations
- CatCryptCore.Examples.ChaumPedersen.cpCommit gp stmt _w = do let r ← CatCrypt.Core.SPComp.sample gp.Scalar CatCrypt.Core.SPComp.pure (r, gp.groupExp stmt.1 r, gp.groupExp stmt.2.1 r)
Instances For
Chaum-Pedersen response: compute z = r + e*x.
Equations
- CatCryptCore.Examples.ChaumPedersen.cpRespond gp _stmt w msg e = CatCrypt.Core.SPComp.pure (gp.scalarAdd msg.1 (gp.scalarMul e w))
Instances For
Chaum-Pedersen verification.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Chaum-Pedersen simulator.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Chaum-Pedersen extractor.
Equations
Instances For
Sigma Protocol Instance #
Chaum-Pedersen identification as a Sigma protocol.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Visible Transcript Equality #
Visible transcript equality for Chaum-Pedersen: compares only the externally
visible parts (a1, a2, e, z), excluding the internal randomness r.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Helper lemmas #
groupExp distributes: groupExp g (scalarAdd a b) = groupMul (groupExp g a) (groupExp g b).
groupInv of groupExp: groupInv (groupExp g e) = groupExp g (scalarNeg e).
groupExp composed: groupExp (groupExp g w) e = groupExp g (scalarMul w e).
Proved via exp_surj + groupExp_exp + scalarMul_assoc.
Completeness #
Completeness for Chaum-Pedersen: honest execution always verifies.
Commitment recovery lemma #
The key algebraic identity: groupExp g r = groupMul (groupExp g z) (groupInv (groupExp u e))
when u = groupExp g w and z = r + e*w.
Cancellation helper for special soundness #
Division distributes: scalarDiv (scalarMul k x) y = scalarMul k (scalarDiv x y).
SHVZK #
SHVZK for Chaum-Pedersen (given challenge): the visible parts of real and simulated transcripts are identical.
Special Soundness #
Special soundness for Chaum-Pedersen.
Visible Transcript and UC Security #
The internal CPMessage includes the randomness r for threading between
commit and respond. The visible transcript (what the adversary sees) projects
out r, keeping only the group elements (a1, a2), the challenge e, and
the response z. UC security is stated over these visible transcripts.
Visible Chaum-Pedersen transcript: (a1, a2, challenge, response).
Equations
Instances For
Project a full transcript to its visible parts.
Equations
Instances For
Real visible transcript computation.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Simulated visible transcript computation.
Equations
- One or more equations did not get rendered due to their size.
Instances For
UC specification for visible Chaum-Pedersen transcripts.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Real Chaum-Pedersen protocol (visible output).
Equations
Instances For
Ideal Chaum-Pedersen functionality (visible output).
Equations
Instances For
The real and simulated visible transcript computations are equal.
After projecting out the internal randomness r, the bijection
r ↦ z = r + e*w shows that the visible parts (g^r, h^r, e, z) of
the real transcript and (g^z * u^{-e}, h^z * v^{-e}, e, z) of the
simulated transcript have the same distribution, since both visible
commitments equal g^r (resp. h^r) when u = g^w, v = h^w.
The Chaum-Pedersen protocol is perfectly UC-secure: UCEmulates 0.