The Zcash ArboretumThe Complete Arboretum PDF

4 Commitment schemes

Two adversaries stalk this section, one on each side of a sealed envelope. Before the envelope is opened, the adversary is the peeker: the receiver, who holds the sealed commitment and tries to distinguish which of two candidate messages it contains—to read the bid before the auction closes, the vote before the tally. After the envelope has been delivered, the adversary is the equivocator: the sender, who tries to open the same commitment to a message other than the one sealed inside—to change the bid once the rival’s is public. A commitment scheme is the cryptographic sealed, tamper-evident envelope that defeats both: once delivered, the sender can no longer alter the message (binding), yet the recipient cannot read it until it is unsealed (hiding).

The primitive is the natural next step after hashing: the two constructions at the heart of this section, Pedersen and Sinsemilla, need nothing beyond the discrete-logarithm hardness of §2 and the nothing-up-my-sleeve generators that §3 showed how to derive, and nearly everything built later consumes them. Classical applications set the scene: coin-flipping over a telephone (each party commits to a bit before either reveals), zero-knowledge proofs (the prover commits to its secrets and proves statements about the sealed values), and verifiable secret sharing. Centrally for this volume, the polynomial commitments of §4.9 are the cryptographic engine of modern succinct argument systems, including the one deployed in Orchard: the value commitments checked by binding signatures, the note commitments accumulated in Merkle trees, and the witness polynomials of the Halo 2 proof system are all commitments in the precise sense defined here.

The plan of the section follows the two adversaries. We first fix the syntax of a commitment scheme and the three models of who may be trusted to set it up. We then define hiding and binding as games in the tradition of §1.4, each in three quantitative flavours—perfect, statistical, computational—and prove that the two perfections are jointly unattainable: every scheme must choose which adversary to defeat unconditionally. The constructions that follow are ordered by increasing algebraic richness: hash-based commitments (opaque but transparent and plausibly post-quantum), the Pedersen commitment and its vector variant (perfectly hiding, computationally binding under discrete log, and—decisively—linear), Sinsemilla (a commitment whose internal operations are curve operations, built to be cheap inside a proof), then polynomial commitment schemes, contrasting the pairing-based KZG family with the inner-product family that Zcash deploys, and the bridge from commitments to arguments. A closing subsection returns to the classical application named above—secret sharing—and builds its verifiable form from coefficient commitments, for the threshold signatures of the FROST Guide.

4.1 The sealed envelope

The envelope metaphor repays being taken slowly, because each of its physical properties has an exact formal counterpart. The sender writes a message on a card, seals it in the envelope, and hands the envelope over. From that moment the receiver possesses the commitment: whatever the message was, it is now fixed—the sender cannot swap the card, because the envelope is in the receiver’s hands and any tampering would show. Yet the receiver learns nothing: the envelope is opaque. Later, at a time of the protocol’s choosing, the sender opens the envelope—in the formalism, transmits the message together with the randomness used to seal it—and the receiver checks that the revealed message is consistent with the envelope received earlier.

The two guarantees are directed at different parties and different times. Hiding protects the sender against a curious receiver during the window between commit and reveal; binding protects the receiver against a dishonest sender at reveal time. A scheme that is hiding but not binding is an envelope with a false bottom: private, but worthless as evidence. A scheme that is binding but not hiding is a glass envelope: tamper-evident, but no secret survives it. The games of §4.3 formalise exactly these two failure modes, and the theorem of §4.4 shows that against computationally unbounded adversaries one of the two protections must give way.

4.2 Syntax

Definition 4.1 (Commitment scheme).

A commitment scheme Π for a message space ℳ and randomness space ℛ is a triple of algorithms (Setup,Commit,Open):

  • •

    The algorithm Setup⁢(1λ) is PPT (§1.1) and outputs public parameters p⁢p, which implicitly determine the message space ℳp⁢p and randomness space ℛp⁢p and are an implicit input to the remaining algorithms.

  • •

    The algorithm Commit⁢(p⁢p,m;r), for m∈ℳp⁢p and r∈ℛp⁢p, is deterministic given r and outputs a commitment c. We write Commit⁢(p⁢p,m), without an explicit r, for the probabilistic algorithm that samples r←$ℛp⁢p uniformly and returns r alongside c.

  • •

    The algorithm Open⁢(p⁢p,c,m,r) is deterministic and outputs a bit: 1 (accept) or 0 (reject).

Correctness requires that honestly produced commitments open: for all p⁢p in the support of Setup⁢(1λ), all m∈ℳp⁢p, and all r∈ℛp⁢p,

Open⁢(p⁢p,Commit⁢(p⁢p,m;r),m,r)=1.

The pair (m,r) is called the opening (or decommitment) of c. Every scheme in this volume is canonically opening: Open⁢(p⁢p,c,m,r) merely recomputes Commit⁢(p⁢p,m;r) and checks equality with c. This is the adopted convention unless stated otherwise. For a canonically opening scheme correctness holds automatically, and a valid opening of c is precisely a pair (m,r) with Commit⁢(p⁢p,m;r)=c—a reformulation the proofs below use constantly.

Remark 4.2 (The two phases, and a third concern).

A commitment scheme is used in two temporally separated phases. In the commit phase the sender transmits c and nothing else; in the reveal phase the sender transmits the opening (m,r) and the receiver runs Open. The two security properties attach to the two phases: hiding constrains what the receiver can learn after the commit phase, while binding constrains what the sender can do in the reveal phase. A third concern precedes both: the setup phase that produces p⁢p. Who runs Setup, and whether that party can be trusted, proves decisive for some of the constructions ahead (Remark 4.3).

Remark 4.3 (Three setup models).

Commitment schemes divide by how much trust their parameters demand.

  1. 1.

    Common reference string (CRS). A trusted party runs Setup and is assumed to erase the randomness behind it. The parameters have internal structure, and knowledge of the discarded randomness—the trapdoor—would break the scheme. Of the schemes treated in this section, only KZG (§4.9) genuinely resides here.

  2. 2.

    Uniform random string (URS), or transparent setup. The parameters consist only of public coins: uniformly random group elements with no known relations among them. There is no trapdoor and no trusted party—anyone can re-derive the parameters from a public seed. This is the regime of the Pedersen and inner-product commitments below. A Pedersen generator derived by hashing to the curve (Construction 3.24) is transparent even though the textbook presentation phrases Setup as sampling and discarding a secret.

  3. 3.

    Plain. No parameters at all, or only a standardised hash function—the home of the hash-based commitment below.

Transparent setup is highly desirable: a flawed or subverted trusted setup can silently destroy binding, as the KZG trapdoor demonstrates concretely in §4.9.

4.3 Hiding and binding

Both properties are games in the sense of Definition 1.15. The hiding game arms the peeker: she chooses the two candidate messages herself, receives a commitment to one of them, and must say which.

Definition 4.4 (Hiding game and hiding).

Let Π be a commitment scheme and 𝒜=(𝒜1,𝒜2) an adversary. For b∈{0,1}, the game 𝖧𝗂𝖽𝖾Π𝒜⁢(λ,b) runs as follows.

  1. 1.

    The challenger runs p⁢p←Setup⁢(1λ).

  2. 2.

    The adversary 𝒜1⁢(p⁢p) outputs two messages m0,m1∈ℳp⁢p and state s⁢t.

  3. 3.

    The challenger samples r←$ℛp⁢p and computes c=Commit⁢(p⁢p,mb;r).

  4. 4.

    The adversary 𝒜2⁢(s⁢t,c) outputs a bit b′, which is the output of the experiment.

The hiding advantage of 𝒜 is

AdvΠhide⁢(𝒜,λ):=|Pr⁡[𝖧𝗂𝖽𝖾Π𝒜⁢(λ,0)=1]−Pr⁡[𝖧𝗂𝖽𝖾Π𝒜⁢(λ,1)=1]|.

