Documentation

CatCryptCore.Crypto.ZK.SigmaUCZK

Σ-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):

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:

Producing valid-looking transcripts without the witness is exactly the zero-knowledge property.

Interface types #

References #

Transcript #

A Σ-protocol transcript: commitment, challenge, response.

  • commitment : sp.Message

    The commitment (first message).

  • challenge : sp.Challenge

    The challenge.

  • response : sp.Response

    The response.

Instances For

    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
          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:

              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)