KZG is a polynomial commitment scheme whose distinguishing features are its constant-sized commitments, proofs, and its constant-time verification.

It operates on subgroups of elliptic curves over finite fields , , and of prime order ( depends on the chosen security level ), for which a pairing exists. From now on, we adopt the convenient notation for elliptic curve multiplication: and .

As a commitment scheme, it is a tuple of deterministic polynomial-time algorithms commit, proveEval and verifyEval such that

  1. Commit, on input a polynomial, returns a commitment:

  2. ProveEval outputs a proof that evaluates to in :

  3. VerifyEval, on input a proof, outputs true if the given proof testifies that the committed polynomial evaluates to in (using the pairing ):

The crux of KZG is that if has as root, then the quotient is well-defined. This comes from the euclidean division of by : , and . Moreover, it is impractical to forge false proofs: this requires to find a polynomial which has the same commitment as , i.e. , which either requires the knowledge of or to try to make the difference zero in as most places as possible in the hope to cover . In the latter case, this is highly unlikely, as the probability to find a zero is already

thanks to the Schwartz-Zippel lemma in the univariate case. In typical use cases, the largest degree can be and the cardinal of the scalar field so the probability to find a zero is .

See batched KZG proofs for efficient ways to compute and verify KZG proofs.


Security Proofs

Correctness

By bilinearity of (we only rely on the property ):

Hiding

Suppose that there exists an adversary breaking the hiding property of a commitment : it can compute the underlying polynomial of degree given the commitment to and valid witnesses . By reduction, it is possible to construct an algorithm from that breaks the discrete logarithm assumption. The algorithm has to solve the following discrete log instance . It first computes a trusted setup from a random : . then chooses random scalars and computes

which is the commitment to , namely . then chooses arbitrary points , and computes valid witnesses for the chosen evaluations . It then inputs , the commitment to , and the valid witness tuples to . Once outputs , outputs the constant term of , which is the solution to the given discrete logarithm instance.

Polynomial binding property

By reduction to the discrete logarithm problem, suppose that an adversary breaks the polynomial binding property by outputting two distinct polynomials and such that their commitments are equal, ie. . This implies which is slightly weaker as it requires , but since the evaluations live in for which , necessarily. Hence, the polynomial has as root, which can be found with polynomial factorization algorithms over finite fields, such as Berlekamp in (as its runtime is dominated by a Gaussian elimination).

Evaluation binding property

By reduction to the -SDH assumption, suppose that an adversary can break the evaluation binding property, i.e., can output a commitment to , and two different valid witness tuples and . An algorithm inputs a trusted setup to , which returns a commitment to some polynomial for which the witness tuples , are valid openings ( returns for them). By the correctness of the scheme,

From which we get: Thus With a bit of algebra, Thus computes

and returns a solution to the -SDH instance .