The scheme is computationally hiding if the advantage is negligible (§1.2) for every PPT 𝒜; statistically hiding if it is negligible even for computationally unbounded 𝒜; and perfectly hiding if it is exactly 0 for every adversary and every λ.

Proposition 4.5 (Distributional characterisation of hiding).

A commitment scheme Π is perfectly hiding if and only if for every p⁢p in the support of Setup and every pair m0,m1∈ℳp⁢p, the random variables

Commit⁢(p⁢p,m0;r)andCommit⁢(p⁢p,m1;r),r←$ℛp⁢p,

are identically distributed. It is statistically hiding if the statistical distance (Definition 1.6) between them is negligible. (Only the perfect clause is an equivalence: parameters of negligible Setup probability could exhibit large distance without granting any adversary noticeable advantage.)

Proof.

Fix p⁢p and m0,m1, and write Dm for the distribution of Commit⁢(p⁢p,m;r) over uniform r. By the variational characterisation of statistical distance (Proposition 1.7), Δ⁢(Dm0,Dm1) equals exactly the maximum advantage, over all decision procedures—efficient or not—of telling Dm0 from Dm1. An adversary who outputs the pair (m0,m1) on parameters p⁢p and applies the optimal test therefore achieves hiding advantage Δ⁢(Dm0,Dm1) whenever Setup produces p⁢p; conversely no adversary can exceed the expectation of this quantity over p⁢p. Advantage exactly 0 for all adversaries is thus equivalent to Δ=0—identical distributions—for every attainable p⁢p and every pair, and negligible statistical distance yields negligible advantage for unbounded adversaries. This coincidence of the game formulation with the distance formulation is precisely why statistical hiding was defined through the unbounded-adversary game. □

The binding game arms the equivocator. He is not handed an honest commitment; he manufactures his own, together with two openings.

Definition 4.6 (Binding game and binding).

For a commitment scheme Π and adversary 𝒜, the game 𝖡𝗂𝗇𝖽Π𝒜⁢(λ) runs as follows.

  1. 1.

    The challenger runs p⁢p←Setup⁢(1λ).

  2. 2.

    The adversary 𝒜⁢(p⁢p) outputs a commitment c and two openings (m0,r0) and (m1,r1).

  3. 3.

    The game outputs 1 iff m0≠m1 and Open⁢(p⁢p,c,m0,r0)=Open⁢(p⁢p,c,m1,r1)=1.

The binding advantage of 𝒜 is

AdvΠbind⁢(𝒜,λ):=Pr⁡[𝖡𝗂𝗇𝖽Π𝒜⁢(λ)=1],

a search game in the sense of Definition 1.15. The scheme is computationally, statistically, or perfectly binding according as the advantage is negligible for every PPT adversary, negligible for every unbounded adversary, or exactly 0 for every adversary and every λ.

For a canonically opening scheme the binding game has a useful collision reformulation: for fixed p⁢p, two openings collide precisely when Commit⁢(p⁢p,m0;r0)=Commit⁢(p⁢p,m1;r1) with m0≠m1. Perfect binding then says that distinct messages never share a commitment value at all—the message m is a deterministic function of c. Perfect binding is thus equivalent to the map c↦m being well defined on all attainable commitments, a formulation the counting argument of Remark 4.9 exploits.

Remark 4.7 (The asymmetry of the quantifiers).

The two games quantify over different objects. Hiding quantifies over what can be extracted from a single honestly produced commitment: the challenger seals the envelope, and the adversary only looks. Binding quantifies over what can be manufactured: the adversary builds an ambiguous commitment of its own choosing, under no obligation to follow Commit honestly. A scheme can be strong in one respect and weak in the other, and the two properties actively pull in opposite directions—the more commitment values a message can take (good for hiding), the more opportunities for two messages to share one (bad for binding). The next subsection makes this tension a theorem.

4.4 Incompatibility of perfect hiding and perfect binding

Theorem 4.8 (No scheme is perfectly hiding and perfectly binding).

Let Π be a canonically opening commitment scheme with |ℳp⁢p|≥2. If Π is perfectly hiding, then it is not perfectly binding: indeed, a computationally unbounded adversary wins the binding game with probability 1. Hence no nontrivial commitment scheme is simultaneously perfectly hiding and perfectly binding.

Proof.

Fix any p⁢p in the support of Setup⁢(1λ) and any two distinct messages m0,m1∈ℳp⁢p. For a message m, let

Cm:={Commit⁢(p⁢p,m;r):r∈ℛp⁢p}

be the set of attainable commitments to m, and let Dm be the distribution of Commit⁢(p⁢p,m;r) for uniform r. Perfect hiding makes Dm0 and Dm1 identical (Proposition 4.5); identical distributions have identical supports, so Cm0=Cm1. Pick any c in this common support. By definition of the supports there exist r0,r1∈ℛp⁢p with

Commit⁢(p⁢p,m0;r0)=c=Commit⁢(p⁢p,m1;r1),

and then (c,(m0,r0),(m1,r1)) wins the binding game: both openings are valid by canonical opening, and m0≠m1. The double opening exists for every attainable p⁢p; an unbounded adversary finds it by enumerating ℛp⁢p, so it wins 𝖡𝗂𝗇𝖽 with probability 1, giving AdvΠbind=1≠0. □

Remark 4.9 (The impossibility as a counting fact).

Information-theoretically the theorem is a statement about how many bits the commitment carries. Perfect binding forces the map c↦m to be well defined, so c determines m completely: the commitment carries at least log2⁡|ℳ| bits of information about the message. Perfect hiding forces the distribution of c to be independent of m: the commitment carries zero bits. The two demands are compatible only when log2⁡|ℳ|=0, that is, |ℳ|=1—when there is nothing to commit to. Every real scheme therefore chooses which property to make perfect (or statistical) and settles for the other being computational. The Pedersen commitment of §4.6 is perfectly hiding and computationally binding; the hash-based commitment of §4.5, read in the random oracle model, is computationally binding (from collision resistance) and computationally hiding.

Remark 4.10 (Two regimes, two failure modes).

The choice is not merely aesthetic; it decides how the scheme fails if its assumption falls. If binding is only computational, an adversary with enough power—one able to compute discrete logarithms, say—could retroactively change a committed value, and the soundness of any protocol built on top degrades to a computational assumption. If hiding is only computational, such an adversary could retroactively learn a committed value: privacy degrades the same way, and everlasting secrecy is lost the day the assumption breaks, even for commitments published long before. Which failure is worse is a judgement about the application: whether integrity or long-term confidentiality is the greater concern. A ledger that publishes its commitments forever has reason to care about the second failure mode; a protocol whose soundness guards live funds has reason to care about the first.

4.5 Hash-based commitments

The simplest construction seals the envelope with a hash. Recall from §3 the two properties it needs: a hash function H:{0,1}∗→{0,1}n is collision resistant (Definition 3.7) if no PPT adversary finds x≠x′ with H⁢(x)=H⁢(x′) except with negligible probability, and preimage resistant (one-way) if, given H⁢(x) for random x of appropriate length, no PPT adversary finds any x′ with H⁢(x′)=H⁢(x) except with negligible probability.

Construction 4.11 (Hash commitment).

Let H:{0,1}∗→{0,1}n be a hash function. The hash commitment has message space ℳ={0,1}∗ and randomness space ℛ={0,1}ℓ for a randomness length ℓ=ℓ⁢(λ) (for example ℓ=2⁢n). Let 𝖾𝗇𝖼⁢(m,r) be an injective, self-delimiting encoding of the pair—for example a canonical length encoding of m, followed by m, followed by the fixed-length string r. Define

Commit⁢(m;r):=H⁢(𝖾𝗇𝖼⁢(m,r)),

