Σ-Protocol to Honest-Verifier UC Zero-Knowledge via a Witness-Free Simulator #
A Σ-protocol with special honest-verifier zero-knowledge (SHVZK) yields a
UC-secure honest-verifier / public-coin zero-knowledge proof at error 0
(perfect ZK), with a non-trivial simulator that never uses the witness.
Scope #
The protocol itself samples the challenge, e ← SPComp.sample sp.Challenge
(see sigma_real), so the verifier is public-coin: it draws e uniformly and
independently of the commitment. The result is therefore honest-verifier UC-ZK.
SHVZK alone does not give malicious-verifier ZK, and this file does not claim it:
lifting to a verifier that chooses e adaptively as a function of the
commitment requires an additional mechanism — a challenge commitment (the
verifier commits to e before seeing a) or a Fiat–Shamir transform in the
random-oracle model.
sigma_uc_zk_secure covers the ZK / simulation direction only — it shows the
real prover's view is reproducible without the witness. It says nothing about
knowledge soundness: there is no extractor here, so this is not a full
realization of an F_ZK proof-of-knowledge functionality (which also requires
extracting a witness from a convincing prover, e.g. via special soundness and
rewinding).
The transformation #
Given a Σ-protocol (commit, respond, simulate):
- the real prover knows the witness
wand produces a transcript(a, e, z)viacommit, a uniform (public-coin) challenge, thenrespond; - the UC-ZK simulator does not know
w: it samples a challengeeand runssimulate x eto produce(a, z)backwards.
SHVZK guarantees that the simulated transcript (a, e, z) is distributed exactly
as a real one, so the two views coincide even though the simulator never uses the
witness.
Non-trivial simulator #
sigma_uc_sim calls simulate in place of the real prover's commit/respond:
- real:
commit x w → (a, e, z)— usesw; - simulated:
simulate x e → (a, z)— witness-free.
Producing valid-looking transcripts without the witness is exactly the zero-knowledge property.
Interface types #
leak = Transcript— the real world leaks the full transcript(a, e, z).sim_if = Statement— the ideal hands the simulator only the statementx.
References #
- [Damgård, On Σ-Protocols]
Transcript #
Real Protocol #
Real ZK prover: on input (x, w) with R(x, w), runs the honest protocol and
reveals the full transcript (a, e, z).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Ideal Functionality #
Ideal ZK: reveals only the statement, neither the witness nor the transcript.
The simulator receives x and must produce a transcript without w.
Equations
Instances For
Non-Trivial Simulator #
UC-ZK simulator: given only the statement x, sample a challenge e, run
simulate x e to obtain (a, z), and hand the transcript (a, e, z) to the
adversary. Non-trivial because it calls simulate rather than the honest
commit/respond; SHVZK guarantees the same distribution.
Equations
- One or more equations did not get rendered due to their size.
Instances For
UC Specification #
UC spec for Σ-protocol UC-ZK: honest input is (Statement × Witness), the real
world leaks the full Transcript, and the ideal hands the simulator only the
Statement.
Equations
- CatCrypt.Crypto.ZK.SigmaUCZK.sigmaUCZKSpec sp V = { hon := sp.Statement × sp.Witness, out := Unit, leak := CatCrypt.Crypto.ZK.SigmaUCZK.Transcript sp, sim_if := sp.Statement, view := V }
Instances For
SHVZK Assumption #
Special honest-verifier zero-knowledge: for every statement x, witness w,
and challenge e, the honestly generated (a, z) and the simulated (a, z)
have the same distribution. This is what makes the witness-free simulator
indistinguishable from the real prover.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Nice-to-have (not formalized here) #
Two natural extensions, each requiring machinery this file does not build:
- Malicious-verifier ZK. Replace the protocol's
SPComp.sample sp.Challengeby a challenge chosen by an adversarial verifierV*(possibly depending on the commitmenta), and restore honesty via a challenge commitment (the verifier commits toebefore seeinga) or a Fiat–Shamir hashe := H(x, a)in the random-oracle model. The simulator then programs the random oracle instead of freely samplinge, and SHVZK is invoked at the programmed challenge. - Knowledge soundness / extractor. Add a witness extractor from two accepting
transcripts that share a commitment but have distinct challenges (special
soundness) together with a rewinding argument, giving the soundness half of a
full
F_ZKproof-of-knowledge functionality.sigma_uc_zk_secureproves only the simulation direction.
Both are developed in the larger CatCrypt UC development built on top of this
basis (outside this minimal-basis release): a ProofOfKnowledge module supplies
the knowledge extractor via special soundness plus the forking/rewinding
argument (sigma_is_pok), and a Fiat–Shamir layer supplies the malicious-verifier
NIZK with a random-oracle-programming simulator. This file is the self-contained
honest-verifier simulation exemplar.
Security Proof #
Under SHVZK the real and simulated views coincide pointwise.
A Σ-protocol with SHVZK gives honest-verifier UC zero-knowledge at ε = 0
(perfect ZK), with a witness-free simulator. The protocol is public-coin: it
samples the challenge e ← SPComp.sample sp.Challenge in sigma_real, so this
is honest-verifier UC-ZK, not malicious-verifier UC-ZK (SHVZK alone does not
give the latter — that needs a challenge commitment or a ROM Fiat–Shamir
transform). The theorem covers the ZK / simulation direction only:
sigma_uc_sim reproduces the prover's view via simulate, without the
witness; it does not establish knowledge soundness (there is no extractor).
(genuine UC)