A simple Polynomial Commitment scheme.

Construction

The public parameters are for a random ( enables you to break the binding property, so it must be safely discarded) and . A commitment to the polynomial of degree is Which can be efficiently computed as using the coefficients of .

Hiding property

To make KZG hiding, one can use for some other random group element , though protocols may have other (more efficient) means of hiding . In the remainder of this article, we do not consider the hiding property, but note that what we write here should be applicable to the hiding version, too.

Lagrange basis

Instead of , people often use the Lagrange basis for better performance, where and for . Similarly to above, one can write any polynomial as a linear combination of the (via Lagrange interpolation), so computing using can be done as .

Someone please sanity-check this.

For example: is the right basis to use for Lagrange or should it be some roots-of-unity thing?

Operations and checks

Factor opening

To prove that public is a factor of committed (i.e. ), the prover sends and the verifier checks (which is equivalent to checking that , but the pairing is used because the verifier cannot compute , not knowing ).

Point opening

To prove that for a committed polynomial , one shows that is a factor of (which then implies that , i.e. ). See Evaluation test via factor test.