opened canonically. There are no nontrivial public parameters beyond the choice of H—the scheme lives in the plain model of Remark 4.3.

Proposition 4.12 (Binding of the hash commitment).

If H is collision resistant, the hash commitment is computationally binding.

Proof.

Suppose 𝒜 wins the binding game: it outputs c with valid openings (m0,r0), (m1,r1) and m0≠m1, so H⁢(𝖾𝗇𝖼⁢(m0,r0))=c=H⁢(𝖾𝗇𝖼⁢(m1,r1)). Injectivity of 𝖾𝗇𝖼 makes the two hash inputs distinct strings—this is exactly what the self-delimiting encoding buys; without it, a boundary shift could present distinct pairs as the same string. The adversary has therefore produced an H-collision, and the reduction that runs 𝒜 and outputs the pair (𝖾𝗇𝖼⁢(m0,r0),𝖾𝗇𝖼⁢(m1,r1)) wins the collision game with exactly the binding advantage of 𝒜, in essentially the same time. □

Proposition 4.13 (Hiding of the hash commitment, in the ROM).

Model H as a random oracle (Definition 3.13). For messages of length poly⁡(λ) and randomness length ℓ=ω⁢(log⁡λ), the hash commitment is computationally hiding: an adversary making at most q oracle queries has hiding advantage at most q⋅2−ℓ.

Proof.

The challenge commitment is c=H⁢(𝖾𝗇𝖼⁢(mb,r)) for uniform r∈{0,1}ℓ. Because the oracle’s outputs are independent and uniform, c is a fresh uniform string—carrying no information about b—unless the adversary queries the oracle at the exact point 𝖾𝗇𝖼⁢(mb,r). Before any such query the randomness r is information-theoretically hidden: the adversary’s view is independent of it. Each of the q queries therefore hits that point with probability at most 2−ℓ, and the union bound (Math Guide, §“The union bound and a birthday calculation”) caps the probability of any hit by q⋅2−ℓ. Conditioned on no hit, the adversary’s view is identically distributed in the two worlds b=0 and b=1, so the advantage is at most q⋅2−ℓ, negligible for ℓ=ω⁢(log⁡λ) and polynomial q. □

Remark 4.14 (Why the randomness is essential).

Dropping r is fatal. The deterministic commitment c=H⁢(m) fails hiding for every low-entropy message space: to distinguish a commitment to m0 from one to m1, the peeker simply hashes her two candidates and compares. Nothing about collision resistance or one-wayness prevents this—the attack never inverts anything. The salt r contributes ℓ uniformly random bits, so the hash input is unpredictable even when the message is one of two known values. The same phenomenon renders deterministic encryption insecure for low-entropy plaintexts, and the same cure—randomisation—applies.

Remark 4.15 (Strength profile).

The hash commitment has two virtues. It is transparent: no trusted setup, indeed no parameters, and no algebraic structure for a subverted setup to poison. And it is plausibly post-quantum: generic quantum collision finding takes Θ⁢(2n/3) queries against an n-bit hash (Remark 2.31), so increasing the output length compensates for the loss. Its weakness is the flip side of its opacity: the commitment is an unstructured bit string. One cannot add two hash commitments and obtain a commitment to the sum of the messages; no algebraic relation on commitments reflects any relation on the committed values. The Pedersen construction repairs exactly this defect, at the price of resting on discrete log.

4.6 The Pedersen commitment

We change algebraic scenery. Let 𝔾 be a cyclic group of prime order q, written additively: for a point P∈𝔾 and scalar a∈𝔽q, the scalar multiple is [a]⁢P, with [0]⁢P=𝒪 the identity, and a↦[a]⁢P is a group homomorphism 𝔽q→𝔾. Concretely, 𝔾 is the group of 𝔽p-points of a prime-order elliptic curve (Math Guide, §“The group structure of E⁢(𝔽p)”), and in this volume the Pallas curve of §2.6; but the only structural facts the constructions use are that 𝔾 is isomorphic to 𝔽q as a group and that discrete logarithms in 𝔾 are hard. Formally, a group generator 𝒢 on input 1λ outputs (𝔾,q,G) with q a Θ⁢(λ)-bit prime and G a generator, and the DLog assumption for 𝒢 states that no PPT adversary, given (𝔾,q,G,[a]⁢G) for uniform a←$𝔽q, outputs a except with negligible probability—Definition 2.2, transcribed additively as in §2.6.

Construction 4.16 (Pedersen commitment).

The algorithm Setup⁢(1λ) runs (𝔾,q,G)←𝒢⁢(1λ), samples s←$𝔽q×, sets H:=[s]⁢G, outputs p⁢p=(𝔾,q,G,H), and discards s. The message and randomness spaces are ℳ=ℛ=𝔽q, and

Commit⁢(p⁢p,m;r):=[m]⁢G+[r]⁢H,

opened canonically.

The parameters are two generators G and H whose relative discrete logarithm s=logG⁡H is unknown to all parties, the committer included. Everything hinges on this one unknown scalar: knowledge of s breaks binding (Remark 4.19), while perfect hiding, as the proof below shows, does not even require ignorance of s. In deployment the sampled-and-discarded s of the textbook presentation is replaced by deriving H through hashing to the curve (Construction 3.24): nobody ever holds s, and the setup is transparent (Remark 4.3).

Theorem 4.17 (Perfect hiding).

The Pedersen commitment is perfectly hiding.

Proof.

Fix any attainable p⁢p=(𝔾,q,G,H); since s∈𝔽q×, the point H is not 𝒪. Because 𝔾 has prime order, the nonzero H generates 𝔾, so r↦[r]⁢H is a bijection 𝔽q→𝔾. For uniform r, therefore, [r]⁢H is uniform on 𝔾—and so is its translate [m]⁢G+[r]⁢H, for every message m: adding the fixed element [m]⁢G permutes the group and leaves the uniform distribution invariant. The commitment distribution is uniform on 𝔾 regardless of m, so for any m0,m1 the two distributions coincide exactly, and every adversary’s advantage is 0 by Proposition 4.5. □

Theorem 4.18 (Computational binding under DLog).

If the DLog assumption holds for 𝒢, the Pedersen commitment is computationally binding. Concretely, from any adversary 𝒜 that wins the binding game with probability ε one constructs ℬ computing discrete logarithms with probability (1−1/q)⁢ε≥ε−1/q, in essentially the same running time.

Proof.

First the algebra. A double opening gives [m0]⁢G+[r0]⁢H=[m1]⁢G+[r1]⁢H with m0≠m1, so

[m0−m1]⁢G=[r1−r0]⁢H.

The case r1=r0 is impossible: it would force [m0−m1]⁢G=𝒪, and since G has order q this means m0≡m1(modq), contradicting m0≠m1 in 𝔽q. With r1−r0 invertible modulo the prime q, the relation solves for the hidden discrete logarithm:

s=logG⁡H=(m0−m1)⁢(r1−r0)−1modq.

A double opening is the discrete log of H.

Now the reduction. On a DLog challenge (𝔾,q,G,Q), the algorithm ℬ sets H:=Q, hands p⁢p=(𝔾,q,G,Q) to 𝒜, and, when 𝒜 returns a double opening, outputs (m0−m1)⁢(r1−r0)−1modq=logG⁡Q. One distribution gap needs accounting: in the real scheme H=[s]⁢G with s←$𝔽q×, so H is uniform on 𝔾∖{𝒪}, whereas the challenge Q=[a]⁢G has a uniform on all of 𝔽q, so Q is uniform on all of 𝔾. The two distributions differ only on the event Q=𝒪, of probability 1/q—their statistical distance is exactly 1/q—and on that event 𝒜 cannot win anyway (with H=𝒪 the relation above forces m0=m1). Conditioned on Q≠𝒪, the simulation is perfect, so

Advdlog⁢(ℬ)=(1−1q)⁢AdvΠbind⁢(𝒜)≥ε−1q,

