Commitment scheme

A commitment scheme is a two-phase protocol between a committer and a verifier in which the committer binds to a value during the commit phase (without revealing it), and then reveals the value in the open phase. The binding property ensures the committer cannot change the value after committing; the hiding property ensures the verifier learns nothing about the value before opening.

Syntax

A commitment scheme is a tuple of efficient algorithms with respect to a message space , commitment space , and decommitment space :

  • is a randomized algorithm that outputs public parameters
  • is a randomized algorithm that takes a message and randomness , and outputs a commitment and decommitment string
  • is a deterministic algorithm that opens a commitment using decommitment , returning the message or on failure.

Properties

Correctness

For all and , with probability 1 over and .

Hiding

The commitment reveals no information about before opening. Computationally:

is negligible, where the game samples , receives from , picks , computes , sends to , receives from , and outputs .

A commitment is statistically hiding if this holds even against computationally unbounded adversaries.

Binding

No efficient committer can open a commitment to two different messages:

is negligible, where the game samples , receives from , and outputs 1 iff , , and .

A commitment is statistically binding if this holds even against computationally unbounded adversaries.

Note: No commitment scheme is simultaneously statistically hiding and statistically binding — folklore. The achievable regimes are: (1) statistically binding / computationally hiding, (2) computationally binding / statistically hiding, and (3) computationally binding / computationally hiding.

Variations

Trapdoor commitments

A trapdoor commitment (or equivocable commitment) is a commitment scheme with an additional trapdoor (generated alongside ) that allows equivocation: given , for any commitment and any two messages , one can produce decommitment strings with and . Used in zero-knowledge proof constructions.

Vector commitments

A vector commitment allows committing to an ordered vector such that one can later open any single position with a short proof. Used in verifiable data structures and SNARKs.

Other results

Participates in

Produces Commitment scheme