Introduction
Aztec uses to prove the proof of circuit satisfiability . In Sumcheck, a multilinear polynomial is used. Therefore, it is necessary to efficiently commit to and open this multilinear polynomial. Additionally, since Aztec is a privacy-focused Layer 2, an efficient way to achieve zero-knowledge (ZK) is also required. To address this, Aztec introduces a method called Zeromorph, which is currently implemented in .
Background
KZG
K Z G . S e t u p ( 1 λ , N m a x ) → ( [ 1 ] 1 , [ s ] 1 , … , [ s N m a x ] 1 , [ 1 ] 2 , [ s ] 2 ) \mathsf{KZG.Setup}(1^\lambda, N_{\mathsf{max}}) \rightarrow ([1]_1, [s]_1, \dots, [s^{N_{\mathsf{max}}}]_1, [1]_2, [s]_2) KZG.Setup ( 1 λ , N max ) → ([ 1 ] 1 , [ s ] 1 , … , [ s N max ] 1 , [ 1 ] 2 , [ s ] 2 )
K Z G . C o m m i t ( f ∈ F [ X ] N m a x ) → C = [ f ( s ) ] 1 \mathsf{KZG.Commit}(f \in F[X]^{N_{\mathsf{max}}}) \rightarrow C = [f(s)]_1 KZG.Commit ( f ∈ F [ X ] N max ) → C = [ f ( s ) ] 1
K Z G . P r o v e E v a l ( f , z , v ) → W = [ f ( s ) − v s − z ] 1 \mathsf{KZG.ProveEval}(f, z, v) \rightarrow W = \left[\frac{f(s) - v}{s - z}\right]_1 KZG.ProveEval ( f , z , v ) → W = [ s − z f ( s ) − v ] 1
K Z G . V e r i f y E v a l ( C , W , z , v ) → b ∈ { 0 , 1 } \mathsf{KZG.VerifyEval}(C, W, z, v) \rightarrow b \in \{0, 1\} KZG.VerifyEval ( C , W , z , v ) → b ∈ { 0 , 1 } :
The verifier checks the following equation:
e ( C − [ v ] 1 , [ 1 ] 2 ) = ? e ( W , [ s ] 2 − [ z ] 2 ) e(C - [v]_1, [1]_2) \stackrel{?}=e(W, [s]_2 - [z]_2) e ( C − [ v ] 1 , [ 1 ] 2 ) = ? e ( W , [ s ] 2 − [ z ] 2 ) Here, the verifier learns the information ( C , W , v ) (C, W, v) ( C , W , v ) , which presents two issues:
Since KZG is a computationally hiding commitment , if quantum computing becomes feasible, revealing ( C , W ) (C, W) ( C , W ) may no longer satisfy the ZK property.
While it proves circuit satisfiability , it also reveals information of the polynomial with P ( z ) = v P(z) = v P ( z ) = v .
Hiding KZG
Instead of the naive KZG scheme outlined above, Zeromorph uses a more secure variant named "Hiding KZG."
H i d i n g K Z G . S e t u p ( 1 λ , N m a x ) → ( [ 1 ] 1 , [ s ] 1 , … , [ s N m a x ] 1 , [ ξ ] 1 , [ 1 ] 2 , [ s ] 2 , [ ξ ] 2 ) \mathsf{HidingKZG.Setup}(1^\lambda, N_{\mathsf{max}}) \rightarrow ([1]_1, [s]_1, \dots, [s^{N{\mathsf{max}}}]_1, [\xi]_1, [1]_2, [s]_2, [\xi]_2) HidingKZG.Setup ( 1 λ , N max ) → ([ 1 ] 1 , [ s ] 1 , … , [ s N max ] 1 , [ ξ ] 1 , [ 1 ] 2 , [ s ] 2 , [ ξ ] 2 ) H i d i n g K Z G . C o m m i t ( f ∈ F [ X ] < N m a x ) → ( C , r ) \mathsf{HidingKZG.Commit}(f \in \mathsf{F}[X]^{<N_{\mathsf{max}}}) \rightarrow (C, r) HidingKZG.Commit ( f ∈ F [ X ] < N max ) → ( C , r ) :
The prover samples r ← F r \leftarrow \mathbb{F} r ← F .
The prover constructs C = [ f ( s ) ] 1 + r ⋅ [ ξ ] 1 C = [f(s)]_1 + r \cdot [\xi]_1 C = [ f ( s ) ] 1 + r ⋅ [ ξ ] 1 .
The prover can send only C C C to the verifier.
H i d i n g K Z G . O p e n ( C , f , r ) → b ∈ { 0 , 1 } \mathsf{HidingKZG.Open}(C, f, r) \rightarrow b \in \{0, 1\} HidingKZG.Open ( C , f , r ) → b ∈ { 0 , 1 } :
This checks the following equation:
C = ? [ f ( s ) ] 1 + r ⋅ [ ξ ] 1 C \stackrel{?}= [f(s)]_1 + r \cdot [\xi]_1 C = ? [ f ( s ) ] 1 + r ⋅ [ ξ ] 1 H i d i n g K Z G . P r o v e E v a l ( C , r , z , v ) → ( W , δ ) \mathsf{HidingKZG.ProveEval}(C, r, z, v) \rightarrow (W, \delta) HidingKZG.ProveEval ( C , r , z , v ) → ( W , δ ) :
The prover samples α ← F \alpha \leftarrow \mathbb{F} α ← F .
The prover provides the verifier with W W W and δ \delta δ :
W = [ f ( s ) − v s − z ] 1 + α ⋅ [ ξ ] 1 , δ = [ r − α ( s − z ) ] 1 W = \left[\frac{f(s) - v}{s - z}\right]_1 + \alpha \cdot [\xi]_1, \quad \delta = [r - \alpha (s - z)]_1 W = [ s − z f ( s ) − v ] 1 + α ⋅ [ ξ ] 1 , δ = [ r − α ( s − z ) ] 1 H i d i n g K Z G . V e r i f y E v a l ( C , W , δ , z , v ) → b ∈ { 0 , 1 } \mathsf{HidingKZG.VerifyEval}(C, W, \delta, z, v) \rightarrow b \in \{0, 1\} HidingKZG.VerifyEval ( C , W , δ , z , v ) → b ∈ { 0 , 1 } :
The verifier checks the following equation:
e ( C − [ v ] 1 , [ 1 ] 2 ) = ? e ( W , [ s ] 2 − [ z ] 2 ) ⋅ e ( δ , [ ξ ] 2 ) e(C - [v]_1, [1]_2) \stackrel{?}=e(W, [s]_2 - [z]_2) \cdot e(\delta, [\xi]_2) e ( C − [ v ] 1 , [ 1 ] 2 ) = ? e ( W , [ s ] 2 − [ z ] 2 ) ⋅ e ( δ , [ ξ ] 2 ) Proof.
f ( s ) + r ξ − v = f ( s ) − v + α ξ ( s − z ) + ( r − α ( s − z ) ) ξ = f ( s ) − v + r ξ \begin{align*}
f(s) + r \xi - v&= f(s) -v + \alpha \xi(s-z) + (r- \alpha(s-z))\xi \\
&= f(s) - v + r\xi
\end{align*} f ( s ) + r ξ − v = f ( s ) − v + α ξ ( s − z ) + ( r − α ( s − z )) ξ = f ( s ) − v + r ξ This is only satisfied iff H i d i n g K Z G . O p e n ( C , f , r ) = 1 ∧ f ( z ) = v \mathsf{HidingKZG.Open}(C, f, r) = 1 \land f(z) = v HidingKZG.Open ( C , f , r ) = 1 ∧ f ( z ) = v .
In comparison to naive KZG, HidingKZG 's verifier learns of an additional δ \delta δ that allows HidingKZG to stand up against the issues of naïve KZG in the following ways:
Since HidingKZG is a perfectly hiding commitment, even if quantum computing becomes feasible, revealing ( C , W , δ ) (C, W, \delta) ( C , W , δ ) still satisfies the ZK property.
However, it still reveals P ( z ) = v P(z) = v P ( z ) = v while proving circuit satisfiability .
Later in this document, we explain an additional trick that ensures that only information about circuit satisfiability is revealed.
Multilinear Polynomial Identity
Zeromorph requires the use of the Sumcheck protocol, which is reduced to an evaluation claim for a multilinear polynomial f ∈ F [ X 0 , … , X n − 1 ] ≤ 1 f \in \mathbb{F}[X_0, \dots, X_{n-1}]^{\le1} f ∈ F [ X 0 , … , X n − 1 ] ≤ 1 :
∑ b ∈ { 0 , 1 } n f ( b ) = 0 → f ( z ) = v \sum_{\bm{b} \in \{0, 1\}^n} f(\bm{b}) = 0 \rightarrow f(\bm{z}) = v b ∈ { 0 , 1 } n ∑ f ( b ) = 0 → f ( z ) = v where z = ( z 0 , … , z n − 1 ) ∈ F n \bm{z} = (z_0, \dots, z_{n-1}) \in \mathbb{F}^n z = ( z 0 , … , z n − 1 ) ∈ F n and v ∈ F v \in \mathbb{F} v ∈ F .
f − v = ∑ i = 0 n − 1 ( X i − z i ) q i ( 1 ) \begin{align*}
f - v = \sum_{i=0}^{n-1}(X_i - z_i)q_i && (1)
\end{align*} f − v = i = 0 ∑ n − 1 ( X i − z i ) q i ( 1 ) If there exist q i q_i q i as defined below that satisfies the above, then f ( z ) = v f(\bm{z}) = v f ( z ) = v .
For i = 0 i = 0 i = 0 : q i ∈ F q_i \in \mathbb{F} q i ∈ F
For 0 < i < n 0 < i < n 0 < i < n : q i ∈ F [ X 0 , … , X i − 1 ] ≤ 1 q_i \in \mathbb{F}[X_0, \dots, X_{i-1}]^{\le1} q i ∈ F [ X 0 , … , X i − 1 ] ≤ 1
Proof:
If n = 1 n = 1 n = 1 , equation ( 1 ) (1) ( 1 ) reduces to the following univariate polynomial identity:
f − v = ( X 0 − z 0 ) q 0 f - v = (X_0 - z_0)q_0 f − v = ( X 0 − z 0 ) q 0 Thus, if q 0 ∈ F q_0 \in \mathbb{F} q 0 ∈ F , then f ( z 0 ) = v f(z_0) = v f ( z 0 ) = v .
If n > 1 n > 1 n > 1 , f f f is divided by ( X n − 1 − z n − 1 ) (X_{n-1} - z_{n-1}) ( X n − 1 − z n − 1 ) results in quotient q n − 1 q_{n-1} q n − 1 with remainder f ( X 0 , … , X n − 2 , z n − 1 ) f(X_0, \dots, X_{n-2}, z_{n-1}) f ( X 0 , … , X n − 2 , z n − 1 ) as follows:
f ( X 0 , … , X n − 1 ) = ( X n − 1 − z n − 1 ) q n − 1 + f ( X 0 , … , X n − 2 , z n − 1 ) f(X_0, \dots, X_{n-1}) = (X_{n-1} - z_{n-1})q_{n-1} + f(X_0, \dots, X_{n-2}, z_{n-1}) f ( X 0 , … , X n − 1 ) = ( X n − 1 − z n − 1 ) q n − 1 + f ( X 0 , … , X n − 2 , z n − 1 ) The polynomial f ( X 0 , … , X n − 1 ) − f ( X 0 , … , X n − 2 , z n − 1 ) f(X_0, \dots, X_{n-1}) - f(X_0, \dots, X_{n-2}, z_{n-1}) f ( X 0 , … , X n − 1 ) − f ( X 0 , … , X n − 2 , z n − 1 ) has a degree of at most 1 in all variables. Therefore, q n − 1 q_{n-1} q n − 1 must have a degree of at most 1 in X 0 , … , X n − 2 X_0, \dots, X_{n-2} X 0 , … , X n − 2 , and a degree of at most 0 in X n − 1 X_{n-1} X n − 1 . This implies q n − 1 ∈ F [ X 0 , … , X n − 2 ] ≤ 1 q_{n-1} \in \mathbb{F}[X_0, \dots ,X_{n-2}]^{\le1} q n − 1 ∈ F [ X 0 , … , X n − 2 ] ≤ 1 . Using this information and recursive decomposition, we derive the following:
f ( X 0 , … , X n − 2 , z n − 1 ) = ( X n − 2 − z n − 2 ) q n − 2 + f ( X 0 , … , X n − 3 , z n − 2 , z n − 1 ) … f ( X 0 , z 1 , … z n − 1 ) = ( X 0 − z 0 ) q 0 + f ( z 0 , … , z n − 1 ) f(X_0, \dots, X_{n-2}, z_{n-1}) = (X_{n-2} - z_{n-2})q_{n-2} + f(X_0, \dots, X_{n-3}, z_{n-2}, z_{n-1}) \\
\dots \\
f(X_0, z_1, \dots z_{n-1}) = (X_0 - z_0) q_0 + f(z_0, \dots, z_{n-1}) f ( X 0 , … , X n − 2 , z n − 1 ) = ( X n − 2 − z n − 2 ) q n − 2 + f ( X 0 , … , X n − 3 , z n − 2 , z n − 1 ) … f ( X 0 , z 1 , … z n − 1 ) = ( X 0 − z 0 ) q 0 + f ( z 0 , … , z n − 1 ) Iteratively substituting all the equations above yields:
f = ∑ i = 0 n − 1 ( X i − z i ) q i + f ( z 0 , … , z n − 1 ) f = \sum_{i=0}^{n-1}(X_i - z_i)q_i + f(z_0, \dots, z_{n-1}) f = i = 0 ∑ n − 1 ( X i − z i ) q i + f ( z 0 , … , z n − 1 ) Therefore, by equation ( 1 ) (1) ( 1 ) , we confirm f ( z 0 , … , z n − 1 ) = f ( z ) = v f(z_0, \dots, z_{n-1}) = f(\bm{z}) =v f ( z 0 , … , z n − 1 ) = f ( z ) = v .
q i = f ( X 0 , … , X i − 1 , z i + 1 , z i + 1 , … , z n − 1 ) − f ( X 0 , … , X i − 1 , z i , z i + 1 , … , z n − 1 ) q_i = f(X_0, \dots, X_{i-1}, z_i + 1, z_{i+1}, \dots, z_{n-1}) - f(X_0, \dots, X_{i-1}, z_i, z_{i+1}, \dots, z_{n-1}) q i = f ( X 0 , … , X i − 1 , z i + 1 , z i + 1 , … , z n − 1 ) − f ( X 0 , … , X i − 1 , z i , z i + 1 , … , z n − 1 ) Example:
Let's calculate q 1 q_1 q 1 , the quotient from dividing f ( X 0 , X 1 , z 2 ) f(X_0, X_1, z_2) f ( X 0 , X 1 , z 2 ) by ( X 1 − z 1 ) (X_1 - z_1) ( X 1 − z 1 ) :
q 1 = f ( X 0 , z 1 + 1 , z 2 ) − f ( X 0 , z 1 , z 2 ) q_1 = f(X_0, z_1 + 1, z_2) - f(X_0, z_1, z_2) q 1 = f ( X 0 , z 1 + 1 , z 2 ) − f ( X 0 , z 1 , z 2 ) f ( X 0 , z 1 + 1 , z 2 ) f(X_0, z_1 + 1, z_2) f ( X 0 , z 1 + 1 , z 2 ) will be evaluated as follows:
f ( X 0 , z 1 + 1 , z 2 ) = c 0 X 0 ( z 1 + 1 ) z 2 + c 1 X 0 ( z 1 + 1 ) + c 2 X 0 z 2 + c 3 ( z 1 + 1 ) z 2 + c 4 X 0 + c 5 ( z 1 + 1 ) + c 6 z 2 + c 7 ( a ) \begin{align*}f(X_0, z_1 + 1, z_2) = c_0X_0(z_1 + 1)z_2 + c_1X_0(z_1 + 1) + c_2X_0z_2 + c_3(z_1 + 1)z_2 + c_4X_0 + c_5(z_1 + 1) + c_6z_2 + c_7 && (a)\end{align*} f ( X 0 , z 1 + 1 , z 2 ) = c 0 X 0 ( z 1 + 1 ) z 2 + c 1 X 0 ( z 1 + 1 ) + c 2 X 0 z 2 + c 3 ( z 1 + 1 ) z 2 + c 4 X 0 + c 5 ( z 1 + 1 ) + c 6 z 2 + c 7 ( a ) f ( X 0 , z 1 , z 2 ) f(X_0, z_1, z_2) f ( X 0 , z 1 , z 2 ) will be evaluated as follows:
f ( X 0 , z 1 , z 2 ) = c 0 X 0 z 1 z 2 + c 1 X 0 z 1 + c 2 X 0 z 2 + c 3 z 1 z 2 + c 4 X 0 + c 5 z 1 + c 6 z 2 + c 7 ( b ) \begin{align*}f(X_0, z_1, z_2) = c_0X_0z_1z_2 + c_1X_0z_1 + c_2X_0z_2 + c_3z_1z_2 + c_4X_0 + c_5z_1 + c_6z_2 + c_7 && (b)\end{align*} f ( X 0 , z 1 , z 2 ) = c 0 X 0 z 1 z 2 + c 1 X 0 z 1 + c 2 X 0 z 2 + c 3 z 1 z 2 + c 4 X 0 + c 5 z 1 + c 6 z 2 + c 7 ( b ) Subtracting equation ( b ) (b) ( b ) from equation ( a ) (a) ( a ) allows us to compute q 1 q_1 q 1 as the following:
f ( X 0 , z 1 + 1 , z 2 ) − f ( X 0 , z 1 , z 2 ) = c 0 X 0 ( z 1 + 1 ) z 2 + c 1 X 0 ( z 1 + 1 ) + c 2 X 0 z 2 + c 3 ( z 1 + 1 ) z 2 + c 4 X 0 + c 5 ( z 1 + 1 ) + c 6 z 2 + c 7 − c 0 X 0 z 1 z 2 − c 1 X 0 z 1 − c 2 X 0 z 2 − c 3 z 1 z 2 − c 4 X 0 − c 5 z 1 − c 6 z 2 − c 7 = c 0 X 0 z 2 + c 1 X 0 + c 3 z 2 + c 5 . \begin{aligned}
f(X_0, z_1 + 1, z_2) - f(X_0, z_1, z_2) &= c_0X_0(z_1 + 1)z_2 + c_1X_0(z_1 + 1) + c_2X_0z_2 + c_3(z_1 + 1)z_2 \\
&\quad + c_4X_0 + c_5(z_1 + 1) + c_6z_2 + c_7 \\
&\quad - c_0X_0z_1z_2 - c_1X_0z_1 - c_2X_0z_2 - c_3z_1z_2 \\
&\quad - c_4X_0 - c_5z_1 - c_6z_2 - c_7 \\
&= c_0X_0z_2 + c_1X_0 + c_3z_2 + c_5.
\end{aligned}
f ( X 0 , z 1 + 1 , z 2 ) − f ( X 0 , z 1 , z 2 ) = c 0 X 0 ( z 1 + 1 ) z 2 + c 1 X 0 ( z 1 + 1 ) + c 2 X 0 z 2 + c 3 ( z 1 + 1 ) z 2 + c 4 X 0 + c 5 ( z 1 + 1 ) + c 6 z 2 + c 7 − c 0 X 0 z 1 z 2 − c 1 X 0 z 1 − c 2 X 0 z 2 − c 3 z 1 z 2 − c 4 X 0 − c 5 z 1 − c 6 z 2 − c 7 = c 0 X 0 z 2 + c 1 X 0 + c 3 z 2 + c 5 . Now we can see that f ( X 0 , X 1 , z 2 ) f(X_0, X_1, z_2) f ( X 0 , X 1 , z 2 ) can be decomposed as the following:
f ( X 0 , X 1 , z 2 ) = ( X 1 − z 1 ) ( c 0 X 0 z 2 + c 1 X 0 + c 3 z 2 + c 5 ) ⏟ q 1 + f ( X 0 , z 1 , z 2 ) \begin{align*}
f(X_0, X_1, z_2) &= (X_1 - z_1) \underbrace{(c_0X_0z_2 + c_1X_0 + c_3z_2 + c_5)}_{q_1 } + f(X_0, z_1, z_2) \\
\end{align*}
f ( X 0 , X 1 , z 2 ) = ( X 1 − z 1 ) q 1 ( c 0 X 0 z 2 + c 1 X 0 + c 3 z 2 + c 5 ) + f ( X 0 , z 1 , z 2 ) The validity of this statement can be ensured by multiplying all terms out
f ( X 0 , X 1 , z 2 ) = c 0 X 0 X 1 z 2 + c 1 X 0 X 1 + c 3 X 1 z 2 + c 5 X 1 − c 0 X 0 z 1 z 2 − c 1 X 0 z 1 − c 3 z 1 z 2 − c 5 z 1 + c 0 X 0 z 1 z 2 + c 1 X 0 z 1 + c 2 X 0 z 2 + c 3 z 1 z 2 + c 4 X 0 + c 5 z 1 + c 6 z 2 + c 7 = c 0 X 0 X 1 z 2 + c 1 X 0 X 1 + c 2 X 0 z 2 + c 3 X 1 z 2 + c 4 X 0 + c 5 X 1 + c 6 z 2 + c 7 . \begin{align*}
f(X_0, X_1, z_2) &= c_0X_0X_1z_2 + c_1X_0X_1 + c_3X_1z_2 + c_5X_1 \\
&\quad - c_0X_0z_1z_2 - c_1X_0z_1 - c_3z_1z_2 - c_5z_1 \\
&\quad + c_0X_0z_1z_2 + c_1X_0z_1 + c_2X_0z_2 + c_3z_1z_2 \\
&\quad + c_4X_0 + c_5z_1 + c_6z_2 + c_7 \\
&= c_0X_0X_1z_2 + c_1X_0X_1 + c_2X_0z_2 + c_3X_1z_2 \\
&\quad + c_4X_0 + c_5X_1 + c_6z_2 + c_7.
\end{align*} f ( X 0 , X 1 , z 2 ) = c 0 X 0 X 1 z 2 + c 1 X 0 X 1 + c 3 X 1 z 2 + c 5 X 1 − c 0 X 0 z 1 z 2 − c 1 X 0 z 1 − c 3 z 1 z 2 − c 5 z 1 + c 0 X 0 z 1 z 2 + c 1 X 0 z 1 + c 2 X 0 z 2 + c 3 z 1 z 2 + c 4 X 0 + c 5 z 1 + c 6 z 2 + c 7 = c 0 X 0 X 1 z 2 + c 1 X 0 X 1 + c 2 X 0 z 2 + c 3 X 1 z 2 + c 4 X 0 + c 5 X 1 + c 6 z 2 + c 7 . Verifying the Multilinear Polynomial Identity
Verifying equation ( 1 ) (1) ( 1 ) requires n n n pairing operations, which imposes a computational overhead on the verifier:
e ( [ f ( s 0 , … , s n − 1 ) ] 1 − [ v ] 1 , [ 1 ] 2 ) = ? ∏ i = 0 n − 1 e ( [ q i ( s 0 , … , s i − 1 ) ] 1 , [ s i ] 2 − [ z i ] 2 ) e([f(s_0, \dots, s_{n-1})]_1 - [v]_1,[1]_2) \stackrel{?}= \prod_{i = 0}^{n-1} e([q_i(s_0, \dots, s_{i-1})]_1, [s_i]_2 - [z_i]_2) e ([ f ( s 0 , … , s n − 1 ) ] 1 − [ v ] 1 , [ 1 ] 2 ) = ? i = 0 ∏ n − 1 e ([ q i ( s 0 , … , s i − 1 ) ] 1 , [ s i ] 2 − [ z i ] 2 ) Protocol Explanation
Multilinear Polynomial Identity using Univariate PCS
To efficiently verify the multilinear polynomial identity, we first define the following mapping:
U n : F [ X 0 , … , X n − 1 ] ≤ 1 → F [ X ] < 2 n \mathcal{U}_n: \mathbb{F}[X_0, \dots, X_{n-1}]^{\le1} \rightarrow \mathbb{F}[X]^{<2^n} U n : F [ X 0 , … , X n − 1 ] ≤ 1 → F [ X ] < 2 n Given f ( X ) f(\bm{X}) f ( X ) defined as:
f ( X ) : = ∑ b ∈ { 0 , 1 } n v b ⋅ e q ~ ( X , b ) f(\bm{X}) := \sum_{\bm{b} \in \{0, 1\}^n}v_{\bm{b}} \cdot \mathsf{\widetilde{eq}}(\bm{X}, \bm{b}) f ( X ) := b ∈ { 0 , 1 } n ∑ v b ⋅ eq ( X , b ) the function U n ( f ) \mathcal{U}_n(f) U n ( f ) transforms the following expression:
e q ~ ( X , b ) = ∏ i = 0 n − 1 ( b i X i + ( 1 − b i ) ( 1 − X i ) ) → ∏ i = 0 n − 1 ( X 2 i ) b i \mathsf{\widetilde{eq}}(\bm{X}, \bm{b}) =\prod_{i = 0}^{n-1} (b_i X_i +(1-b_i)(1 - X_i)) \rightarrow \prod_{i=0}^{n-1} \left(X^{2^i}\right)^{b_i} eq ( X , b ) = i = 0 ∏ n − 1 ( b i X i + ( 1 − b i ) ( 1 − X i )) → i = 0 ∏ n − 1 ( X 2 i ) b i This seemingly expensive operation actually introduces no computational overhead. This is because the witness generation process for constructing a ZK proof already outputs polynomial evaluations, making this mapping essentially free.
If f = c ∈ F f = c \in \mathbb{F} f = c ∈ F is a constant function, we can compute:
U n ( f ) = c ⋅ Φ n ( X ) \mathcal{U}_n(f) = c \cdot \Phi_n(X) U n ( f ) = c ⋅ Φ n ( X ) where Φ n ( X ) \Phi_n(X) Φ n ( X ) is defined as:
Φ n ( X ) : = ∑ i = 0 2 n − 1 X i \Phi_n(X) :=\sum_{i = 0}^{2^n - 1}X^i Φ n ( X ) := i = 0 ∑ 2 n − 1 X i This satisfies the following equation, meaning that evaluating Φ n ( X ) \Phi_n(X) Φ n ( X ) at any point x x x requires only n + 1 n + 1 n + 1 multiplications and 2 2 2 additions:
Φ n ( X ) = X 2 n − 1 X − 1 \Phi_n(X) = \frac{X^{2^n} - 1}{X - 1} Φ n ( X ) = X − 1 X 2 n − 1 For example, if n = 2 n = 2 n = 2 , we can compute:
U 2 ( f ) = f ( 0 , 0 ) + f ( 1 , 0 ) X + f ( 0 , 1 ) X 2 + f ( 1 , 1 ) X 3 \mathcal{U}_2(f) = f(0, 0) + f(1, 0)X + f(0, 1)X^2 + f(1, 1)X^3 U 2 ( f ) = f ( 0 , 0 ) + f ( 1 , 0 ) X + f ( 0 , 1 ) X 2 + f ( 1 , 1 ) X 3 Applying this mapping to both sides of equation ( 1 ) (1) ( 1 ) , we transform it into:
U n ( f ) − v ⋅ U n ( 1 ) = ∑ i = 0 n − 1 U n ( X i q i ) − z i ⋅ U n ( q i ) ( 2 ) \begin{align*}
\mathcal{U}_n(f) - v \cdot \mathcal{U}_n(1) = \sum_{i=0}^{n-1}\mathcal{U}_n(X_iq_i)- z_i \cdot \mathcal{U}_n(q_i) && (2)
\end{align*} U n ( f ) − v ⋅ U n ( 1 ) = i = 0 ∑ n − 1 U n ( X i q i ) − z i ⋅ U n ( q i ) ( 2 ) Since U n ( f ) \mathcal{U}_n(f) U n ( f ) is a linear isomorphism, satisfying equation ( 2 ) (2) ( 2 ) implies equation ( 1 ) (1) ( 1 ) is also satisfied. Instead of using a multilinear PCS to commit to f f f , we can now use a univariate PCS via U n ( f ) \mathcal{U}_n(f) U n ( f ) .
Next, we analyze how the verifier can efficiently verify the claim. The prover will commit to U n ( f ) \mathcal{U}_n(f) U n ( f ) and U n ( q i ) \mathcal{U}_n(q_i) U n ( q i ) , while U n ( 1 ) = Φ n ( X ) \mathcal{U}_n(1) = \Phi_n(X) U n ( 1 ) = Φ n ( X ) can be easily computed. The key question now is: how can we efficiently compute U n ( X i q i ) \mathcal{U}_n(X_iq_i) U n ( X i q i ) ?
For example, if i = 2 , n = 3 i = 2, n = 3 i = 2 , n = 3 and f = 2 X 0 + X 1 + 0 X 2 f = 2X_0 + X_1 + 0X_2 f = 2 X 0 + X 1 + 0 X 2 , then U 3 ( f ) \mathcal{U}_3(f) U 3 ( f ) can be computed as:
U 3 ( f ) = f ( 0 , 0 , 0 ) + f ( 1 , 0 , 0 ) X + f ( 0 , 1 , 0 ) X 2 + f ( 1 , 1 , 0 ) X 3 + f ( 0 , 0 , 1 ) X 4 + f ( 1 , 0 , 1 ) X 5 + f ( 0 , 1 , 1 ) X 6 + f ( 1 , 1 , 1 ) X 7 = 0 + 2 X + 1 X 2 + 3 X 3 + 0 X 4 + 2 X 5 + 1 X 6 + 3 X 7 = ( X 4 + 1 ) ⏟ Φ 1 ( X 4 ) ( 0 + 2 X + 1 X 2 + 3 X 3 ) ⏟ U 2 ( f ) < 4 \begin{align*}
\mathcal{U}_3(f) &= \textcolor{red}{f(0, 0, 0) + f(1, 0, 0) X + f(0,1,0)X^2 + f(1,1,0) X^3} + f(0, 0, 1)X^4 + f(1,0,1)X^5 + f(0,1,1)X^6 + f(1,1,1)X^7 \\
&= \textcolor{red}{0 + 2X + 1X^2 + 3X^3} + 0X^4 + 2X^5 + 1X^6 + 3X^7 \\ &= \underbrace{(X^4 + 1)}_{\Phi_1(X^4)}\underbrace{\textcolor{red}{(0 + 2X + 1X^2 + 3X^3)}}_{ \mathcal{U}_2(f)^{<4}}
\end{align*} U 3 ( f ) = f ( 0 , 0 , 0 ) + f ( 1 , 0 , 0 ) X + f ( 0 , 1 , 0 ) X 2 + f ( 1 , 1 , 0 ) X 3 + f ( 0 , 0 , 1 ) X 4 + f ( 1 , 0 , 1 ) X 5 + f ( 0 , 1 , 1 ) X 6 + f ( 1 , 1 , 1 ) X 7 = 0 + 2 X + 1 X 2 + 3 X 3 + 0 X 4 + 2 X 5 + 1 X 6 + 3 X 7 = Φ 1 ( X 4 ) ( X 4 + 1 ) U 2 ( f ) < 4 ( 0 + 2 X + 1 X 2 + 3 X 3 ) U n ( X i f ) = X 2 i X 2 i + 1 U n ( f ) \mathcal{U}_n(X_if) = \frac{X^{2^i}}{X^{2^i} + 1}\mathcal{U}_n(f) U n ( X i f ) = X 2 i + 1 X 2 i U n ( f ) For example, if i = 2 , n = 3 i = 2, n = 3 i = 2 , n = 3 , and f = 2 X 0 + X 1 f = 2X_0 + X_1 f = 2 X 0 + X 1 , then multiplying by X 2 X_2 X 2 gives f ′ = X 2 f = 2 X 0 X 2 + X 1 X 2 f' = X_2f = 2X_0X_2 + X_1X_2 f ′ = X 2 f = 2 X 0 X 2 + X 1 X 2 .
Thus, when X 2 = 0 X_2 = 0 X 2 = 0 , both f f f and f ′ f' f ′ evaluate to 0. When X 2 = 1 X_2 = 1 X 2 = 1 , f ′ f' f ′ takes the same value as f f f .
U 3 ( f ′ ) = f ′ ( 0 , 0 , 0 ) + f ′ ( 1 , 0 , 0 ) X + f ′ ( 0 , 1 , 0 ) X 2 + f ′ ( 1 , 1 , 0 ) X 3 + f ′ ( 0 , 0 , 1 ) X 4 + f ′ ( 1 , 0 , 1 ) X 5 + f ′ ( 0 , 1 , 1 ) X 6 + f ′ ( 1 , 1 , 1 ) X 7 = f ( 0 , 0 , 1 ) X 4 + f ( 1 , 0 , 1 ) X 5 + f ( 0 , 1 , 1 ) X 6 + f ( 1 , 1 , 1 ) X 7 = X 4 X 4 + 1 ( f ( 0 , 0 , 0 ) + f ( 1 , 0 , 0 ) X + f ( 0 , 1 , 0 ) X 2 + f ( 1 , 1 , 0 ) X 3 + f ( 0 , 0 , 1 ) X 4 + f ( 1 , 0 , 1 ) X 5 + f ( 0 , 1 , 1 ) X 6 + f ( 1 , 1 , 1 ) X 7 ) ⏟ U 3 ( f ) \begin{align*}
\mathcal{U}_3(f') &= f'(0, 0, 0) + f'(1, 0, 0) X + f'(0,1,0)X^2 + f'(1,1,0) X^3 + f'(0, 0, 1)X^4 + f'(1,0,1)X^5 + f'(0,1,1)X^6 + f'(1,1,1)X^7 \\
&= f(0, 0, 1)X^4 + f(1,0,1)X^5 + f(0,1,1)X^6 + f(1,1,1)X^7 \\
&= \frac{X^4}{X^4 + 1}\underbrace{\left({f(0, 0, 0) + f(1, 0, 0) X + f(0,1,0)X^2 + f(1,1,0) X^3} + f(0, 0, 1)X^4 + f(1,0,1)X^5 + f(0,1,1)X^6 + f(1,1,1)X^7\right)}_{\mathcal{U}_3(f)}
\end{align*} U 3 ( f ′ ) = f ′ ( 0 , 0 , 0 ) + f ′ ( 1 , 0 , 0 ) X + f ′ ( 0 , 1 , 0 ) X 2 + f ′ ( 1 , 1 , 0 ) X 3 + f ′ ( 0 , 0 , 1 ) X 4 + f ′ ( 1 , 0 , 1 ) X 5 + f ′ ( 0 , 1 , 1 ) X 6 + f ′ ( 1 , 1 , 1 ) X 7 = f ( 0 , 0 , 1 ) X 4 + f ( 1 , 0 , 1 ) X 5 + f ( 0 , 1 , 1 ) X 6 + f ( 1 , 1 , 1 ) X 7 = X 4 + 1 X 4 U 3 ( f ) ( f ( 0 , 0 , 0 ) + f ( 1 , 0 , 0 ) X + f ( 0 , 1 , 0 ) X 2 + f ( 1 , 1 , 0 ) X 3 + f ( 0 , 0 , 1 ) X 4 + f ( 1 , 0 , 1 ) X 5 + f ( 0 , 1 , 1 ) X 6 + f ( 1 , 1 , 1 ) X 7 ) U n ( f ) − v ⋅ U n ( 1 ) = ∑ i = 0 n − 1 ( X 2 i X 2 i + 1 − z i ) U n ( q i ) ( 3 ) \begin{align*}
\mathcal{U}_n(f) - v \cdot \mathcal{U}_n(1) = \sum_{i=0}^{n-1}\left(\frac{X^{2^i}}{X^{2^i} + 1}- z_i\right) \mathcal{U}_n(q_i) && (3)
\end{align*} U n ( f ) − v ⋅ U n ( 1 ) = i = 0 ∑ n − 1 ( X 2 i + 1 X 2 i − z i ) U n ( q i ) ( 3 ) At this stage, the verifier must check whether q i ∈ F [ X 0 , … , X i − 1 ] ≤ 1 q_i \in \mathbb{F}[X_0, \dots, X_{i-1} ]^{\le1} q i ∈ F [ X 0 , … , X i − 1 ] ≤ 1 . We can verify this using U n ( q i ) ∈ F [ X ] < 2 i \mathcal{U}_n(q_i) \in \mathbb{F}[X]^{<2^i} U n ( q i ) ∈ F [ X ] < 2 i through a degree check protocol . by substituting Lemma 2.5.2 into equation ( 3 ) (3) ( 3 ) , which results in:
U n ( f ) − v ⋅ U n ( 1 ) = ∑ i = 0 n − 1 ( X 2 i X 2 i + 1 − z i ) Φ n − i ( X 2 i ) U n ( q i ) < 2 i ( 4 ) \begin{align*}
\mathcal{U}_n(f) - v \cdot \mathcal{U}_n(1) = \sum_{i=0}^{n-1}\left(\frac{X^{2^i}}{X^{2^i} + 1}- z_i\right) \Phi_{n-i}\left(X^{2^i}\right)\mathcal{U}_n(q_i)^{<2^i} && (4)
\end{align*} U n ( f ) − v ⋅ U n ( 1 ) = i = 0 ∑ n − 1 ( X 2 i + 1 X 2 i − z i ) Φ n − i ( X 2 i ) U n ( q i ) < 2 i ( 4 ) Since Φ n − i ( X 2 i ) \Phi_{n-i}\left(X^{2^i}\right) Φ n − i ( X 2 i ) is defined as:
Φ n − i ( X 2 i ) = 1 + X 2 i + ( X 2 i ) 2 + ⋯ + ( X 2 i ) 2 n − i − 1 = X 2 n − 1 X 2 i − 1 \begin{align*}
\Phi_{n-i}\left(X^{2^i}\right) &= 1 + X^{2^i} + \left(X^{2^i}\right)^2 + \dots + \left(X^{2^i}\right)^{2^{n-i} - 1} \\
&= \frac{X^{2^n} - 1}{X^{2^i} - 1}
\end{align*} Φ n − i ( X 2 i ) = 1 + X 2 i + ( X 2 i ) 2 + ⋯ + ( X 2 i ) 2 n − i − 1 = X 2 i − 1 X 2 n − 1 we can simplify:
X 2 i X 2 i + 1 Φ n − i ( X 2 i ) = X 2 i X 2 i + 1 X 2 n − 1 X 2 i − 1 = X 2 i X 2 n − 1 X 2 i + 1 − 1 = X 2 i Φ n − i − 1 ( X 2 i + 1 ) \frac{X^{2^i}}{X^{2^i} + 1}\Phi_{n-i}\left(X^{2^i}\right) = \frac{X^{2^i}}{X^{2^i} + 1}\frac{X^{2^n} - 1}{X^{2^i} - 1} = X^{2^i}\frac{X^{2^n} - 1}{X^{2^{i + 1}} - 1} = X^{2^i}\Phi_{n-i-1}\left(X^{2^{i+1}}\right) X 2 i + 1 X 2 i Φ n − i ( X 2 i ) = X 2 i + 1 X 2 i X 2 i − 1 X 2 n − 1 = X 2 i X 2 i + 1 − 1 X 2 n − 1 = X 2 i Φ n − i − 1 ( X 2 i + 1 ) Applying this to equation ( 4 ) (4) ( 4 ) , we obtain:
U n ( f ) − v ⋅ U n ( 1 ) = ∑ i = 0 n − 1 ( X 2 i Φ n − i − 1 ( X 2 i + 1 ) − z i ⋅ Φ n − i ( X 2 i ) ) U n ( q i ) < 2 i ( 5 ) \begin{align*}
\mathcal{U}_n(f) - v \cdot \mathcal{U}_n(1) = \sum_{i=0}^{n-1}\left(X^{2^i}\Phi_{n-i-1}\left(X^{2^{i+1}}\right)- z_i \cdot \Phi_{n-i}\left(X^{2^i}\right)\right) \mathcal{U}_n(q_i)^{<2^i} && (5)
\end{align*} U n ( f ) − v ⋅ U n ( 1 ) = i = 0 ∑ n − 1 ( X 2 i Φ n − i − 1 ( X 2 i + 1 ) − z i ⋅ Φ n − i ( X 2 i ) ) U n ( q i ) < 2 i ( 5 ) Now we can define ζ x ( X ) \zeta_x(X) ζ x ( X ) using equation (5), which is partially evaluated at x x x on Φ n ( X ) \Phi_n(X) Φ n ( X ) as:
ζ x ( X ) : = U n ( f ) − v ⋅ Φ n ( x ) − ∑ i = 0 n − 1 ( x 2 i Φ n − i − 1 ( x 2 k + 1 ) − z i ⋅ Φ n − i ( x 2 i ) ) U n ( q i ) < 2 i ( X ) \zeta_x(X) := \mathcal{U}_n(f) - v \cdot \Phi_n(x) - \sum_{i=0}^{n-1}\left(x^{2^i}\Phi_{n-i-1}\left(x^{2^{k+1}}\right)- z_i \cdot \Phi_{n-i} \left( x^{2^i} \right) \right)\mathcal{U}_n(q_i)^{<2^i}(X) \\ ζ x ( X ) := U n ( f ) − v ⋅ Φ n ( x ) − i = 0 ∑ n − 1 ( x 2 i Φ n − i − 1 ( x 2 k + 1 ) − z i ⋅ Φ n − i ( x 2 i ) ) U n ( q i ) < 2 i ( X ) Then the prover needs to commit to this polynomial ( C ζ x , r ) = H i d i n g K Z G . C o m m i t ( ζ x ) (C_{\zeta_x}, r) = \mathsf{HidingKZG.Commit}(\zeta_x) ( C ζ x , r ) = HidingKZG.Commit ( ζ x ) . If the prover sends ( W , δ ) = H i d i n g K Z G . P r o v e E v a l ( C ζ x , r , x , 0 ) (W, \delta) = \mathsf{HidingKZG.ProveEval}(C_{\zeta_x}, r, x, 0) ( W , δ ) = HidingKZG.ProveEval ( C ζ x , r , x , 0 ) to the verifier, then the verifier can verify using 3 pairing operations with H i d i n g K Z G . V e r i f y E v a l ( C ζ x , W , δ , x , 0 ) \mathsf{HidingKZG.VerifyEval}(C_{\zeta_x}, W, \delta, x, 0) HidingKZG.VerifyEval ( C ζ x , W , δ , x , 0 ) .
Note that since only ζ x ( x ) = 0 \zeta_x(x) = 0 ζ x ( x ) = 0 is opened for ζ x ( X ) \zeta_x(X) ζ x ( X ) , it is now possible to prove circuit satisfiability without revealing any additional information.
Degree Check Protocol
Single KZG Degree Check
Let's construct a protocol based on H i d i n g K Z G \mathsf{HidingKZG} HidingKZG that verifies whether a given polynomial f ∈ F [ X ] f \in \mathbb{F}[X] f ∈ F [ X ] satisfies deg ( f ) ≤ d < N m a x \deg(f) \le d < N_{\mathsf{max}} deg ( f ) ≤ d < N max .
H i d i n g K Z G . P r o v e O p e n W i t h D e g r e e C h e c k ( C , r , d ) → ( W , δ ) \mathsf{HidingKZG.ProveOpenWithDegreeCheck}(C, r, d) \rightarrow (W, \delta) HidingKZG.ProveOpenWithDegreeCheck ( C , r , d ) → ( W , δ ) :
The prover samples α ← F \alpha \leftarrow \mathbb{F} α ← F .
The prover provides the verifier with W , δ W, \delta W , δ :
W = [ f ( s ) s N m a x − 1 − d ] 1 + α ⋅ [ ξ ] 1 , δ = r ⋅ [ s N m a x − 1 − d ] 1 − [ α ] 1 W = \left[f(s)s^{N_{\mathsf{max}} - 1 -d} \right]_1 + \alpha\cdot [\xi]_1, \quad \delta = r \cdot \left[s^{N_{\mathsf{max}}-1-d}\right]_1 - [\alpha]_1 W = [ f ( s ) s N max − 1 − d ] 1 + α ⋅ [ ξ ] 1 , δ = r ⋅ [ s N max − 1 − d ] 1 − [ α ] 1 H i d i n g K Z G . V e r i f y O p e n W i t h D e g r e e C h e c k ( C , W , δ , d ) → b ∈ { 0 , 1 } \mathsf{HidingKZG.VerifyOpenWithDegreeCheck}(C, W, \delta, d) \rightarrow b \in \{0, 1\} HidingKZG.VerifyOpenWithDegreeCheck ( C , W , δ , d ) → b ∈ { 0 , 1 } :
The verifier checks the following equation:
e ( C , [ s N m a x − 1 − d ] 2 ) = ? e ( W , [ 1 ] 2 ) ⋅ e ( δ , [ ξ ] 2 ) e(C, \left[ s^{N_{\mathsf{max}}-1-d} \right]_2) \stackrel{?}= e(W, [1]_2) \cdot e(\delta, [\xi]_2) e ( C , [ s N max − 1 − d ] 2 ) = ? e ( W , [ 1 ] 2 ) ⋅ e ( δ , [ ξ ] 2 ) This is satisfied iff H i d i n g K Z G . O p e n ( C , f , r ) = 1 ∧ f ∈ F [ X ] ≤ d \mathsf{HidingKZG.Open}(C, f, r) = 1 \land f \in \mathbb{F}[X]^{\le d} HidingKZG.Open ( C , f , r ) = 1 ∧ f ∈ F [ X ] ≤ d .
Soundness Proof:
Suppose deg ( f ) > d \deg(f) > d deg ( f ) > d . Then, the degree of f ( X ) ⋅ X N m a x − 1 − d f(X) \cdot X^{N_{\mathsf{max}}-1-d} f ( X ) ⋅ X N max − 1 − d is at least N m a x N_{\mathsf{max}} N max , making it impossible to commit to W W W .
Completeness Proof:
C ⋅ s N m a x − 1 − d = ( f ( s ) + r ξ ) ⋅ s N m a x − 1 − d = f ( s ) s N m a x − 1 − d + α ξ + ( r ⋅ s N m a x − 1 − d − α ) ξ = f ( s ) s N m a x − 1 − d + r ξ ⋅ s N m a x − 1 − d \begin{align*}
C \cdot s^{N_{\mathsf{max} - 1 - d}} =(f(s) + r\xi) \cdot s^{N_{\mathsf{max} - 1 - d}} &= f(s)s^{N_{\mathsf{max}}-1-d} +\alpha\xi + (r\cdot s^{N_{\mathsf{max}} - 1 - d} - \alpha)\xi \\
&= f(s)s^{N_{\mathsf{max}}-1-d} + r \xi \cdot s^{N_{\mathsf{max}} - 1 - d}
\end{align*} C ⋅ s N max − 1 − d = ( f ( s ) + r ξ ) ⋅ s N max − 1 − d = f ( s ) s N max − 1 − d + α ξ + ( r ⋅ s N max − 1 − d − α ) ξ = f ( s ) s N max − 1 − d + r ξ ⋅ s N max − 1 − d H i d i n g K Z G . P r o v e E v a l W i t h D e g r e e C h e c k ( C , r , d , z , v ) → ( W , δ ) \mathsf{HidingKZG.ProveEvalWithDegreeCheck}(C, r, d, z, v) \rightarrow (W, \delta) HidingKZG.ProveEvalWithDegreeCheck ( C , r , d , z , v ) → ( W , δ ) :
The prover samples α ← F \alpha \leftarrow \mathbb{F} α ← F .
The prover provides the verifier with W , δ W, \delta W , δ :
W = [ f ( s ) − v s − z s N m a x − d ] 1 + α ⋅ [ ξ ] 1 , δ = r ⋅ [ s N m a x − d ] 1 − [ α ( s − z ) ] 1 W = \left[\frac{f(s) - v}{s - z}s^{N_{\mathsf{max}}-d} \right]_1 + \alpha\cdot [\xi]_1, \quad \delta = r \cdot \left[s^{N_{\mathsf{max}}-d} \right]_1 - [\alpha(s - z)]_1 W = [ s − z f ( s ) − v s N max − d ] 1 + α ⋅ [ ξ ] 1 , δ = r ⋅ [ s N max − d ] 1 − [ α ( s − z ) ] 1 H i d i n g K Z G . V e r i f y E v a l W i t h D e g r e e C h e c k ( C , W , δ , d , z , v ) → b ∈ { 0 , 1 } \mathsf{HidingKZG.VerifyEvalWithDegreeCheck}(C, W, \delta, d, z, v) \rightarrow b \in \{0, 1\} HidingKZG.VerifyEvalWithDegreeCheck ( C , W , δ , d , z , v ) → b ∈ { 0 , 1 } :
The verifier checks the following equation:
e ( C − [ v ] 1 , [ s N m a x − d ] 2 ) = ? e ( W , [ s ] 2 − [ z ] 2 ) ⋅ e ( δ , [ ξ ] 2 ) e(C - [v]_1, \left[ s^{N_{\mathsf{max}}-d} \right]_2) \stackrel{?}= e(W, [s]_2 - [z]_2) \cdot e(\delta, [\xi]_2) e ( C − [ v ] 1 , [ s N max − d ] 2 ) = ? e ( W , [ s ] 2 − [ z ] 2 ) ⋅ e ( δ , [ ξ ] 2 ) This is satisfied iff H i d i n g K Z G . O p e n ( C , f , r ) = 1 ∧ f ∈ F [ X ] ≤ d ∧ f ( z ) = v \mathsf{HidingKZG.Open}(C, f, r) = 1 \land f \in \mathbb{F}[X]^{\le d} \land f(z) = v HidingKZG.Open ( C , f , r ) = 1 ∧ f ∈ F [ X ] ≤ d ∧ f ( z ) = v .
Soundness Proof:
Suppose deg ( f ) > d \deg(f) > d deg ( f ) > d . Then, the degree of f ( X ) − v X − z X N m a x − d \frac{f(X) - v}{X - z}X^{N_{\mathsf{max}}-d} X − z f ( X ) − v X N max − d is at least N m a x N_{\mathsf{max}} N max , making it impossible to commit to W W W .
Completeness Proof:
( C − v ) ⋅ s N m a x − d = ( f ( s ) + r ξ − v ) ⋅ s N m a x − d = ( f ( s ) − v ) s N m a x − d + α ξ ( s − z ) + ( r ⋅ s N m a x − d − α ( s − z ) ) ξ = ( f ( s ) − v ) s N m a x − d + r ξ ⋅ s N m a x − d \begin{align*}
(C -v ) \cdot s^{N_{\mathsf{max}} - d} =(f(s) + r\xi -v ) \cdot s^{N_{\mathsf{max}} - d} &= (f(s) - v)s^{N_{\mathsf{max}}-d} + \alpha\xi(s - z) + (r\cdot s^{N_{\mathsf{max}} - d} - \alpha(s - z))\xi \\
&= (f(s) - v)s^{N_{\mathsf{max}}-d} + r\xi \cdot s^{N_{\mathsf{max}}-d}
\end{align*} ( C − v ) ⋅ s N max − d = ( f ( s ) + r ξ − v ) ⋅ s N max − d = ( f ( s ) − v ) s N max − d + α ξ ( s − z ) + ( r ⋅ s N max − d − α ( s − z )) ξ = ( f ( s ) − v ) s N max − d + r ξ ⋅ s N max − d Batch Degree Check
Now, let’s consider a set of polynomials f = { f 0 , … , f k − 1 } \bm{f} = \{f_0, \dots, f_{k-1}\} f = { f 0 , … , f k − 1 } and their respective degree bounds d = { d 0 , … , d k − 1 } \bm{d} = \{d_0, \dots, d_{k-1}\} d = { d 0 , … , d k − 1 } . For 0 ≤ i < k 0 \le i < k 0 ≤ i < k , each f i f_i f i belongs to F [ X ] \mathbb{F}[X] F [ X ] , and we aim to construct a batch protocol to verify whether deg ( f i ) ≤ d i < N m a x \deg(f_i) \le d_i < N_{\mathsf{max}} deg ( f i ) ≤ d i < N max .
First, we choose max d i ≤ d ∗ ≤ N m a x − 2 \max d_i \le d^* \le N_{\mathsf{max}} - 2 max d i ≤ d ∗ ≤ N max − 2 . Let C = { C 0 , … , C k − 1 } \bm{C} = \{C_0, \dots, C_{k-1}\} C = { C 0 , … , C k − 1 } and r = { r 0 , … , r k − 1 } \bm{r} =\{r_0, \dots, r_{k-1}\} r = { r 0 , … , r k − 1 } be the set of commitments and randomness corresponding to f \bm{f} f .
H i d i n g K Z G . P r o v e O p e n W i t h B a t c h D e g r e e C h e c k ( f , r , d ) → ( C f , W , δ ) \mathsf{HidingKZG.ProveOpenWithBatchDegreeCheck}(\bm{f}, \bm{r}, \bm{d}) \rightarrow (C_f, W, \delta) HidingKZG.ProveOpenWithBatchDegreeCheck ( f , r , d ) → ( C f , W , δ ) :
The verifier samples y ← F y \leftarrow \mathbb{F} y ← F and sends it to the prover.
The prover computes ( C f , r ) = H i d i n g K Z G . C o m m i t ( f ) (C_f, r) = \mathsf{HidingKZG.Commit}(f) ( C f , r ) = HidingKZG.Commit ( f ) and sends it to the verifier:
f : = ∑ i = 0 k − 1 y i X d ∗ − d i + 1 f i f := \sum_{i=0}^{k-1}y^iX^{d^*-d_i+1}f_i f := i = 0 ∑ k − 1 y i X d ∗ − d i + 1 f i The verifier samples x ← F ∗ x \leftarrow \mathbb{F}^* x ← F ∗ (where x ≠ 0 x \ne 0 x = 0 ) and sends it to the prover.
The prover samples α ← F \alpha \leftarrow \mathbb{F} α ← F .
The prover sends W , δ W, \delta W , δ to the verifier:
W = [ ζ x ( s ) s − x s N m a x − d ∗ − 1 ] 1 + α ⋅ [ ξ ] 1 δ = ( r − ∑ i = 0 k − 1 y i x d ∗ − d i + 1 r i ) ⋅ [ s N m a x − d ∗ − 1 ] 1 − [ α ( s − x ) ] 1 W = \left[\frac{\zeta_x(s)}{s - x} s^{N_{\mathsf{max}} - d^* - 1}\right]_1 + \alpha \cdot [\xi]_1 \\ \delta = \left(r - \sum_{i=0}^{k-1}y^ix^{d^*-d_i+1}r_i\right)\cdot\left[ s^{N_{\mathsf{max}}-d*-1}\right]_1 - [\alpha(s - x)]_1 W = [ s − x ζ x ( s ) s N max − d ∗ − 1 ] 1 + α ⋅ [ ξ ] 1 δ = ( r − i = 0 ∑ k − 1 y i x d ∗ − d i + 1 r i ) ⋅ [ s N max − d ∗− 1 ] 1 − [ α ( s − x ) ] 1 Here, ζ x ( X ) \zeta_x(X) ζ x ( X ) is defined as:
ζ x ( X ) : = f ( X ) − ∑ i = 0 k − 1 y i x d ∗ − d i + 1 f i ( X ) \zeta_x(X) := f(X) - \sum_{i = 0}^{k-1}y^ix^{d^*-d_i+1}f_i(X) ζ x ( X ) := f ( X ) − i = 0 ∑ k − 1 y i x d ∗ − d i + 1 f i ( X ) H i d i n g K Z G . V e r i f y O p e n W i t h B a t c h D e g r e e C h e c k ( C , C f , W , δ , d ) → b ∈ { 0 , 1 } \mathsf{HidingKZG.VerifyOpenWithBatchDegreeCheck}(\bm{C}, C_f, W, \delta, \bm{d}) \rightarrow b \in \{0, 1\} HidingKZG.VerifyOpenWithBatchDegreeCheck ( C , C f , W , δ , d ) → b ∈ { 0 , 1 }
The verifier checks the following equation:
e ( C ζ x , [ s N m a x − d ∗ − 1 ] 2 ) = ? e ( W , [ s ] 2 − [ x ] 2 ) ⋅ e ( δ , [ ξ ] 2 ) e(C_{\zeta_x},\left[ s^{N_{\mathsf{max}} - d^* - 1} \right]_2) \stackrel{?}= e(W, [s]_2 - [x]_2) \cdot e(\delta, [\xi]_2) e ( C ζ x , [ s N max − d ∗ − 1 ] 2 ) = ? e ( W , [ s ] 2 − [ x ] 2 ) ⋅ e ( δ , [ ξ ] 2 ) The commitment C ζ x C_{\zeta_x} C ζ x is defined as:
C ζ X : = C f − ∑ i = 0 k − 1 y i x d ∗ − d i + 1 C i C_{\zeta_X} := C_f - \sum_{i=0}^{k-1}y^ix^{d^*-d_i+1}C_i C ζ X := C f − i = 0 ∑ k − 1 y i x d ∗ − d i + 1 C i This is satisfied iff H i d i n g K Z G . O p e n ( C i , f i , r i ) = 1 ∧ f i ∈ F [ X ] ≤ d i \mathsf{HidingKZG.Open}(C_i, f_i, r_i) = 1 \land f_i \in \mathbb{F}[X]^{\le d_i} HidingKZG.Open ( C i , f i , r i ) = 1 ∧ f i ∈ F [ X ] ≤ d i for 0 ≤ i < k 0 \le i < k 0 ≤ i < k .
Soundness Proof:
Suppose that for some 0 ≤ i < k 0 \le i < k 0 ≤ i < k , we have deg ( f i ) > d i \deg(f_i) > d_i deg ( f i ) > d i . Then the degree of f f f becomes:
deg ( ζ x ( X ) ) = deg ( f ) ≥ d ∗ + 2 \deg(\zeta_x(X)) = \deg (f) \ge d^* + 2 deg ( ζ x ( X )) = deg ( f ) ≥ d ∗ + 2 which leads to:
deg ( ζ x ( X ) X − x X N m a x − d ∗ − 1 ) ≥ N m a x \deg\left(\frac{\zeta_x(X)}{X - x}X^{N_{\mathsf{max}} - d^* -1}\right) \ge N_{\mathsf{max}} deg ( X − x ζ x ( X ) X N max − d ∗ − 1 ) ≥ N max making it impossible to commit to W W W .
Completeness Proof:
( ζ x ( s ) + ( r − ∑ i = 0 k − 1 y i x d ∗ − d i + 1 r i ) ξ ) ⋅ s N m a x − d ∗ − 1 = ζ x ( s ) ⋅ s N m a x − d ∗ − 1 + α ξ ( s − x ) + ( ( r − ∑ i = 0 k − 1 y i x d ∗ − d i + 1 r i ) ⋅ s N m a x − d ∗ − 1 − α ( s − x ) ) ξ = ζ x ( s ) ⋅ s N m a x − d ∗ − 1 + ( r − ∑ i = 0 k − 1 y i x d ∗ − d i + 1 r i ) ξ ⋅ s N m a x − d ∗ − 1 \begin{align*}
\left(\zeta_x(s) + \left(r - \sum_{i=0}^{k-1}y_ix^{d^*-d_i+1}r_i\right)\xi\right)\cdot s^{N_{\mathsf{max}} - d^* - 1} &= \zeta_x(s) \cdot s^{N_{\mathsf{max}} - d^* - 1} + \alpha\xi(s - x) + \left(\left(r - \sum_{i=0}^{k-1}y_ix^{d^*-d_i+1}r_i\right) \cdot s^{N_{\mathsf{max}} - d^* - 1} - \alpha(s - x)\right)\xi \\
&= \zeta_x(s)\cdot s^{N_{\mathsf{max}} - d^* - 1} + \left(r - \sum_{i=0}^{k-1}y_ix^{d^*-d_i+1}r_i\right)\xi \cdot s^{N_{\mathsf{max}} - d^* - 1}
\end{align*} ( ζ x ( s ) + ( r − i = 0 ∑ k − 1 y i x d ∗ − d i + 1 r i ) ξ ) ⋅ s N max − d ∗ − 1 = ζ x ( s ) ⋅ s N max − d ∗ − 1 + α ξ ( s − x ) + ( ( r − i = 0 ∑ k − 1 y i x d ∗ − d i + 1 r i ) ⋅ s N max − d ∗ − 1 − α ( s − x ) ) ξ = ζ x ( s ) ⋅ s N max − d ∗ − 1 + ( r − i = 0 ∑ k − 1 y i x d ∗ − d i + 1 r i ) ξ ⋅ s N max − d ∗ − 1 The commitment scheme satisfies additive homomorphism.
The evaluation protocol is knowledge-sound.
These conditions allow the batch degree check to be used in other polynomial commitment schemes as well.
Batch Evaluation with Degree Check
Now, let’s consider a set of polynomials f = { f 0 , … , f k − 1 } \bm{f} = \{f_0, \dots, f_{k-1}\} f = { f 0 , … , f k − 1 } and their respective evaluation values v = { v 0 , … , v k − 1 } \bm{v} = \{v_0, \dots, v_{k-1}\} v = { v 0 , … , v k − 1 } . For 0 ≤ i < k 0 \le i < k 0 ≤ i < k , each f i f_i f i belongs to F [ X ] \mathbb{F}[X] F [ X ] , and we aim to construct a batch protocol to verify whether deg ( f i ) ≤ d < N m a x \deg(f_i) \le d < N_{\mathsf{max}} deg ( f i ) ≤ d < N max and f i ( z ) = v i f_i(z) = v_i f i ( z ) = v i .
Let C = { C 0 , … , C k − 1 } \bm{C} = \{C_0, \dots, C_{k-1}\} C = { C 0 , … , C k − 1 } and r = { r 0 , … , r k − 1 } \bm{r} =\{r_0, \dots, r_{k-1}\} r = { r 0 , … , r k − 1 } be the set of commitments and randomness corresponding to f \bm{f} f .
H i d i n g K Z G . P r o v e B a t c h E v a l W i t h D e g r e e C h e c k ( C , r , d , z , v ) → ( W , δ ) \mathsf{HidingKZG.ProveBatchEvalWithDegreeCheck}(\bm{C}, \bm{r}, d, z, \bm{v}) \rightarrow (W, \delta) HidingKZG.ProveBatchEvalWithDegreeCheck ( C , r , d , z , v ) → ( W , δ ) :
The verifier samples y ← F y \leftarrow \mathbb{F} y ← F and sends it to the prover.
The prover samples α ← F \alpha \leftarrow \mathbb{F} α ← F .
The prover provides the verifier with W , δ W, \delta W , δ :
W = [ ∑ i = 0 k − 1 y i ( f i ( s ) − v i ) s − z s N m a x − d ] 1 + α ⋅ [ ξ ] 1 δ = ( ∑ i = 0 k − 1 y i r i ) ⋅ [ s N m a x − d ] 1 − [ α ( s − z ) ] 1 W = \left[\frac{\sum_{i = 0}^{k-1}y^i(f_i(s) - v_i)}{s - z} s^{N_{\mathsf{max}} - d}\right]_1 + \alpha \cdot [\xi]_1 \\
\delta = \left(\sum_{i=0}^{k-1}y^ir_i\right)\cdot\left[ s^{N_{\mathsf{max}}-d}\right]_1 - [\alpha(s - z)]_1 W = [ s − z ∑ i = 0 k − 1 y i ( f i ( s ) − v i ) s N max − d ] 1 + α ⋅ [ ξ ] 1 δ = ( i = 0 ∑ k − 1 y i r i ) ⋅ [ s N max − d ] 1 − [ α ( s − z ) ] 1 H i d i n g K Z G . V e r i f y B a t c h E v a l W i t h D e g r e e C h e c k ( C , W , δ , d , z , v ) → b ∈ { 0 , 1 } \mathsf{HidingKZG.VerifyBatchEvalWithDegreeCheck}(\bm{C}, W, \delta, d, z, \bm{v}) \rightarrow b \in \{0, 1\} HidingKZG.VerifyBatchEvalWithDegreeCheck ( C , W , δ , d , z , v ) → b ∈ { 0 , 1 } :
The verifier checks the following equation:
e ( ∑ i = 0 k − 1 y i C i − [ ∑ i = 0 k − 1 y i v i ] 1 , [ s N m a x − d ] 2 ) = ? e ( W , [ s ] 2 − [ x ] 2 ) ⋅ e ( δ , [ ξ ] 2 ) e(\sum_{i=0}^{k-1}y_iC_i - \left[\sum_{i=0}^{k-1}y^iv_i\right]_1,\left[ s^{N_{\mathsf{max}} - d} \right]_2) \stackrel{?}= e(W, [s]_2 - [x]_2) \cdot e(\delta, [\xi]_2) e ( i = 0 ∑ k − 1 y i C i − [ i = 0 ∑ k − 1 y i v i ] 1 , [ s N max − d ] 2 ) = ? e ( W , [ s ] 2 − [ x ] 2 ) ⋅ e ( δ , [ ξ ] 2 ) This is satisfied iff H i d i n g K Z G . O p e n ( C i , f i , r i ) = 1 ∧ f i ∈ F [ X ] ≤ d ∧ f i ( z ) = v i \mathsf{HidingKZG.Open}(C_i, f_i, r_i) = 1 \land f_i \in \mathbb{F}[X]^{\le d} \land f_i(z) = v_i HidingKZG.Open ( C i , f i , r i ) = 1 ∧ f i ∈ F [ X ] ≤ d ∧ f i ( z ) = v i for 0 ≤ i < k 0 \le i < k 0 ≤ i < k .
Soundness Proof:
Suppose that for some 0 ≤ i < k 0 \le i < k 0 ≤ i < k , we have deg ( f i ) > d \deg(f_i) > d deg ( f i ) > d . Then the degree of the expression:
deg ( ∑ i = 0 k − 1 y i ( f i ( X ) − v ) X − x X N m a x − d ) ≥ N m a x \deg\left(\frac{\sum_{i=0}^{k-1}y^i(f_i(X) - v)}{X - x}X^{N_{\mathsf{max}} - d}\right) \ge N_{\mathsf{max}} deg ( X − x ∑ i = 0 k − 1 y i ( f i ( X ) − v ) X N max − d ) ≥ N max making it impossible to commit to W W W .
Completeness Proof:
∑ i = 0 k − 1 y i ( f i ( s ) + r i ξ − v i ) ⋅ s N m a x − d = ∑ i = 0 k − 1 y i ( f i ( s ) − v i ) ⋅ s N m a x − d + α ξ ( s − z ) + ( ∑ i = 0 k − 1 y i r i ⋅ s N m a x − d − α ( s − z ) ) ξ = ∑ i = 0 k − 1 y i ( f i ( s ) − v i ) ⋅ s N m a x − d + ∑ i = 0 k − 1 y i r i ξ ⋅ s N m a x − d \begin{align*}
\sum_{i=0}^{k-1}y_i\left(f_i(s) + r_i\xi - v_i\right) \cdot s^{N_{\mathsf{max}} - d} &= \sum_{i=0}^{k-1}y_i(f_i(s) - v_i) \cdot s^{N_{\mathsf{max}} - d} + \alpha\xi(s - z) + \left(\sum_{i=0}^{k-1}y^ir_i \cdot s^{N_{\mathsf{max}} - d} - \alpha(s - z)\right)\xi \\
&=\sum_{i=0}^{k-1}y_i(f_i(s) - v_i) \cdot s^{N_{\mathsf{max}} - d} + \sum_{i=0}^{k-1}y^ir_i\xi \cdot s^{N_{\mathsf{max}} - d}
\end{align*} i = 0 ∑ k − 1 y i ( f i ( s ) + r i ξ − v i ) ⋅ s N max − d = i = 0 ∑ k − 1 y i ( f i ( s ) − v i ) ⋅ s N max − d + α ξ ( s − z ) + ( i = 0 ∑ k − 1 y i r i ⋅ s N max − d − α ( s − z ) ) ξ = i = 0 ∑ k − 1 y i ( f i ( s ) − v i ) ⋅ s N max − d + i = 0 ∑ k − 1 y i r i ξ ⋅ s N max − d Put Together
To summarize, in order to prove f ( z ) = ? v f(\bm{z}) \stackrel{?}= v f ( z ) = ? v , we transformed the problem as follows:
U n ( f ) − v ⋅ Φ n ( X ) = ∑ i = 0 n − 1 ( X 2 i Φ n − i − 1 ( X 2 i + 1 ) − z i ⋅ Φ n − i ( X 2 i ) ) U n ( q i ) < 2 i \mathcal{U}_n(f) - v \cdot \Phi_n(X) = \sum_{i=0}^{n-1}\left(X^{2^i}\Phi_{n-i-1}\left(X^{2^{i+1}}\right)- z_i \cdot \Phi_{n-i}\left(X^{2^i}\right)\right) \mathcal{U}_n(q_i)^{<2^i} U n ( f ) − v ⋅ Φ n ( X ) = i = 0 ∑ n − 1 ( X 2 i Φ n − i − 1 ( X 2 i + 1 ) − z i ⋅ Φ n − i ( X 2 i ) ) U n ( q i ) < 2 i Now, let's prove the above equation using H i d i n g K Z G \mathsf{HidingKZG} HidingKZG .
The prover computes commitments ( C i , r i ) : = H i d i n g K Z G . c o m m i t ( U n ( q i ) < 2 i ) (C_i, r_i) := \mathsf{HidingKZG.commit}\left(\mathcal{U}_n(q_i)^{<2^i}\right) ( C i , r i ) := HidingKZG.commit ( U n ( q i ) < 2 i ) for 0 ≤ i < n 0 \le i < n 0 ≤ i < n , and sends them to the verifier.
The verifier randomly samples y ← F y \leftarrow \mathbb{F} y ← F .
The prover computes ( C q ^ , r ^ ) : = H i d i n g K Z G . c o m m i t ( q ^ ) (C_{\hat{q}}, \hat{r}) := \mathsf{HidingKZG.commit}\left(\hat{q}\right) ( C q ^ , r ^ ) := HidingKZG.commit ( q ^ ) for 0 ≤ i < n 0 \le i < n 0 ≤ i < n and sends the commitments to the verifier, where:
q ^ ( X ) : = ∑ i = 0 n − 1 y i X 2 n − d i − 1 U n ( q i ) < 2 i \hat{q}(X) := \sum_{i=0}^{n-1}y^iX^{2^n-d_i-1}\mathcal{U}_n(q_i)^{<2^i} q ^ ( X ) := i = 0 ∑ n − 1 y i X 2 n − d i − 1 U n ( q i ) < 2 i The verifier randomly samples x ← F ∗ , z ← F x \leftarrow \mathbb{F}^*, z\leftarrow \mathbb{F} x ← F ∗ , z ← F (where x ≠ 0 x \neq 0 x = 0 ).
The prover samples α ← F \alpha \leftarrow \mathbb{F} α ← F .
The prover provides the verifier with W , δ W, \delta W , δ :
W = [ ( ζ x ( s ) + z ⋅ Z x ( s ) s − x ) s N m a x − ( 2 n − 1 ) ] 1 + α ⋅ [ ξ ] 1 δ = [ ( r ζ + z r Z ) s N m a x − ( 2 n − 1 ) − α ( s − x ) ] 1 W = \left[\left(\frac{\zeta_x(s) + z \cdot Z_x(s)}{s- x}\right)s^{N_{\mathsf{max}} - (2^n - 1)} \right]_1 + \alpha \cdot [\xi]_1 \\
\delta = \left[ (r_\zeta + z r_Z) s^{N_{\mathsf{max}} - (2^n - 1)} -\alpha (s - x)\right]_1 W = [ ( s − x ζ x ( s ) + z ⋅ Z x ( s ) ) s N max − ( 2 n − 1 ) ] 1 + α ⋅ [ ξ ] 1 δ = [ ( r ζ + z r Z ) s N max − ( 2 n − 1 ) − α ( s − x ) ] 1 Where the values are defined as follows:
ζ x ( X ) : = q ^ ( X ) − ∑ i = 0 n − 1 y i x 2 n − d i − 1 U n ( q i ) < 2 i Z x ( X ) : = U n ( f ) − v ⋅ Φ n ( x ) − ∑ i = 0 n − 1 ( x 2 i Φ n − i − 1 ( x 2 k + 1 ) − z i ⋅ Φ n − i ( x 2 i ) ) U n ( q i ) < 2 i r ζ : = r − ∑ i = 0 n − 1 ( x 2 i Φ n − i − 1 ( x 2 i + 1 ) − z i ⋅ Φ n − i ( x 2 i ) ) ⋅ r i r Z : = r ^ − ∑ i = 0 n − 1 y i x 2 n − d i − 1 r i \zeta_x(X) := \hat{q}(X) - \sum_{i=0}^{n-1}y^ix^{2^n-d_i-1}\mathcal{U}_n(q_i)^{<2^i}\\
Z_x(X) := \mathcal{U}_n(f) - v \cdot \Phi_n(x) - \sum_{i=0}^{n-1}\left(x^{2^i}\Phi_{n-i-1}\left(x^{2^{k+1}}\right)- z_i \cdot \Phi_{n-i} \left( x^{2^i} \right) \right)\mathcal{U}_n(q_i)^{<2^i} \\
r_\zeta := r - \sum_{i=0}^{n-1}\left(x^{2^i}\Phi_{n-i-1}\left(x^{2^{i+1}}\right)-z_i \cdot \Phi_{n-i}\left(x^{2^i}\right)\right) \cdot r_i \\
r_Z := \hat{r} - \sum_{i=0}^{n-1}y^ix^{2^n-d_i-1}r_i ζ x ( X ) := q ^ ( X ) − i = 0 ∑ n − 1 y i x 2 n − d i − 1 U n ( q i ) < 2 i Z x ( X ) := U n ( f ) − v ⋅ Φ n ( x ) − i = 0 ∑ n − 1 ( x 2 i Φ n − i − 1 ( x 2 k + 1 ) − z i ⋅ Φ n − i ( x 2 i ) ) U n ( q i ) < 2 i r ζ := r − i = 0 ∑ n − 1 ( x 2 i Φ n − i − 1 ( x 2 i + 1 ) − z i ⋅ Φ n − i ( x 2 i ) ) ⋅ r i r Z := r ^ − i = 0 ∑ n − 1 y i x 2 n − d i − 1 r i The verifier checks the following equation:
e ( C ζ x + z ⋅ C Z x , [ s N m a x − ( 2 n − 1 ) ] 2 ) = ? e ( W , [ s − x ] 2 ) ⋅ e ( δ , [ ξ ] 2 ) e(C_{\zeta_x} + z \cdot C_{Z_x}, [s^{N_{\mathsf{max}}-(2^n-1)}]_2) \stackrel{?}= e(W, [s - x]_2) \cdot e(\delta, [\xi]_2) e ( C ζ x + z ⋅ C Z x , [ s N max − ( 2 n − 1 ) ] 2 ) = ? e ( W , [ s − x ] 2 ) ⋅ e ( δ , [ ξ ] 2 ) Where the values are defined as follows:
C ζ x : = C q ^ − ∑ i = 0 n − 1 y i x 2 n − d i − 1 C i C Z x : = [ U n ( f ) ( s ) ] 1 − [ v ⋅ Φ n ( x ) ] 1 − ∑ i = 0 n − 1 ( x 2 i Φ n − i − 1 ( x 2 i + 1 ) − z i ⋅ Φ n − i ( x 2 i ) ) ) ⋅ C i C_{\zeta_x} := C_{\hat{q}} - \sum_{i=0}^{n-1}y^ix^{2^n-d_i-1}C_i \\
C_{Z_x} := [\mathcal{U}_n(f)(s)]_1 - [v \cdot \Phi_n(x)]_1 - \sum_{i=0}^{n-1}\left(x^{2^i}\Phi_{n-i-1}\left(x^{2^{i+1}}\right) - z_i \cdot \Phi_{n-i}\left(x^{2^i})\right)\right)\cdot C_i C ζ x := C q ^ − i = 0 ∑ n − 1 y i x 2 n − d i − 1 C i C Z x := [ U n ( f ) ( s ) ] 1 − [ v ⋅ Φ n ( x ) ] 1 − i = 0 ∑ n − 1 ( x 2 i Φ n − i − 1 ( x 2 i + 1 ) − z i ⋅ Φ n − i ( x 2 i ) ) ) ⋅ C i Completeness Proof:
( ζ x ( s ) + r ζ + z ⋅ ( Z x ( s ) + r Z ) ) s N m a x − ( 2 n − 1 ) = ( ζ x ( s ) + z ⋅ Z x ( s ) ) s N m a x − ( 2 n − 1 ) + α ξ ( s − x ) + ( ( r ζ + z r Z ) s N m a x − ( 2 n − 1 ) − α ( s − x ) ) ξ = ( ζ x ( s ) + z ⋅ Z x ( s ) ) s N m a x − ( 2 n − 1 ) + ( r ζ + z r Z ) s N m a x − ( 2 n − 1 ) \begin{align*}
(\zeta_x(s) + r_{\zeta} + z \cdot (Z_x(s) + r_Z))s^{N_{\mathsf{max}} - (2^n - 1)} &= (\zeta_x(s) + z \cdot Z_x(s))s^{N_{\mathsf{max}} - (2^n - 1)} + \alpha\xi(s- x) + ((r_\zeta + z r_Z) s^{N_{\mathsf{max}} - (2^n - 1)}
- \alpha(s - x))\xi \\
&= (\zeta_x(s) + z \cdot Z_x(s))s^{N_{\mathsf{max}} - (2^n - 1)} + (r_\zeta + z r_Z) s^{N_{\mathsf{max}} - (2^n - 1)}
\end{align*} ( ζ x ( s ) + r ζ + z ⋅ ( Z x ( s ) + r Z )) s N max − ( 2 n − 1 ) = ( ζ x ( s ) + z ⋅ Z x ( s )) s N max − ( 2 n − 1 ) + α ξ ( s − x ) + (( r ζ + z r Z ) s N max − ( 2 n − 1 ) − α ( s − x )) ξ = ( ζ x ( s ) + z ⋅ Z x ( s )) s N max − ( 2 n − 1 ) + ( r ζ + z r Z ) s N max − ( 2 n − 1 ) Analysis:
s r s \mathsf{srs} srs (structure reference string) size : N m a x + 1 G 1 , N m a x + 1 G 2 N^{\mathsf{max}}+1\mathbb{G}_1, N^{\mathsf{max}}+1\mathbb{G}_2 N max + 1 G 1 , N max + 1 G 2
Prover work : O ( n ) M S M O(n)\ \mathsf{MSM} O ( n ) MSM
To compute each C i C_i C i , it takes 2 i + 1 M S M 2^i + 1 \ \mathsf{MSM} 2 i + 1 MSM operations.
To compute C q ^ C_{\hat{q}} C q ^ , it takes at most 2 n − 1 M S M 2^{n-1}\ \mathsf{MSM} 2 n − 1 MSM operations. This is because q ^ \hat{q} q ^ has nonzero coefficients ranging from a maximum degree of 2 n − 1 = 2 n − d n − 1 − 1 2^{n-1}=2^n- d_{n-1}-1 2 n − 1 = 2 n − d n − 1 − 1 to 2 n − 1 = 2 n − d 0 − 1 2^{n}-1 = 2^n - d_0 - 1 2 n − 1 = 2 n − d 0 − 1 .
To compute W W W , it takes at most 2 n M S M 2^n\ \mathsf{MSM} 2 n MSM operations.
To compute δ \delta δ , it takes 3 M S M 3\ \mathsf{MSM} 3 MSM operations: ( r ζ + z r Z ) ⋅ [ s N m a x − ( 2 n − 1 ) ] 1 − α ⋅ [ s ] 1 + α x ⋅ [ 1 ] 1 (r_\zeta + z r_Z) \cdot [ s^{N_{\mathsf{max}} - (2^n - 1)}]_1 -\alpha \cdot [s]_1 + \alpha x \cdot [1]_1 ( r ζ + z r Z ) ⋅ [ s N max − ( 2 n − 1 ) ] 1 − α ⋅ [ s ] 1 + αx ⋅ [ 1 ] 1 .
Proof length : n + 3 G 1 , 3 F n+3\mathbb{G}_1,3\mathbb{F} n + 3 G 1 , 3 F
n + 3 G 1 n + 3\mathbb{G}_1 n + 3 G 1 : ( C 0 , … , C n − 1 , C q ^ , W , δ ) (C_0, \dots, C_{n-1}, C_{\hat{q}}, W, \delta) ( C 0 , … , C n − 1 , C q ^ , W , δ )
3 F 3\mathbb{F} 3 F : ( y , x , z ) (y, x, z) ( y , x , z )
Verifier work : 2 n + 6 M S M 1 , 2 G 2 , 3 P 2n+6 \mathsf{MSM}_1, 2\mathbb{G}_2, 3\mathsf{P} 2 n + 6 MSM 1 , 2 G 2 , 3 P
To compute [ v ⋅ Φ n ( x ) ] 1 [v \cdot \Phi_n(x)]_1 [ v ⋅ Φ n ( x ) ] 1 , it takes 1 M S M 1\ \mathsf{MSM} 1 MSM operation.
To compute C Z x C_{Zx} C Z x , it takes n + 2 M S M n + 2\ \mathsf{MSM} n + 2 MSM operations.
To compute C ζ x C_{\zeta_x} C ζ x , it takes n + 1 M S M n + 1\ \mathsf{MSM} n + 1 MSM operations.
To compute C ζ x + z ⋅ C Z x C_{\zeta_x} + z \cdot C_{Z_x} C ζ x + z ⋅ C Z x , it takes 2 M S M 2\ \mathsf{MSM} 2 MSM operations.
To compuete [ s ] 2 − [ x ] 2 [s]_2 - [x]_2 [ s ] 2 − [ x ] 2 , it takes 2 G 2 2 \mathbb{G}_2 2 G 2 operations.
Here, M S M \mathsf{MSM} MSM represents MSM operations in G 1 \mathbb{G}_1 G 1 , F \mathbb{F} F represents addition or multiplication in F \mathbb{F} F , and P \mathsf{P} P denotes a pairing operation.
Shift Evaluation
In permutation arguments or lookup arguments like Plookup, computing the evaluations of shifted polynomials is necessary. For example, if f ∈ F [ X 0 , … , X n − 1 ] ≤ 1 f \in \mathbb{F}[X_0, \dots, X_{n-1}]^{\le 1} f ∈ F [ X 0 , … , X n − 1 ] ≤ 1 has the following evaluations:
v = { v 0 , v 1 , … , v 2 n − 2 , v 2 n − 1 } \bm{v} = \{ v_0, v_1, \dots, v_{2^n-2}, v_{2^n-1} \} v = { v 0 , v 1 , … , v 2 n − 2 , v 2 n − 1 } then the evaluations of s h i f t ( f ) \mathsf{shift}(f) shift ( f ) are:
v ′ = { v 1 , v 2 , … , v 2 n − 1 , v 0 } \bm{v'} = \{ v_1, v_2, \dots, v_{2^n-1}, v_0 \} v ′ = { v 1 , v 2 , … , v 2 n − 1 , v 0 } Applying the U n \mathcal{U}_n U n mapping results in:
U n ( f ) = v 0 + v 1 X ⋯ + v 2 n − 2 X 2 n − 2 + v 2 n − 1 X 2 n − 1 U n ( s h i f t ( f ) ) = v 1 + v 2 X + ⋯ + v 2 n − 1 X 2 n − 2 + v 0 X 2 n − 1 \mathcal{U}_n(f) = v_0 + v_1X \dots + v_{2^n-2}X^{2^n-2} + v_{2^n-1}X^{2^n-1} \\
\mathcal{U}_n(\mathsf{shift}(f) ) =v_1 + v_2X + \dots + v_{2^n-1}X^{2^n -2} + v_0X^{2^n -1} U n ( f ) = v 0 + v 1 X ⋯ + v 2 n − 2 X 2 n − 2 + v 2 n − 1 X 2 n − 1 U n ( shift ( f )) = v 1 + v 2 X + ⋯ + v 2 n − 1 X 2 n − 2 + v 0 X 2 n − 1 To prove s h i f t ( f ) ( z ) = v \mathsf{shift}(f)(\bm{z}) = v shift ( f ) ( z ) = v , we construct the following equation:
s h i f t ( f ) − v = ∑ i = 0 n − 1 ( X i − z i ) q i \mathsf{shift}(f) - v = \sum_{i=0}^{n-1}(X_i - z_i)q_i shift ( f ) − v = i = 0 ∑ n − 1 ( X i − z i ) q i and demonstrate the existence of a suitable q i q_i q i satisfying:
i = 0 ⇒ q 0 ∈ F i = 0 \Rightarrow q_0 \in \mathbb{F} i = 0 ⇒ q 0 ∈ F
0 < i < n ⇒ q i ∈ F [ X 0 , … , X i − 1 ] ≤ 1 0 < i < n \Rightarrow q_i \in \mathbb{F}[X_0, \dots, X_{i-1}]^{\le 1} 0 < i < n ⇒ q i ∈ F [ X 0 , … , X i − 1 ] ≤ 1
Applying the transformation from equation ( 1 ) (1) ( 1 ) to ( 5 ) (5) ( 5 ) , we obtain:
U n ( s h i f t ( f ) ) − v ⋅ Φ n ( X ) = ∑ i = 0 n − 1 ( X 2 i Φ n − i − 1 ( X 2 i + 1 ) − z i ⋅ Φ n − i ( X 2 i ) ) U n ( q i ) < 2 i ( 6 ) \begin{align*}
\mathcal{U}_n(\mathsf{shift}(f)) - v \cdot \Phi_n(X) = \sum_{i=0}^{n-1}\left(X^{2^i}\Phi_{n-i-1}\left(X^{2^{i+1}}\right)- z_i \cdot \Phi_{n-i}\left(X^{2^i}\right)\right) \mathcal{U}_n(q_i)^{<2^i} && (6)
\end{align*} U n ( shift ( f )) − v ⋅ Φ n ( X ) = i = 0 ∑ n − 1 ( X 2 i Φ n − i − 1 ( X 2 i + 1 ) − z i ⋅ Φ n − i ( X 2 i ) ) U n ( q i ) < 2 i ( 6 ) Multiplying U n ( s h i f t ( f ) ) \mathcal{U}_n(\mathsf{shift}(f)) U n ( shift ( f )) by X X X , we get:
X U n ( s h i f t ( f ) ) = v 1 X + v 2 X 2 + ⋯ + v 2 n − 1 X 2 n − 1 + v 0 X 2 n = v 0 + v 1 X + v 2 X 2 + ⋯ + v 2 n − 1 X 2 n − 1 + v 0 X 2 n − v 0 = U n ( f ) + v 0 ( X 2 n − 1 ) \begin{align*}
X\mathcal{U}_n(\mathsf{shift}(f)) &= v_1X + v_2X^2 + \dots +v_{2^n-1}X^{2^n-1} + v_0X^{2^n} \\
&= v_0 + v_1X + v_2X^2 + \dots +v_{2^n-1}X^{2^n-1} + v_0X^{2^n} - v_0 \\
&= \mathcal{U}_n(f) + v_0(X^{2^n} - 1)
\end{align*} X U n ( shift ( f )) = v 1 X + v 2 X 2 + ⋯ + v 2 n − 1 X 2 n − 1 + v 0 X 2 n = v 0 + v 1 X + v 2 X 2 + ⋯ + v 2 n − 1 X 2 n − 1 + v 0 X 2 n − v 0 = U n ( f ) + v 0 ( X 2 n − 1 ) Thus, multiplying both sides of equation ( 6 ) (6) ( 6 ) by X X X , we obtain:
U n ( f ) + v 0 ( X 2 n − 1 ) − v ⋅ X Φ n ( X ) = X ⋅ ∑ i = 0 n − 1 ( X 2 i Φ n − i − 1 ( X 2 i + 1 ) − z i ⋅ Φ n − i ( X 2 i ) ) U n ( q i ) < 2 i ( 7 ) \begin{align*}
\mathcal{U}_n(f) + v_0(X^{2^n} - 1)
- v \cdot X \Phi_n(X) = X \cdot \sum_{i=0}^{n-1}\left(X^{2^i}\Phi_{n-i-1}\left(X^{2^{i+1}}\right)- z_i \cdot \Phi_{n-i}\left(X^{2^i}\right)\right) \mathcal{U}_n(q_i)^{<2^i} && (7)
\end{align*} U n ( f ) + v 0 ( X 2 n − 1 ) − v ⋅ X Φ n ( X ) = X ⋅ i = 0 ∑ n − 1 ( X 2 i Φ n − i − 1 ( X 2 i + 1 ) − z i ⋅ Φ n − i ( X 2 i ) ) U n ( q i ) < 2 i ( 7 ) Since equation ( 7 ) (7) ( 7 ) holds, we can prove that s h i f t ( f ) \mathsf{shift}(f) shift ( f ) is indeed a shifted version of f f f by committing only once to U n ( f ) \mathcal{U}_n(f) U n ( f ) and then using it to verify the evaluation claim of s h i f t ( f ) \mathsf{shift}(f) shift ( f ) .
Conclusion
The multilinear polynomial identity originally required n n n pairing operations. However, thanks to U n \mathcal{U}_n U n mapping, the verifier can now perform the expensive pairing computation in just three operations.
Meanwhile, to prove that q i q_i q i is bounded by a certain degree, the degree check protocol must be executed, which requires an s r s \mathsf{srs} srs proportional to N m a x N_{\mathsf{max}} N max in G 1 \mathbb{G}_1 G 1 and G 2 \mathbb{G}_2 G 2 . Fortunately, the verifier does not need to perform the costly G 2 \mathbb{G}_2 G 2 operations.
Additionally, an important point is that for hiding, only log N + 5 \log N + 5 log N + 5 elements in G 1 \mathbb{G}_1 G 1 are required.
References