and ℬ’s overhead over 𝒜 is a constant number of field operations. □

The same embed-and-extract pattern, scaled up to many generators, proves the vector generalisation (Theorem 4.23).

Remark 4.19 (Equivocation with the trapdoor).

Any party who knows s=logG⁡H can open a Pedersen commitment to any message. Given c=[m]⁢G+[r]⁢H and a target m′, set

r′:=r+(m−m′)⁢s−1modq;

then [m′]⁢G+[r′]⁢H=[m′]⁢G+[r]⁢H+[(m−m′)]⁢G=c. This trapdoor property is not a defect of the construction—it is precisely why discarding s in Setup is mandatory, and it is a feature the theory exploits deliberately: zero-knowledge simulators use exactly this equivocation to open commitments consistently with a transcript produced out of order. The same phenomenon priced the setup models of Remark 4.3: a commitment scheme with a trapdoor is only as binding as the claim that nobody holds it.

Theorem 4.20 (Additive homomorphism).

For all m0,m1,r0,r1∈𝔽q,

Commit⁢(m0;r0)+Commit⁢(m1;r1)=Commit⁢(m0+m1;r0+r1),

and more generally, for all scalars α,β∈𝔽q,

[α]⁢Commit⁢(m0;r0)+[β]⁢Commit⁢(m1;r1)=Commit⁢(α⁢m0+β⁢m1;α⁢r0+β⁢r1).
Proof.

Expand and regroup, using commutativity of + in 𝔾, the identity [a]⁢P+[b]⁢P=[a+b]⁢P, and the linearity [α]⁢([m]⁢G+[r]⁢H)=[α⁢m]⁢G+[α⁢r]⁢H of scalar multiplication:

[α]⁢([m0]⁢G+[r0]⁢H)+[β]⁢([m1]⁢G+[r1]⁢H) =[α⁢m0]⁢G+[β⁢m1]⁢G+[α⁢r0]⁢H+[β⁢r1]⁢H
=[α⁢m0+β⁢m1]⁢G+[α⁢r0+β⁢r1]⁢H.∎
Remark 4.21 (Value balancing: the homomorphism deployed).

The homomorphism is what makes Pedersen commitments the right tool for hidden arithmetic, and Zcash’s value balancing is the canonical deployment. Each transaction value vi is committed as Ci=[vi]⁢G+[ri]⁢H; a transaction balances iff the sum of its input values equals the sum of its output values. By Theorem 4.20, the verifier can check this without learning any vi: the value components cancel in ∑Cin−∑Cout precisely when the value sums agree modulo the group order q, in which case the difference equals [r]⁢H for the net randomness r—a commitment to 0. Cancellation alone certifies balance only modulo q—value sums differing by a multiple of q cancel too—and the deployed protocol closes the gap with range checks carried inside the proofs: the values of the notes (the shielded value records) spent and created by each Action (Orchard’s combined spend-and-output unit) are proved to lie in {0,…,264−1} (the Action statement, protocol specification § 4.18.4; enforced by the note-commitment gadget’s ValueCanonicity gate), the committed net value is the difference of two such values, and the number of summands is bounded, so the sums cannot wrap (§ 4.14). The prover does not reveal r; it proves knowledge of r by using [r]⁢H as the verification key of a signature over the transaction—the binding signature, treated with the completed balance argument in §8.9. In deployed Orchard the instantiation is 𝖵𝖺𝗅𝗎𝖾𝖢𝗈𝗆𝗆𝗂𝗍⁢(v;𝗋𝖼𝗏)=[v]⁢V+[𝗋𝖼𝗏]⁢R with hashed-to-curve generators V,R (protocol specification § 5.4.8.3); each Action publishes a commitment to its net value change, and the verifier folds the published commitments with a commitment to the transparent value balance to obtain the binding verification key. The homomorphism turns an arithmetic relation on hidden values into a group equation on public commitments—a template the rest of the volume reuses repeatedly.

4.7 Pedersen vector commitments

A single group element can seal far more than a single scalar.

Construction 4.22 (Pedersen vector commitment).

On input 1λ and a length n=poly⁡(λ), Setup outputs (𝔾,q) together with generators G1,…,Gn,H←$𝔾∖{𝒪}, sampled so that no nontrivial discrete-log relation among them is known to any party—in practice each generator is derived from a public seed by hashing into the curve, rejecting the identity if it occurs, a nothing-up-my-sleeve procedure (Construction 3.24) that makes the setup transparent. The message space is 𝔽qn, the randomness space 𝔽q, and for 𝐦=(m1,…,mn),

Commit(pp,𝐦;r):=∑i=1n[mi]Gi+[r]H=⟨𝐦,𝐆⟩+[r]H,

where ⟨𝐦,𝐆⟩:=∑i[mi]⁢Gi is the multiscalar (mixed) inner product of the message vector with the generator vector 𝐆=(G1,…,Gn). Opening is canonical.

Theorem 4.23 (Properties of the vector commitment).

The Pedersen vector commitment is perfectly hiding, and computationally binding under the DLog assumption in 𝔾.

Proof.

Hiding. Exactly as in Theorem 4.17: for uniform r the blinding term [r]⁢H is uniform on 𝔾, so the commitment is uniform on 𝔾 regardless of the message vector.

Binding. A double opening with 𝐦≠𝐦′ gives ⟨𝐦,𝐆⟩+[r]⁢H=⟨𝐦′,𝐆⟩+[r′]⁢H, that is, a nontrivial discrete-log relation

∑i=1n[mi−mi′]⁢Gi+[r−r′]⁢H=𝒪

with not all coefficients zero. The reduction ℬ must extract a single logarithm from a relation among n+1 generators, and it does so by embedding its challenge in every generator. On challenge Q=[s]⁢G, it samples ui,wi←$𝔽q for each i and uH,wH←$𝔽q, sets

Gi:=[ui]⁢G+[wi]⁢Q,H:=[uH]⁢G+[wH]⁢Q,

and resamples any pair whose generator lands on 𝒪. Each result is uniform on 𝔾∖{𝒪}—the [ui]⁢G term alone makes the pre-rejection point uniform on 𝔾—so the simulated parameters follow the real distribution. Crucially, the parameters reveal nothing about the w-coordinates: for every candidate value of wi there is exactly one ui consistent with the observed Gi, so conditioned on the adversary’s entire view the wi and wH remain independent and uniform. Write the recovered relation as ∑i[ai]⁢Gi+[aH]⁢H=𝒪 with coefficient vector (a1,…,an,aH)≠𝟎. Substituting the embeddings and collecting the G- and Q-components gives

c0+c1⁢s≡0(modq),c0=∑iai⁢ui+aH⁢uH,c1=∑iai⁢wi+aH⁢wH.

Since the coefficient vector is nonzero and the w-coordinates are uniform and independent of it, c1 is uniform on 𝔽q, hence nonzero with probability 1−1/q; in that case s=−c0⁢c1−1modq, and ℬ outputs the challenge logarithm. Altogether Advdlog⁢(ℬ)≥(1−1/q)⁢Advbind⁢(𝒜). □

Remark 4.24 (Compression and the cardinality trade-off).

The vector commitment is compressing: n field elements (plus the randomness) map to a single group element, exponentially shorter than the message for large n. Compression is incompatible with statistical binding for a counting reason: there are qn message vectors and only q commitment values, so colliding openings exist in overwhelming abundance. This is exactly why binding is only computational—an unbounded adversary finds a colliding opening by solving the underlying discrete-log relation—and it is the trade-off of Theorem 4.8 made visible at the level of cardinalities: a compressing commitment cannot determine its message, so it might as well hide it perfectly.

Remark 4.25 (Linearity survives).

