# KZG KZG is based on paring-based cryptography. - $\mathsf{Setup}(1^λ, 1^d)$ (One-time trusted setup, where $d$ is the upper bound of the polynomial degree): -- Sample a random field element $s\gets\mathbb{F}_p$ -- return $ck=([s^0]_1, ... [s^d]_1,[1]_2,[s]_2)$ - $\mathsf{Commit}(ck,f)$ (Commit to polynomial): -- $\mathsf{com}=\sum_{i=0}^d f_i\cdot[s^i]_1$ -- return $\mathsf{com}$ - $\mathsf{Open}(ck,f,x,y)$ (Given an evaluation $y=f(x)$, provide a proof that verifies this evaluation): -- $q(X)=\frac{f(X)-y}{X-x}$ -- $\pi= \sum_{i=0}^d q_i\cdot [s^i]_1$ -- return $\pi$ - $\mathsf{Verify}(ck,\mathsf{com},\pi,x,y)$ (Verify an evaluation proof): -- return $e(\mathsf{com} − [y]_1, [1]_2) = e(π, [s]_2 − [x]_2)$ **Advantage**: - Constant-size proofs, irrespective of the polynomials degree - Efficient verification (Bilinearity of pairing operations), suitable for scalable applications such as zk-rollups. **Limitation**: - Require a trusted setup ## Multiproofs We can evaluation a polynomial at multiple points by altering the following algorithms. - $\mathsf{Open}(ck,f,(x_0,y_0),...(x_{k-1},y_{k-1}))$: -- Compute the Lagrange interpolation polynomial $I(X)$ using points $(x_0,y_0),...(x_{k-1},y_{k-1})$ -- $Z(X)=(X-x_0)(X-x_1)\cdots (X-x_{k-1})$ -- $q(X)=\frac{f(X)-I(X)}{Z(X)}$ -- $\pi= \sum_{i=0}^d q_i\cdot [s^i]_1$ -- return $\pi$ - $\mathsf{Verify}(ck,\mathsf{com},\pi,(x_0,y_0),...(x_{k-1},y_{k-1}))$ (Verify an evaluation proof): -- Compute the Lagrange interpolation polynomial $I(X)$ using points $(x_0,y_0),...(x_{k-1},y_{k-1})$ -- $Z(X)=(X-x_0)(X-x_1)\cdots (X-x_{k-1})$ -- return $e(\mathsf{com} − [I(s)]_1, [1]_2) = e(π, [Z(s)]_2)$