Commitment Schemes: Syntax and Correctness #
The syntax of a commitment scheme ([BS23], Section 8.12): committing
to a message samples a commitment-opening pair (c, o), verification of a
claimed opening is deterministic, and honestly generated pairs always verify.
The algorithms are plain functions, with no efficiency or finiteness assumptions. Security notions live in separate definitions, so the same syntax can carry perfect, statistical, or computational security.
Main definitions #
Scheme: commitment syntax with perfect correctnessScheme.commitmentDist: the public commitment distribution for a messageScheme.mem_support_commitmentDist_iff: a commitment is possible exactly when it has a possible openingScheme.Accepts: the verifier's acceptance relation
References #
A noninteractive, unkeyed commitment scheme over message, commitment, and opening types ([BS23], Section 8.12).
Committing is randomized and produces the commitment and opening together,
since the two may be correlated. Correctness requires that every
commitment-opening pair the honest committer can output is accepted by the
verifier; for a PMF, this says honest openings verify with probability
one.
Randomized commitment and opening generation.
Deterministic verification of a claimed opening.
- correct (message : Message) (commitment : Commitment) (opening : Opening) : (commitment, opening) ∈ (self.commit message).support → self.verify message commitment opening = true
Every honestly generated commitment-opening pair verifies.
Instances For
The public commitment distribution obtained by forgetting the opening.
Equations
- scheme.commitmentDist message = PMF.map Prod.fst (scheme.commit message)
Instances For
A commitment lies in the public distribution's support exactly when some opening makes the corresponding pair an honest possible output.
The proposition that an opening is accepted for a commitment and message.
Equations
Instances For
Every pair in the support of an honest commitment is accepted.
Build a commitment scheme from a deterministic commitment generation.
Equations
- Cslib.Crypto.Protocols.Commitment.Scheme.ofPure commit verify correct = { commit := fun (message : Message) => PMF.pure (commit message), verify := verify, correct := ⋯ }