The vector commitment remains additively homomorphic in both message and randomness, componentwise: Commit⁢(𝐦;r)+Commit⁢(𝐦′;r′)=Commit⁢(𝐦+𝐦′;r+r′), by the same regrouping as Theorem 4.20. This linearity, applied to a committed vector against public coefficient vectors, is the foundation of the inner-product arguments of §4.9, which prove statements about ⟨𝐦,𝐛⟩ for public 𝐛 while revealing only a single committed group element.

4.8 Sinsemilla: an algebraic hash-based commitment

Between the opaque hash commitment of §4.5 and the fully linear Pedersen commitment sits an intermediate species: algebraic hash functions, collision-resistant hashes whose internal operations are elliptic-curve group operations. The point of the species is proof cost. A zero-knowledge circuit that must verify a hash evaluation pays for every internal operation; when those operations are curve additions in the very field the proof system works over, the verification is cheap, while collision resistance still reduces to the discrete logarithm. Sinsemilla, deployed in Zcash Orchard, is the archetype: a Pedersen-style hash over a sequence of message chunks. We build up to it through its ancestor.

Construction 4.26 (Pedersen hash).

Split the message M into k chunks m1,…,mk, each interpreted as a scalar in a bounded range, and fix k independent generators P1,…,Pk∈𝔾 with unknown mutual discrete logarithms. Define

𝖯𝖾𝖽𝖾𝗋𝗌𝖾𝗇𝖧𝖺𝗌𝗁⁢(M):=∑j=1k[mj]⁢Pj∈𝔾.

This is the unblinded Pedersen vector commitment map used as a hash. The output is a group element; composing with a fixed encoding of group elements as bit strings yields an ordinary hash.

Proposition 4.27 (Collision resistance of the Pedersen hash).

Suppose no efficient algorithm finds a nontrivial relation ∑j[aj]⁢Pj=𝒪 with not all aj=0 and each |aj| within the allowed chunk range—hardness that follows from DLog when the Pj are independent uniform generators. Then 𝖯𝖾𝖽𝖾𝗋𝗌𝖾𝗇𝖧𝖺𝗌𝗁 is collision resistant.

Proof.

A collision M≠M′, with chunk decompositions (mj) and (mj′), gives ∑j[mj−mj′]⁢Pj=𝒪 with some coefficient mj−mj′≠0—a nontrivial relation with coefficients in the allowed range. The reduction from relation-finding to DLog is the every-generator embedding of Theorem 4.23: set each Pj=[uj]⁢G+[wj]⁢Q for the challenge Q, and read the unknown logarithm off the recovered relation. □

The Pedersen hash needs one independent generator per chunk, which is costly for long inputs: the generator table grows linearly with the maximum message length. Sinsemilla reorganises the computation into an iterated two-operand form that reuses a small fixed generator table—shared by all chunk positions—while preserving the discrete-log collision reduction.

Construction 4.28 (Sinsemilla hash).

Split the message M into pieces m1,…,mk, each of fixed width w≤32 bits, and identify a piece v∈{0,1}w with its integer value, bits read little-endian (the specification’s 𝖫𝖤𝖡𝖲𝟤𝖨𝖯). The public parameters are a base point Q∈𝔾 and a table S:{0,1}w→𝔾 assigning to each possible piece value its own generator, both obtained by hashing to the curve. Write 𝖦𝗋𝗈𝗎𝗉𝖧𝖺𝗌𝗁⁢(D,M) for the hash-to-curve pipeline of Construction 3.22 applied to the byte string M under the domain-separation tag built from the byte string D—for Pallas the RFC 9380 suite tag D∥"-pallas_XMD:BLAKE2b_SSWU_RO_" of §3.6 (protocol specification § 5.4.9.8)—and write LE32⁢(j) for the four-byte little-endian encoding of an integer 0≤j<232. The table is

S⁢(v):=𝖦𝗋𝗈𝗎𝗉𝖧𝖺𝗌𝗁⁢("z.cash:SinsemillaS",LE32⁢(v)),v∈{0,1}w,

with 2w entries shared by every instance, and the base point is personalised (§3.5) to the enclosing use—a byte string D naming it, such as a note-commitment or Merkle-hash domain—by taking that string as the message:

Q:=𝖦𝗋𝗈𝗎𝗉𝖧𝖺𝗌𝗁⁢("z.cash:SinsemillaQ",D).

Both derivations are nothing-up-my-sleeve (Construction 3.24), so no party knows any discrete-log relation among {S⁢(v)}v∪{Q} (Remark 3.25). The deployed instantiation takes w=10 (the specification’s k) over Pallas: the sinsemilla crate fixes the two personalisation strings and derives Q in HashDomain::new; the table ships precomputed as SINSEMILLA_S, and the crate’s test sinsemilla_s re-derives every entry from u32::to_le_bytes of the index—exactly LE32; the circuit loads that table as its lookup; protocol specification § 5.4.1.9. The hash iterates over the pieces with a running accumulator Acc∈𝔾:

Acc0:=Q,Accj:=Accj−1+(Accj−1+S⁢(mj))=[2]⁢Accj−1+S⁢(mj),

and outputs the point 𝖲𝗂𝗇𝗌𝖾𝗆𝗂𝗅𝗅𝖺𝖧𝖺𝗌𝗁𝖳𝗈𝖯𝗈𝗂𝗇𝗍⁢(M):=Acck. The step costs two incomplete curve additions—first Accj−1+S⁢(mj), then the result plus Accj−1; no doubling is ever performed, and the addition formula is undefined when its operands are equal or are mutual negatives (Math Guide, §“Elliptic curves”)—and this pair of additions is the operation the circuit verifies in very few constraints. Unrolling the recurrence gives the closed form

𝖲𝗂𝗇𝗌𝖾𝗆𝗂𝗅𝗅𝖺𝖧𝖺𝗌𝗁𝖳𝗈𝖯𝗈𝗂𝗇𝗍⁢(M)=∑j=1k[2k−j]⁢S⁢(mj)+[2k]⁢Q:

the integer coefficients are powers of two determined by position alone, and the message enters only through which generator S⁢(mj) each piece selects.

Proposition 4.29 (Collision resistance of Sinsemilla).

Model the table entries S⁢(v) and the base point Q as independent uniform generators (the nothing-up-my-sleeve hash-to-curve derivation covers Q as well as the table). Then any collision in 𝖲𝗂𝗇𝗌𝖾𝗆𝗂𝗅𝗅𝖺𝖧𝖺𝗌𝗁𝖳𝗈𝖯𝗈𝗂𝗇𝗍, on inputs for which its incomplete additions are defined, yields a nontrivial discrete-log relation among {S⁢(v)}v∪{Q}, and any input on which an incomplete addition is undefined yields one directly; either way a discrete logarithm follows via the every-generator embedding of Theorem 4.23 extended to Q. The point hash is thus collision resistant under the DLog assumption in 𝔾, the exceptional cases of incomplete addition covered by the same reduction rather than excluded.

Proof sketch.

Let M≠M′ collide. Suppose first that they have the same piece count k. Subtracting the unrolled forms cancels the [2k]⁢Q terms and leaves

∑j=1k[2k−j]⁢(S⁢(mj)−S⁢(mj′))=𝒪.

Regroup over the distinct table generators: for each value v∈{0,1}w, the net coefficient on S⁢(v) is

cv=∑j:mj=v2k−j−∑j:mj′=v2k−j,

and the relation reads ∑v[cv]⁢S⁢(v)=𝒪. Each cv is a difference of two subset-sums of the distinct powers 2k−1,…,20, hence an integer with |cv|<2k. For admissible message lengths—those with 2k below the group order q, a finite design-time check—such a coefficient vanishes modulo q only if it vanishes as an integer; and cv=0 forces, by uniqueness of binary expansions, the two subset-sums to be equal as sets of powers, that is, the positions carrying value v in M and in M′ to coincide. Coincidence for every v would force M=M′; since M≠M′, some cv≠0 and the relation is nontrivial.

