Polynomial commitment schemes

\gdef\F{\mathbb{F}} \gdef\G{\mathbb{G}} \gdef\g{\mathrm{G}} \gdef\h{\mathtt{H}} \gdef\e{\mathrm{e}}

I will discuss polynomial commitment schemes for n-term polynomials, so polynomials of degree at most n-1.

A polynomial commitment scheme for n-term polynomials two scheme has two operations. Given f ∈ \F_{<n}[X] the operation \mathrm{commit}(f) produces a commitment c to f. Given commitments c_i and evaluation points (x_{i,j}, y_{i,j}) the \mathrm{open} operation proofs that f_i(x_{i,j}) = y_{i,j}.

KZG

Let \G_1, \G_2, \G_3 be elliptic curve groups with the same scalar field \F, generators \g_1, \g_2, \g_3 and a pairing \e: \G_1 × \G_2 → \G_3. For more background see here

Kate-Zaverucha-Goldberg

https://cacr.uwaterloo.ca/techreports/2010/cacr2010-10.pdf

https://eprint.iacr.org/2020/081.pdf

https://eprint.iacr.org/2020/1536.pdf

Trusted set up

During the trusted setup ceremony a secret value τ ∈ \F is selected and the following "powers of tau" are computed for i ∈ [0,n)

\vec X = \begin{bmatrix} τ^0 & τ^1 & τ^2 & ⋯​ \end{bmatrix} ⋅ \g_2

These values X_i are known as the common reference string (CRS). These can get quite large, for n = 2^{20}.

The CRS is update able. Given a new secret value s ∈ \F the updated values are X_i' = s^i ⋅ X_i.

Note. The X_i act as a monomial basis for polynomials which is convenient if the polynomial we want to commit to is in coefficient form. Often, we instead have the the polynomial in point form (x_i, y_i). We can then construct a basis of Langrange functions over the x_i's:

X_i' = todo

To commit to a polynomial P(X) we compute P = P(τ) ⋅ \g_2 using the basis.

One commitment, one value

To proof P(x) = y we compute following is polynomial

Q(X) = \frac{P(X) - y}{X - x}

The proof is Q = Q(τ) ⋅ \g_2.

To verify, compute Z = (τ - x) ⋅ \g_2 and R = y ⋅ \g_2

\e(P - R, \g_2) = \e(Q, Z)

\begin{aligned} \e(P - R, \g_2) &= \e(Q, Z) \\ \e(P(τ) ⋅ \g_2 - y ⋅ \g_2, \g_2) &= \e(Q(τ) ⋅ \g_2, (τ - x) ⋅ \g_2) \\ (P(τ) - y) ⋅ \e(\g_2, \g_2) &= Q(τ) ⋅ (τ - x) ⋅ \e(\g_2, \g_2) \\ P(τ) - y &= Q(τ) ⋅ (τ - x) \\ \end{aligned}

Then due to the Schwarz-Sippl lemma it is cryptographically likely that P(X) - y = Q(X) ⋅ (X - x).

Many commitments, many values

Given many commitments P_i as above, for each we want to proof a set of values P_i(x_{ij}) = y_{ij}. Define S_i = \set{x_{ij}}, S = \Union S_i.

Zero polynomials

Z_{\mathcal S}(X) = \prod_{s ∈ S} \p{X - s}

Lagrange polynomials

L_{ij}(X) = \frac{Z_{S_i \setminus \set{x_j}}(X)}{Z_{S_i \setminus \set{x_j}}(x_j)}

Interpolating polynomials

R_i(X) = \sum_j y_{ij} ⋅ L_{ij}(X)

The verifiers sends a random u ∈ \F.

The prover computes

Q(X) = \sum_i u^i ⋅\frac{P_i(X) - R_i(X)}{Z_{S_i}(X)}

The prover sends Q(τ) ⋅ \G_2 The verifier checks

\sum_i \e(u^i ⋅ (P_i - R_i), Z_{S \setminus S_i}(τ) ⋅ \g_2) = \e(Q, Z_S(τ) ⋅ \g_2)

Variant

\bar S_i = S \setminus S_i

The verifiers sends a random u ∈ \F.

Prover computers

P(X) = \frac{1}{Z_{S}(X)} ⋅ \sum_i u^i ⋅ (P_i(X) - R_i(X)) ⋅ Z_{\bar S_i}(X)

this equals

P(X) = \sum_i u^i ⋅ \frac{P_i(X) - R_i(X)}{Z_{S_i}(X)}

The prover sends P(τ) ⋅ \G_2. The verifier sends random z ∈ \F.

L(X) = \sum_i u^i ⋅ (P_i(X) - R_i(z)) ⋅ Z_{\bar S_i}(z) - Z_S(z) ⋅ P(X)

and

W(X) = \frac{L(X)}{Z_{\set z}(X)}

W(X) = \frac{Z_S(z)}{Z_{\set z}(X)} ⋅\p{ \sum_i u^i ⋅ \frac{P_i(X) - R_i(z)}{Z_{S_i}(z)} - P(X) }

