Pedersen Commitment: UC Security via a Trapdoor Equivocator #
Pedersen commitment over an abstract discrete-log group, proved UC-secure at
error 0 (perfect security) with a non-trivial simulator.
Scope: the equivocation direction only #
This file proves the equivocation direction of UC commitment: an honest
committer against a corrupt receiver. In that direction Pedersen is perfectly
hiding, and the CRS trapdoor lets the simulator produce a commitment before it
learns the message and open it consistently afterwards. The bound is exactly
ε = 0.
It does not cover the extraction direction (a corrupt committer, where the
simulator must extract the committed message and the commitment must be
binding). Perfectly-hiding Pedersen cannot provide that: hiding is
information-theoretic, so a commitment carries no information the simulator
could extract, and equivocation is the concrete witness that the same C opens
to every message given the trapdoor. Realizing the full F_commit
functionality — both directions — requires an extractable (equivalently,
mixed / dual-mode) commitment, not a plain perfectly-hiding one. So the result
here is one half of UC commitment, stated as such.
Modeling choice: reveal the exponent, not the group element #
pedersen_real returns the exponent s = dlog C = m + t · r rather than the
group element C = g ^ s itself. For a fixed generator, s ↦ g ^ s is a
bijection, so the two carry the same information and the distributions are
equivalent; working with the exponent makes the change-of-variables comparison
against the ideal exponent direct.
Protocol #
For a cyclic group G with generator g and CRS h = g ^ t:
Commit(m): sampler, outputC = g ^ m · h ^ rwith decommitmentr.Open(m, r): the verifier checksC = g ^ m · h ^ r.
UC security via the CRS trapdoor #
The simulator knows the CRS trapdoor t (the discrete log of h):
- on commit, the ideal samples a uniform exponent
sand setsC = g ^ s; - on open of
m, the simulator computesr = (s - m) / t, so thatm + t · r = s.
In the real world the pair (s, r) with s = m + t · r is uniform because r
is uniform; in the ideal world (s, r) with r = (s - m) / t is uniform
because s is uniform and s ↦ (s - m) / t is a bijection (for t ≠ 0). The
two joint distributions coincide, so the views are identically distributed.
Non-trivial simulator #
pedersen_sim is not the adversary. Using the trapdoor t it computes fake
randomness r from the ideal exponent s and the message m — genuine
equivocation, retroactively opening a commitment produced without the message.
Interface types #
leak = Scalar × Scalar— the real world leaks the exponents = m + t·rand the randomnessr.sim_if = Scalar × Scalar— the ideal hands the simulator the exponentsand the messagem. The simulator turns(s, m)into a view indistinguishable from(s, r).
CRS Setup #
Protocol #
Pedersen commitment to m with randomness r: C = g ^ m · h ^ r.
Equations
Instances For
Real protocol: commit to m, revealing the exponent s = m + t · r of
C = g ^ s and the randomness r. Returning the exponent rather than the
group element makes the distribution comparison direct.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Ideal functionality: sample a uniform exponent s and reveal (s, m) on the
simulator interface.
Equations
- CatCrypt.Crypto.Commitment.PedersenUC.pedersen_ideal gp _crs m = do let s ← CatCrypt.Core.SPComp.sample gp.Scalar CatCrypt.Core.SPComp.pure (Sum.inr (s, m))
Instances For
Non-Trivial Simulator #
The Pedersen simulator: from (s, m) it produces a fake (s, r) for the
adversary using the CRS trapdoor t, computing r = (s - m) / t so that
m + t · r = s.
Equations
Instances For
UC Specification #
UC spec for Pedersen commitment: honest input is a message, the real world
leaks (exponent, randomness), and the ideal world hands the simulator
(exponent, message).
Equations
Instances For
Security Proof #
The affine map r ↦ m + t · r is a bijection of Scalar when t ≠ 0.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The real and simulated views coincide pointwise: the change of variables
r ↦ m + t · r couples the real randomness with the ideal exponent.
Pedersen commitment with a CRS trapdoor realizes the equivocation
direction of UC commitment at ε = 0 (perfect), with a non-trivial
simulator. This is the honest-committer / corrupt-receiver direction: given
(s, m) from the ideal, the simulator pedersen_sim equivocates by
computing r = (s - m) / t and passing (s, r) to the adversary.
Scope: this does not cover the corrupt-committer / extraction direction —
a perfectly-hiding commitment cannot be extractable, and full F_commit
needs an extractable (mixed / dual-mode) commitment. (genuine UC)
Nice-to-have: the extraction direction #
The complementary half — a corrupt committer, where the simulator extracts the
committed message from C and the commitment is binding — is out of reach for
this protocol, not merely unproved: plain Pedersen is perfectly hiding, so no
extractor exists. Closing the gap to full F_commit means changing the
primitive, not extending this proof: instantiate an extractable / dual-mode
commitment (e.g. a hiding+extractable CRS mode, or an El-Gamal-style commitment
whose CRS trapdoor is a decryption key), then state and prove the extraction
direction against it. That belongs in a separate file for the extractable
scheme; there is deliberately no extraction theorem here to fake.
This is not left open across CatCrypt: the full account — the F_commit
functionality with both equivocation and extraction, an extractable commitment
realizing it, and the plain-model impossibility — is developed in the larger
CatCrypt UC development built on top of this basis (a Commitment/ tree with
FCOM / Extraction / PlainModelImpossibility), which is outside this
minimal-basis release. This file is the self-contained equivocation exemplar.