If instead the piece counts differ, say k>k′, the Q-constants do not cancel: the relation acquires the coefficient 2k−2k′ on Q, nonzero and below the group order for admissible lengths, so the relation is again nontrivial. In either case, embedding a DLog challenge in every table generator and in Q recovers the challenge logarithm exactly as in Proposition 4.27.

Finally, the exceptional cases. An incomplete addition is undefined only when its operands are equal or are mutual negatives, so an input reaching one presents a coincidence [α]⁢Accj−1+S⁢(mj)=𝒪 with α∈{−1,1,2}. Substituting the unrolled form of Accj−1 makes this an explicit relation among Q and the table generators, with coefficient α⁢ 2j−1≠0 on Q and all magnitudes at most 2k—below the group order for admissible lengths. An input that merely triggers an exceptional case therefore hands over a nontrivial relation itself, and the same embedding extracts the challenge logarithm from it; the protocol specification proves exactly this for the deployed instantiation (§ 5.4.1.9). □

The deployed hash differs from the point hash in two ways. First, the deployed 𝖲𝗂𝗇𝗌𝖾𝗆𝗂𝗅𝗅𝖺𝖧𝖺𝗌𝗁 applies the Pallas coordinate extractor to 𝖲𝗂𝗇𝗌𝖾𝗆𝗂𝗅𝗅𝖺𝖧𝖺𝗌𝗁𝖳𝗈𝖯𝗈𝗂𝗇𝗍⁢(M), returning its x-coordinate rather than the point itself. Collision resistance survives the extraction: equal extracted x-coordinates mean the two points are equal or are negatives of one another, and either signed equality yields the same kind of nontrivial generator relation as in the proof above. Second, the final piece is zero-padded to the piece width—the Pad iterator of the sinsemilla crate pads the message bits to a multiple of the piece width before chunking—so two bit strings of different lengths within the same final piece present identical piece sequences, and the deployed hash claims collision resistance only between inputs of a fixed length for a given personalisation. This is exactly the property the protocol specification requires and no more (protocol specification § 5.4.1.9: collision resistance is demanded “between inputs of fixed length, for a given personalization input”); each personalisation domain hashes inputs of a single length, as the Merkle-tree hash 𝖬𝖾𝗋𝗄𝗅𝖾𝖢𝖱𝖧 of §10 illustrates. The variable-length argument in the proof above applies to the piece-aligned point presentation, where the piece sequence is the message.

The step from hash to commitment is the Pedersen blinding term, verbatim.

Construction 4.30 (SinsemillaCommit).

Fix one further independent generator H′, hashed to the curve with its own domain string, so that no discrete-log relation between H′ and {S⁢(v)}v∪{Q} is known. Define, for r←$𝔽q,

𝖲𝗂𝗇𝗌𝖾𝗆𝗂𝗅𝗅𝖺𝖢𝗈𝗆𝗆𝗂𝗍⁢(m;r):=𝖲𝗂𝗇𝗌𝖾𝗆𝗂𝗅𝗅𝖺𝖧𝖺𝗌𝗁𝖳𝗈𝖯𝗈𝗂𝗇𝗍⁢(m)+[r]⁢H′.

Hiding is inherited from Pedersen verbatim: by the argument of Theorem 4.17, [r]⁢H′ is uniform on 𝔾 for uniform r, so the commitment distribution is independent of m, and the scheme is perfectly hiding. Binding rests on discrete log: two valid openings to distinct messages yield either a 𝖲𝗂𝗇𝗌𝖾𝗆𝗂𝗅𝗅𝖺𝖧𝖺𝗌𝗁𝖳𝗈𝖯𝗈𝗂𝗇𝗍 collision—excluded by Proposition 4.29—or a nontrivial discrete-log relation between H′ and the hash generators.

Orchard’s note commitment 𝖭𝗈𝗍𝖾𝖢𝗈𝗆𝗆𝗂𝗍 instantiates exactly this map: the orchard crate derives it through the sinsemilla crate’s CommitDomain::commit (protocol specification § 5.4.8.4). Its key commitment 𝖢𝗈𝗆𝗆𝗂𝗍𝖨𝗏𝗄 composes the same map with x-coordinate extraction—the specification’s 𝖲𝗂𝗇𝗌𝖾𝗆𝗂𝗅𝗅𝖺𝖲𝗁𝗈𝗋𝗍𝖢𝗈𝗆𝗆𝗂𝗍—returning a base-field element rather than a point.

Remark 4.31 (Why Sinsemilla exists: cost inside a proof).

Sinsemilla’s advantage is not speed outside a circuit—ordinary hashes are faster there—but verification cost inside one. In a SNARK (§9) the prover re-expresses every computational step as polynomial constraints; a bit-oriented hash such as SHA-256, all Boolean choppings and modular additions foreign to the proof field, costs tens of thousands of constraints per evaluation, whereas Sinsemilla’s per-piece cost is a handful of curve operations chosen to lie in the very field the proof system already works over. The result is a collision-resistant hash and commitment—used for note commitments and Merkle trees in Orchard—simultaneously cheap to prove and grounded in the same discrete-log hardness as the surrounding protocol. The presentation here is the conceptual core; the Ironwood Guide takes up the concrete Orchard instantiation—its per-use personalisation strings and the in-circuit handling of incomplete addition.

4.9 Polynomial commitment schemes

The final refinement commits not to a value or a vector but to a function—a polynomial—and supports proving statements about its values. This is the primitive on which the succinct argument systems of §9 stand.

Definition 4.32 (Polynomial commitment scheme).

Fix a field 𝔽 and a degree bound d. A polynomial commitment scheme (PCS) is a tuple (Setup,Commit,Open,Eval,Verify):

  • •

    The algorithm Setup⁢(1λ,d) outputs public parameters p⁢p supporting degree at most d;

  • •

    the algorithm Commit⁢(p⁢p,f;r) outputs a commitment C to a polynomial f∈𝔽⁢[X]≤d, optionally with hiding randomness r;

  • •

    the algorithm Open⁢(p⁢p,C,f,r) outputs a bit, verifying that C commits to the whole polynomial f;

  • •

    the algorithm Eval⁢(p⁢p,f,r,z), for an evaluation point z∈𝔽, outputs a claimed value y=f⁢(z) together with an evaluation proof π;

  • •

    the algorithm Verify⁢(p⁢p,C,z,y,π) outputs a bit, checking the evaluation proof against the commitment.

Beyond the hiding and binding of the underlying commitment (Definitions 4.4 and 4.6), a PCS must satisfy evaluation binding: no PPT prover can produce a commitment C, a point z, and two accepting proofs for distinct claimed values y≠y′ at z, except with negligible probability. Stronger schemes additionally satisfy extractability (proof of knowledge): from any successful prover one can extract an actual polynomial f of degree at most d consistent with all the evaluations it gets accepted.

Remark 4.33 (Rigidity, and why evaluation binding is separate).

Why should one short commitment support probing at arbitrary points? Because polynomials are rigid: a nonzero polynomial of degree at most d has at most d roots (Math Guide, §“The Schwartz–Zippel lemma”), so two distinct polynomials of degree at most d agree on at most d points. Answering a different value at even a single point is the behaviour of a prover holding a different polynomial—there is no wiggle room between functions. But a warning is in order: an accepting evaluation proof is not an opening of C, so evaluation binding does not follow from the binding of Commit. It is a separate cryptographic requirement, and each construction below proves it from its own assumption—a strong Diffie–Hellman assumption for KZG, discrete log via a folding extractor for the inner-product scheme. The central design problem of a PCS is making the evaluation proof π short and fast to verify; committing to the coefficient list with any old commitment is easy, and useless.

KZG: evaluation in the exponent