W(X) = \frac{Z_S(z)}{Z_{\set z}(X)} ⋅ \sum_i u^i ⋅ \p{ \frac{P_i(X) - R_i(z)}{Z_{S_i}(z)} - \frac{P_i(X) - R_i(X)}{Z_{S_i}(X)} }

and sends W(τ) ⋅ \G_2.

The verifier computes

F = \sum_i u^i ⋅ Z_{\bar S_i}(z) ⋅ \p{P_i - r_i(z) ⋅ \G_2} - Z_S(z) ⋅ W

and checks

\e\p{F + z ⋅ W, \G_2} = \e\p{W, τ ⋅ \G_2}

$$ \begin{aligned} \e\p{F + z ⋅ W, \G_2} &= \e\p{W, τ ⋅ \G_2} \ \sum_i u^i ⋅ Z_{\bar S_i}(z) ⋅ \p{P_i(τ) - r_i(z)} - Z_S(z) ⋅ W(τ)

FRI

Let \h_{\mathcal S} : \mathcal I → \mathcal S be a hash function mapping some input set \mathcal I to the output set \mathcal S. A superscript like \h' is used to indicate two domain separated hash functions.

Inner product arguments

https://vitalik.ca/general/2021/11/05/halo.html

Halo turns the inner product argument from Bulletproofs into a polynomial commitment scheme.

Basically if we can commit to a vector \vec p and proof y = \inprod{\vec p}{\vec x} where \vec x = \begin{bmatrix} 1, x, x^2, \dots \end{bmatrix}.

Set up

Given elliptic curve group \G with scalar field \F. Generate a common reference string of G_i, H ∈ \G random elements.

Commit

Given a polynomial P(X) = \sum_i c_i ⋅ X^i, generate a random blinding factor r ∈ \F. The commitment is

r ⋅ H + \sum_i c_i ⋅ G_i

Proof

To proof that P(x) = v:

The verifier sends a random U ∈ \G. Start with

\begin{aligned} \vec a &= \begin{bmatrix} c_0, c_1, c_2, \dots \end{bmatrix} & \vec b &= \begin{bmatrix} 1, x, x^2, \dots \end{bmatrix} & \vec G &= \begin{bmatrix} G_0, G_1, G_2, \dots \end{bmatrix} \end{aligned}

The prover sends L, R as

\begin{aligned} L &= \inprod{\vec a_{\mathrm{lo}}}{\vec G_{\mathrm{hi}}} + l ⋅ H + \inprod{\vec a_{\mathrm{lo}}}{ \vec b_{\mathrm{hi}}} ⋅ U \\ R &= \inprod{\vec a_{\mathrm{hi}}}{\vec G_{\mathrm{lo}}} + r ⋅ H + \inprod{\vec a_{\mathrm{hi}}}{ \vec b_{\mathrm{lo}}} ⋅ U \\ \end{aligned}

The verifier issues a random u ∈ \F. The prover computes

\begin{aligned} \vec a' &= \vec a_{\mathrm{hi}} ⋅ u^{-1} + \vec a_{\mathrm{lo}} ⋅ u \\ \vec b' &= \vec b_{\mathrm{hi}} ⋅ u^{-1} + \vec b_{\mathrm{lo}} ⋅ u \\ \vec G' &= \vec G_{\mathrm{hi}} ⋅ u^{-1} + \vec G_{\mathrm{lo}} ⋅ u \\ \end{aligned}

TODO: Halo paper has hi, lo reversed for b, G.

Repeat until \vec a, \vec b and \vec G are a single element. The prover sends these over and the verifier computes

Q = \sum_i u_i^2 ⋅L_i + P' + \sum_i u_i^{-2} ⋅ R_i

and

r' = \sum_i u_i^2 ⋅ l_i + P' + \sum_i u_i^{-2} ⋅ r_i

and checks

Q = a ⋅ G + r' ⋅ H + a ⋅ b ⋅ U

https://zcash.github.io/halo2/background/pc-ipa.html

https://zcash.github.io/halo2/design/proving-system/inner-product.html

https://eprint.iacr.org/2017/1066.pdf

https://eprint.iacr.org/2017/1132.pdf

https://eprint.iacr.org/2019/953.pdf

https://eprint.iacr.org/2019/1021.pdf

Aurora https://eprint.iacr.org/2018/828.pdf Section 8

Other schemes

References

https://vitalik.ca/general/2017/01/14/exploring_ecp.html

https://dankradfeist.de/ethereum/2020/06/16/kate-polynomial-commitments.html

https://alinush.github.io/2020/05/06/kzg-polynomial-commitments.html#fn:KZG10e

https://arnaucube.com/blog/kzg-commitments.html

https://arnaucube.com/blog/kzg-batch-proof.html

https://people.cs.georgetown.edu/jthaler/ProofsArgsAndZK.pdf

https://eprint.iacr.org/2017/1132.pdf

https://eprint.iacr.org/2019/953.pdf

https://zcash.github.io/halo2/concepts/chips.html

Remco Bloemen
Math & Engineering
https://2π.com