Polynomial commitment scheme

Polynomial commitment schemes are protocols between the prover and the verifier. In this protocol, commits to a polynomial without revealing any information about to . We say a PCS is binding because the prover can't change the polynomial once he has commited to it (otherwise would notice). A commitment is also hiding because it doesn't reveal unintended information about to .

A normal exchange between and would include three operations called , and . Suppose and want to have an interaction over some polynomial :

  • [T] := commit(t): the prover computes , the commitment of , and sends it to . From now on, can't change or lie about values without noticing. We'll see why this is useful later. At the moment, you can see as a big number with special properties.
  • proof, t_z := open(t, z): the verifier still doesn't know anything about , but he wants to know for a particular . So the prover computes and a proof to convince .
  • verify(proof, t_z, [T]): using the commitment and the proof, verifies that . The verifier can keep asking the prover to "reveal" the value of at many points, and can't lie about them, can always verify that they come from the same polynomial .

Batch commitments

Usually we want to commit several polynomials, and open them up all at the same point. Most polynomial commitment schemes can be adapted to batch commit and batch open the polynomials, taking advantage of this fact to increase performance.

Example:

  • [T] := batch_commit(t1, t2, ..., tn)}
  • proof, t1_z, t2_z, ..., tn_z := batch_open(t1, t2, ..., tn, z)
  • batch_verify(proof, t1_z, t2_z, ..., tn_z)

Trusted setup

Some polynomial commitment schemes require a trusted setup. This is a ceremony that generate keys for the prover and the verifier. These keys are needed for the PCS to work. Generally, a trusted third party creates some secret and generates from . Then MUST be thrown away, is called the toxic waste. Having access to the toxic waste would make the protocol insecure.

We have only seen PCS at an abstract level. That's all we need to understand how ZK proofs work. You can later on read about specific schemes suchs as KZG or FRI. Next we'll see how arithmetization and PCSs are used together to generate a ZK proof.