The pairing-based scheme of Kate, Zaverucha, and Goldberg achieves constant-size proofs by hiding a secret evaluation point inside the parameters.

Construction 4.34 (KZG commitment).

Let 𝔾1,𝔾2,𝔾T be groups of prime order |𝔽| equipped with a nondegenerate bilinear pairing e:𝔾1×𝔾2→𝔾T (Example 2.9), with generators G∈𝔾1 and G^∈𝔾2. The algorithm Setup samples a secret τ←$𝔽, publishes the structured reference string

p⁢p=([τ0]⁢G,[τ1]⁢G,…,[τd]⁢G,G^,[τ]⁢G^),

and discards τ. The commitment to f=∑i=0dai⁢Xi is evaluation in the exponent:

Commit⁢(p⁢p,f):=∑i=0d[ai]⁢([τi]⁢G)=[f⁢(τ)]⁢G,

computable from p⁢p by anyone, without knowledge of τ.

Construction 4.35 (KZG evaluation proof).

To prove f⁢(z)=y, the prover uses the factor theorem: z is a root of f⁢(X)−y, so the quotient

q⁢(X):=f⁢(X)−yX−z∈𝔽⁢[X]≤d−1

is a genuine polynomial precisely because f⁢(z)−y=0. The proof is the commitment to the quotient, π:=[q⁢(τ)]⁢G, computed from the reference string. The verifier checks the single pairing equation

e⁢(C−[y]⁢G,G^)=?e⁢(π,[τ]⁢G^−[z]⁢G^),

which, by bilinearity, is exactly the in-the-exponent form of the polynomial identity f⁢(τ)−y=q⁢(τ)⁢(τ−z).

Proposition 4.36 (KZG evaluation binding, sketched).

Evaluation binding of KZG rests on the d-strong Diffie–Hellman assumption in the bilinear group: given the powers [τi]⁢G, it is infeasible to produce [(τ−z)−1]⁢G for any z of one’s choosing.

Proof idea.

Two accepting proofs π,π′ for distinct values y≠y′ at the same point z satisfy the two pairing equations; subtracting them (in the exponent) gives π−π′=[(y′−y)⁢(τ−z)−1]⁢G, so the forger’s output yields

[(τ−z)−1]⁢G=[(y′−y)−1]⁢(π−π′),

exactly the element the assumption declares infeasible. □

Remark 4.37 (The KZG trade).

What KZG buys: commitments and evaluation proofs of constant size (one group element each) and constant verification time (two pairings), all independent of the degree d. What it costs is twofold. First, the setup is trusted in the strongest sense: the secret τ is a global trapdoor. Anyone who learns τ can forge accepting evaluation proofs for false statements—for any commitment C, any point z, and any desired value y, the element π:=[(τ−z)−1]⁢(C−[y]⁢G) passes the pairing check, no knowledge of any polynomial required. This is the promised demonstration that a subverted setup silently destroys binding (Remark 4.3); evaluation binding survives only if τ is provably destroyed, in practice by a multi-party powers-of-tau ceremony whose trapdoor stays secret as long as at least one participant is honest. Second, the construction requires pairing-friendly curves, a more delicate and less efficient setting than the ordinary curves of §2.6. Binding is computational either way, resting on the bilinear assumption—consistent with Theorem 4.8.

The inner-product alternative

The transparent alternative commits to the coefficient vector with the Pedersen vector commitment and replaces the pairing check by a recursive argument.

Construction 4.38 (IPA-style polynomial commitment).

Let 𝐆=(G0,…,Gd) and H be transparent generators with unknown mutual discrete logs, derived from a public seed (Construction 4.22). Commit to f=∑i=0dai⁢Xi by the Pedersen vector commitment of its coefficient vector 𝐚=(a0,…,ad):

Commit⁢(p⁢p,f;r):=∑i=0d[ai]⁢Gi+[r]⁢H=⟨𝐚,𝐆⟩+[r]⁢H.

No pairings, no trusted setup.

Evaluation is an inner product: writing 𝐳=(1,z,z2,…,zd) for the public vector of powers of the query point,

f⁢(z)=∑i=0dai⁢zi=⟨𝐚,𝐳⟩,

so proving an evaluation reduces to proving an inner-product relation about a committed vector against a public vector. The inner-product argument (IPA) proves it recursively: each round folds the two halves of the coefficient vector—and of the generator vector—into vectors of half the dimension by taking a random linear combination dictated by a verifier challenge, sending two group elements per round (the cross-term commitments Lj and Rj) to account for the mixed terms; after log2⁡(d+1) rounds a single scalar remains, and the verifier checks one final equation tying it to the folded commitment and the folded generators.

Proposition 4.39 (Properties of the IPA-based PCS).

The inner-product polynomial commitment has: transparent setup (public-coin parameters, no trapdoor); evaluation proofs of O⁢(log⁡d) group elements; and O⁢(d)-group-operation verification, batchable across proofs. Its binding and evaluation binding reduce to the discrete logarithm assumption in 𝔾.

Proof idea.

Binding of the commitment itself is Theorem 4.23. For evaluation binding and extractability, one shows the folding protocol is tree special-sound: from a suitable tree of accepting transcripts, branching over the verifier’s challenge at each round, an extractor works back up the recursion and computes a coefficient vector 𝐚 consistent with the commitment and the claimed inner product—a notion this sketch uses only informally and §9 defines precisely. Two distinct extracted openings of the same commitment would yield a nontrivial discrete-log relation among 𝐆,H, contradicting DLog by the every-generator embedding. The O⁢(log⁡d) proof size is the halving recursion; the O⁢(d) verification is the final multiscalar multiplication over the unfolded generators. □

Remark 4.40 (KZG versus IPA, and the Halo lineage).

The two families mark out the design space. KZG gives constant proof size and constant verification, at the price of a structured trusted setup and pairing-friendly curves; the IPA gives transparent setup over a plain curve and rests on nothing beyond discrete log, at the price of logarithmic proofs and linear-time verification. The Halo 2 proof system deployed in Zcash Orchard builds on the inner-product family precisely to avoid trusted setup, and recovers practical verification cost through batching: the deployed verifier folds the final multiscalar multiplications of many proofs into one shared multiexponentiation—each proof’s deferred check is scaled by a fresh random factor and accumulated, and a single combined check is evaluated once. Batching amortises the per-proof group operations across a batch, though per-proof verifier work remains linear in d. The Halo lineage’s accumulation technique extends the same deferral across recursively composed proofs, one proof attesting to another’s deferred check—the capability the Pasta cycle of Remark 2.26 was designed to serve—but deployed Zcash does not use recursion: each Orchard proof is verified (in batch) directly.

Remark 4.41 (Hiding variants).

As stated, the KZG commitment is binding but not hiding: it is a deterministic function of f, so committing twice to the same polynomial is visible, and a low-entropy polynomial can be found by search—the failure of Remark 4.14 in new clothing. That is acceptable when the polynomial encodes only public data. Whenever it encodes secrets—as the witness polynomials of a zero-knowledge proof do—randomness is required: KZG is augmented with a blinding summand [r]⁢[γ]⁢G using an extra setup element [γ]⁢G, while the IPA commitment of Construction 4.38 already carries its [r]⁢H and is perfectly hiding by Theorem 4.23. The resulting regime is the perfect-hiding/computational-binding profile of Pedersen (Theorems 4.17 and 4.18), lifted from field elements to polynomials.

From commitments to arguments

The polynomial commitment is where the section’s main line hands over to the proof systems of §9, and the hand-over can be stated in one paragraph. A polynomial commitment scheme turns an information-theoretic proof object—a polynomial identity holding over a large field—into a succinct cryptographic argument. The prover commits to its witness polynomials; the verifier challenges at random points; evaluation proofs then convince the verifier that the committed polynomials satisfy the required identities, without the polynomials ever being revealed. Soundness is supplied by Schwartz–Zippel (Math Guide, §“The Schwartz–Zippel lemma”): a nonzero polynomial of low degree is almost surely nonzero at a random point, so an identity that holds at the challenge almost surely holds identically. Binding and succinctness are supplied by the commitment: the prover is locked to its polynomials before seeing the challenge, and the verifier handles only short commitments and proofs in place of the polynomials themselves. How this compilation is carried out in full—and what “argument of knowledge” precisely means—is the business of §9, whose SNARK compilation subsection develops the evaluation-argument role sketched here.

4.10 Secret sharing

The section opened by naming verifiable secret sharing among the classical applications of commitments; it closes by constructing it, because the threshold signatures of the FROST Guide stand on it and nothing below that volume otherwise provides it. The setting is a prime field 𝔽q—in the sequel the scalar field of the group 𝔾 of §4.6—and the tool is Lagrange interpolation (Math Guide, §“Lagrange interpolation”): a polynomial of degree at most t−1 over 𝔽q is determined by its values at any t distinct points, and any t prescribed values at distinct points are attained by exactly one such polynomial.

Construction 4.42 (Shamir t-of-n secret sharing).

Fix a threshold t and a party count n with 1≤t≤n<q. To share a secret s∈𝔽q, the dealer samples coefficients a1,…,at−1←$𝔽q independently and uniformly and forms

f⁢(X):=s+a1⁢X+a2⁢X2+⋯+at−1⁢Xt−1∈𝔽q⁢[X],f⁢(0)=s,

a polynomial of degree at most t−1 with constant term the secret. Party i∈{1,…,n} receives the share si:=f⁢(i), sent privately; the identifiers 1,…,n are distinct nonzero elements of 𝔽q because n<q. Reconstruction from the shares of any set I of t parties is interpolation at 0:

s=f⁢(0)=∑i∈IλI,i⁢si,λI,i:=∏j∈I,j≠ijj−i,

where λI,i=ℓi⁢(0) is the Lagrange basis polynomial for the nodes I evaluated at 0, computable from the identifiers alone.

Correctness of reconstruction is the interpolation theorem: the t points (i,si)i∈I determine a unique polynomial of degree at most t−1, which is f, and the Lagrange formula f⁢(X)=∑i∈Isi⁢ℓi⁢(X) evaluated at X=0 gives the displayed sum. The coalition may be chosen after the shares are dealt, since the weights depend only on I.

Theorem 4.43 (Perfect secrecy below the threshold).

Let I be any set of at most t−1 identifiers. For every secret s∈𝔽q, the shares (si)i∈I of Construction 4.42 are jointly uniform on 𝔽q|I|. In particular their distribution does not depend on s: fewer than t shares are independent of the secret, and an adversary of unbounded power holding them has advantage exactly 0 at telling any two candidate secrets apart.

Proof.

It suffices to treat |I|=t−1, since fewer shares are a projection of these. Fix s and I, and consider the map

Σs:𝔽qt−1→𝔽qt−1,(a1,…,at−1)↦(f⁢(i))i∈I,

from the dealer’s coefficient vector to the coalition’s shares. It is injective: two coefficient vectors with the same shares give two polynomials of degree at most t−1 that agree at the t distinct points 0 (where both equal s) and I, hence are equal by uniqueness of interpolation, so the coefficient vectors coincide. It is surjective: for any target (yi)i∈I, Lagrange interpolation through the t points (0,s) and (i,yi)i∈I produces a polynomial of degree at most t−1 with constant term s, whose remaining coefficients are a preimage. So Σs is a bijection—for every s—and it carries the uniform distribution on coefficient vectors to the uniform distribution on 𝔽qt−1. The share vector is therefore uniform whatever the secret, and for any s0≠s1 the two share distributions coincide exactly; by the variational characterisation of statistical distance (Proposition 1.7) no procedure, efficient or not, distinguishes them. □

The theorem is the perfect-hiding half of a commitment (Proposition 4.5 in different clothing): the coalition’s view is a uniformly random point of 𝔽qt−1, consistent with every candidate secret through exactly one polynomial each. What Shamir sharing lacks is the binding half. Nothing stops a dishonest dealer from handing out values that lie on no common polynomial of degree at most t−1, so that different coalitions of t parties reconstruct different “secrets”—and a party receiving a share cannot tell. Verifiable secret sharing repairs this by having the dealer commit to the polynomial.

Construction 4.44 (Feldman verifiable secret sharing).

Let (𝔾,q,G) be as in §4.6, so that 𝔽q is the scalar field of 𝔾. The dealer shares s as in Construction 4.42, with f⁢(X)=∑k=0t−1ak⁢Xk and a0=s, and additionally broadcasts the coefficient commitments

Φk:=[ak]⁢G∈𝔾,k=0,…,t−1,

the coefficients in the exponent. Party i, on receiving its private share si, accepts it iff

[si]⁢G=?∑k=0t−1[ik]⁢Φk.

An honest share passes: since a↦[a]⁢G is a homomorphism 𝔽q→𝔾, ∑k[ik]⁢Φk=∑k[ak⁢ik]⁢G=[f⁢(i)]⁢G.

Proposition 4.45 (What the Feldman check certifies).

Because G generates the prime-order group 𝔾, the map a↦[a]⁢G is a bijection 𝔽q→𝔾, so the broadcast vector (Φ0,…,Φt−1)—however the dealer chose it—determines a unique polynomial f∗⁢(X):=∑kak∗⁢Xk with ak∗=logG⁡Φk, of degree at most t−1. Party i’s check passes iff si=f∗⁢(i). Consequently every coalition of t parties holding accepted shares reconstructs the same polynomial f∗ and the same secret s∗=f∗⁢(0)=logG⁡Φ0, and a party handed an inconsistent share detects it alone and with certainty. The check certifies nothing about the value of s∗, which the dealer chooses freely.

Proof.

Both claims are injectivity of a↦[a]⁢G. The right-hand side of the check equals [f∗⁢(i)]⁢G by the homomorphism, so the equation [si]⁢G=[f∗⁢(i)]⁢G holds iff si=f∗⁢(i). Accepted shares are thus evaluations of the one polynomial f∗, and t of them interpolate to it by uniqueness. □

In the language of this section, the vector (Φk)k is a perfectly binding commitment to the polynomial f—the coefficient list committed entry by entry under the bijection a↦[a]⁢G—and the share check is an evaluation check against it, verifiable by anyone because it is linear in the coefficients. Perfect binding costs hiding, as Theorem 4.8 demands.

Remark 4.46 (The leak, and where it is harmless).

Feldman sharing publishes Φ0=[s]⁢G. Secrecy below the threshold is no longer perfect: from the broadcast alone an unbounded adversary computes s=logG⁡Φ0. For an efficient coalition of t−1 parties the leak is exactly [s]⁢G and nothing more: its entire view—shares and broadcast—is computable from [s]⁢G and t−1 uniformly random field elements, because the shares are uniform by Theorem 4.43 and the Φk are then determined by interpolating in the exponent through (0,[s]⁢G) and the points (i,[si]⁢G). Recovering s from that view is the discrete-logarithm problem (Definition 2.2). The leak is acceptable exactly when s is itself a discrete-logarithm secret key whose public key [s]⁢G is published anyway; then Φ0 is the public key and nothing new escapes. When the secret must stay perfectly hidden, Pedersen verifiable secret sharing replaces each Φk by the Pedersen commitment [ak]⁢G+[bk]⁢H of Construction 4.16, restoring perfect hiding at the price of computational binding—off this volume’s path and not constructed here. Threshold signing is the consumer: in the FROST Guide each signer holds a Shamir share of a signing key, the coefficient commitments broadcast during key generation are Feldman’s, and the Lagrange weights λI,i recombine per-signer contributions into a single signature.