Mina中的多项式承诺方案

1. 引言

Mina系列博客有:

2. 多项式 VS 函数

R R R为某域,基于域 R R R变量为 X X X的多项式表示为:
a 0 + a 1 X + a 2 X 2 + ⋯ + a d X d a_0+a_1X+a_2X^2+\cdots +a_dX^d a0+a1X+a2X2++adXd
其中 a i ∈ R a_i\in R aiR d d d为任意自然数。

针对基于 R R R的多项式的函数 e v a l : R [ X ] → ( R → R ) \mathsf{eval}:R[X]\rightarrow (R\rightarrow R) eval:R[X](RR)定义为:【可将 e v a l \mathsf{eval} eval看成是对多项式采样。】
e v a l ( a 0 + a 1 X + ⋯ + a d X d ) = ( x : R ) ↦ a 0 + a 1 x + ⋯ + a d x d \mathsf{eval}(a_0+a_1X+\cdots+a_dX^d)=(x:R)\mapsto a_0+a_1x+\cdots +a_dx^d eval(a0+a1X++adXd)=(x:R)a0+a1x++adxd
其中 X X X为未赋值的变量名, e v a l \mathsf{eval} eval将其映射为field element x x x,整个evaluation函数可看成是系数 < a 0 , a 1 , ⋯   , a d > <a_0,a_1,\cdots,a_d> <a0,a1,,ad> < 1 , x , ⋯   , x d > <1,x,\cdots, x^d> <1,x,,xd>的inner product。

注意,多项式与函数是不同的。多项式是一组系数列表,基于某些域值,对于多项式 p 1 , p 2 p1,p2 p1,p2,会存在 e v a l ( p 1 ) = e v a l ( p 2 ) \mathsf{eval}(p1)=\mathsf{eval}(p2) eval(p1)=eval(p2),但 p 1 ≠ p 2 p1\neq p2 p1=p2的情况。
如,以 F 2 [ X ] \mathbb{F}_2[X] F2[X]为域的多项式 X X X X 2 X^2 X2,二者可映射为相同的函数 F 2 → F 2 \mathbb{F}_2\rightarrow \mathbb{F}_2 F2F2(即意味着对 x ∈ R = F 2 = { 0 , 1 } x\in R=\mathbb{F}_2=\{0,1\} xR=F2={ 0,1} x = x 2 x=x^2 x=x2),但是二者是不同的多项式。

使用多项式的原因在于:

  • 1)将关于一组域值的statement 转换为 关于多项式的statement,从而可构建zkSNARKs。
  • 2)基于多项式的特定运算效率更高。

对于函数 φ : A → F \varphi: A\rightarrow F φ:AF A A A为数组,长度为 ∣ A ∣ |A| A,需基于 ∀ x ∈ A , ( x , φ ( x ) ) \forall x\in A, (x,\varphi(x)) xA,(x,φ(x))进行插值构建多项式。
对于每一个 x i ∈ A x_i\in A xiA,可构建多项式:
f i ( X ) = { φ ( x i ) X = x i 0 X ≠ x i f_{i}(X) =\left\{\begin{matrix} \varphi(x_i)& X=x_i\\ 0 & X\neq x_i \end{matrix}\right. fi(X)={ φ(xi)0X=xiX=xi
最终的多项式: f ( X ) = ∑ i f i ( X ) f(X)=\sum_if_i(X) f(X)=ifi(X)

相应的vanishing 多项式表示为:
v S ( X ) = ( X − x 0 ) ( X − x 1 ) ⋯ ( X − x d ) v_S(X)=(X-x_0)(X-x_1)\cdots(X-x_d) vS(X)=(Xx0)(Xx1)(Xxd)

同时有 i n t e r p A ( e v a l A ( f ) ) = f \mathsf{interp}_A(\mathsf{eval}_A(f))=f interpA(evalA(f))=f,即对多项式 f f f基于 A A A采样后,再插值获得的多项式仍然是 f f f。(多项式degree为 d d d,不同的采样点数为 d + 1 d+1 d+1。)【 i n t e r p A \mathsf{interp}_A interpA e v a l A \mathsf{eval}_A evalA为同构集合(即双射),为同构环。】

对同一Field,两个不同多项式 f , g f,g f,g的最大degree为 d d d,若在 d + 1 d+1 d+1个不同的点 x i x_i xi均有 f ( x i ) = g ( x i ) f(x_i)=g(x_i) f(xi)=g(xi),则认为2多项式相等,即 f = g f=g f=g
对2个不同多项式 f , g : A → F f,g:A\rightarrow F f,g:AF采样后的加法、惩罚运算可表示为: f + g : = a ↦ f ( a ) + g ( a ) , f ⋅ g = a ↦ f ( a ) ⋅ g ( a ) f+g:=a\mapsto f(a)+g(a),f\cdot g=a\mapsto f(a)\cdot g(a) f+g:=af(a)+g(a)fg=af(a)g(a)

Fundamental theorem of polynomials (final version)

Let d ∈ N d \in \N dN and let A ⊆ F A \subseteq F AF with ∣ A ∣ = d + 1 |A| = d + 1 A=d+1. With

e v a l A  ⁣ : F [ x ] ≤ d → ( A → F ) i n t e r p A  ⁣ : ( A → F ) → F [ x ] ≤ d \mathsf{eval}_A \colon F[x]_{\leq d} \to (A \to F)\\ \mathsf{interp}_A \colon (A \to F) \to F[x]_{\leq d} evalA:F[x]d(AF)interpA:(AF)F[x]d

defined as above, these two functions define an isomorphism of rings.

That is is, they are mutually inverse and each one respects addition, subtraction and multiplication.

基于以上表示,可借助FFT算法以 O ( n log ⁡ n ) O(n\log n) O(nlogn)实现2个degree为 n n n的多项式乘法运算,而直接的乘法运算需要 O ( n 2 ) O(n^2) O(n2)

3. 多项式的程序表示

在实际计算机实现时,对多项式有3种常用的表达方式:

  • 1)dense coefficient形式:将degree为 d d d的多项式以长度为 d + 1 d+1 d+1的向量来表示其所有系数。该向量中的第 i i i个元素对应系数 a i a_i ai。这就是arkworks中的DensePolynomial类型。有时也可以单项式集合来表示多项式,因为多项式是单项式 x i x^i xi的线性组合。【系数表示法】
  • 2)sparse coefficient形式:若多项式中没有很多非零系数,则以dense coefficient来表示将很浪费。采用sparse形式,可将多项式表示为pairs ( u s i z e , F ) (usize,F) (usize,F)向量,其中 F F F为系数的类型。数组 [ ( i 0 , b 0 ) , ⋯   , ( i n , b n ) ] [(i_0,b_0),\cdots ,(i_n,b_n)] [(i0,b0),,(in,bn)]对应的多项式为 b 0 x i 0 + ⋯ + b n x i n b_0x^{i_0}+\cdots + b_nx^{i_n} b0xi0++bnxin
  • 3)evaluation形式。对于固定的index set A ⊆ F A\subseteq F AF,其中 A = { a 0 , ⋯   , a d } A=\{a_0,\cdots, a_d\} A={ a0,,ad},将多项式 f ∈ F [ X ] ≤ d f\in F[X]_{\leq d} fF[X]d表示为向量 [ f ( a 0 ) , ⋯   , f ( a d ) ] [f(a_0), \cdots, f(a_d)] [f(a0),,f(ad)]。【点值表示法】

evaluation形式很重要,因为evaluation形式下,2个多项式相乘仅需对2个向量中的对应每个元素相乘,所需time为 O ( n ) O(n) O(n)。而直接相乘需要 O ( n 2 ) O(n^2) O(n2)

对于特定的集合 A ⊆ F A\subseteq F AF,可高效的在dense coefficient形式和evaluation形式之间相互转换。因为,对于特定的 A A A i n t e r p A \mathsf{interp}_A interpA e v a l A \mathsf{eval}_A evalA的计算效率要远远优于 O ( n 2 ) O(n^2) O(n2)

4. FFT计算多项式乘法

前序博客有:

通过Cooley-Tukey fast Fourier transform(简称FFT)算法(由Gauss 160年前发明,但由Cooley-Tukey独立再发现并公布),进行多项式乘法运算所需复杂度为 O ( n log ⁡ n ) O(n\log n) O(nlogn)

FFT算法的核心是系数表示法与点值表示法之间的相互转换,而不是直接进行多项式乘法运算。给定以dense coefficient表示的2个degree为 n − 1 n-1 n1的多项式 p , q p,q p,q,FFT计算 p ⋅ q p\cdot q pq的流程为:

  • 1)借助FFT,将 p , q p,q p,q由系数表示法转换为点值表示法,相应的复杂度为 O ( n log ⁡ n ) O(n\log n) O(nlogn)
  • 2)依次将2个点值表示法的每个元素相乘 r = p ∗ q r=p*q r=pq,相应的复杂度为 O ( n ) O(n) O(n)
  • 3)借助iFFT,将点值表示的 r r r转换为系数表示,相应的复杂度为 O ( n log ⁡ n ) O(n\log n) O(nlogn)

关键点在于,可选择任意 n n n个不同的evaluation点来表示任意的degree为 n − 1 n-1 n1的多项式。Cooley-Tukey FFT通过选择合适的点来生成高效的FFT算法,这些点为固定的,且适于特定degree的任意多项式。

特别地,具有 n n n-th root of unity ω ∈ F \omega\in F ωF,使得 ω n = 1 \omega^n=1 ωn=1,且对于任意的 0 < r < n 0<r<n 0<r<n,有 ω r ≠ 1 \omega^r\neq 1 ωr=1
1 , ω , ω 2 , ω 3 , ⋯   , ω n − 1 1,\omega,\omega^2,\omega^3,\cdots,\omega^{n-1} 1,ω,ω2,ω3,,ωn1 n n n个完全不同的点,且 ω n = 1 \omega^n=1 ωn=1。也可将其称为是由 ω \omega ω F × F^{\times} F×内生成的size为 n n n的group。

n = 2 k n=2^{k} n=2k,且 ω \omega ω 2 k 2^k 2k-th root of unity,且 A k = { 1 , ω , ⋯   , ω 2 k − 1 } A_k=\{1,\omega, \cdots, \omega ^{2^k-1}\} Ak={ 1,ω,,ω2k1}

F F T ( k , ω , f ) \mathsf{FFT}(k,\omega,f) FFT(k,ω,f)算法的输入 有:

  • k ∈ N k\in\mathbb{N} kN
  • ω ∈ F \omega\in F ωF 2 k 2^k 2k-th root of unity
  • f ∈ F [ X ] < 2 k f\in F[X]_{<2^k} fF[X]<2k为dense coefficient形式(即长度为 n n n的系数向量)

F F T ( k , ω , f ) \mathsf{FFT}(k,\omega,f) FFT(k,ω,f)算法的输出为evaluation向量:
[ f ( 1 ) , f ( ω ) , f ( ω 2 ) , ⋯   , f ( ω 2 k − 1 ) ] [f(1),f(\omega),f(\omega^2),\cdots,f(\omega^{2^k-1})] [f(1),f(ω),f(ω2),,f(ω2k1)]

F F T ( k , ω , f ) \mathsf{FFT}(k,\omega,f) FFT(k,ω,f)算法的复杂度为 O ( k 2 k ) O(k2^k) O(k2k)(若 n = 2 k n=2^k n=2k,亦为 O ( n log ⁡ n ) O(n\log n) O(nlogn))。【若直接根据 f f f的系数来计算每个 f ( ω i ) f(\omega^i) f(ωi) O ( n ) O(n) O(n),计算 n n n次总的为 O ( n 2 ) O(n^2) O(n2)。】
核心在于FFT算法中的递归调用。
将多项式按奇偶项拆分表示为:
f ( x ) = ∑ i < 2 k c i x i = ∑ i < 2 k − 1 c 2 i x 2 i + ∑ i < 2 k − 1 c 2 i + 1 x 2 i + 1 = ∑ i < 2 k − 1 c 2 i ( x 2 ) i + ∑ i < 2 k − 1 c 2 i + 1 x ⋅ ( x 2 ) i = ∑ i < 2 k − 1 c 2 i ( x 2 ) i + x ∑ i < 2 k − 1 c 2 i + 1 ( x 2 ) i = f 0 ( x 2 ) + x f 1 ( x 2 ) \begin{aligned} f(x) &= \sum_{i < 2^k} c_i x^i \\ &= \sum_{i < 2^{k-1}} c_{2i} x^{2i} + \sum_{i < 2^{k-1}} c_{2i + 1} x^{2i + 1} \\ &= \sum_{i < 2^{k-1}} c_{2i} (x^2)^i+ \sum_{i < 2^{k-1}} c_{2i + 1} x \cdot (x^2)^i \\ &= \sum_{i < 2^{k-1}} c_{2i} (x^2)^i+ x \sum_{i < 2^{k-1}} c_{2i + 1} (x^2)^i \\ &= f_0(x^2) + x f_1(x^2) \end{aligned} f(x)=i<2kcixi=i<2k1c2ix2i+i<2k1c2i+1x2i+1=i<2k1c2i(x2)i+i<2k1c2i+1x(x2)i=i<2k1c2i(x2)i+xi<2k1c2i+1(x2)i=f0(x2)+xf1(x2)
注意,若 ω \omega ω 2 k 2^k 2k-th root of unity,则 ω 2 \omega^2 ω2 2 k − 1 2^{k-1} 2k1-th root of unity。可递归调用 F F T ( k − 1 , ω 2 , f 0 ) \mathsf{FFT}(k-1,\omega^2,f_0) FFT(k1,ω2,f0) F F T ( k − 1 , ω 2 , f 1 ) \mathsf{FFT}(k-1,\omega^2,f_1) FFT(k1,ω2,f1)。令:
[ e 0 , 0 , … , e 0 , 2 k − 1 − 1 ] = F F T ( k − 1 , ω 2 , f 0 ) [ e 1 , 0 , … , e 1 , 2 k − 1 − 1 ] = F F T ( k − 1 , ω 2 , f 1 ) \begin{aligned} [e_{0, 0}, \dots, e_{0, 2^{k-1} - 1}] &= \mathsf{FFT}(k-1, \omega^2, f_0) \\ [e_{1, 0}, \dots, e_{1, 2^{k-1} - 1}] &= \mathsf{FFT}(k-1, \omega^2, f_1) \end{aligned} [e0,0,,e0,2k11][e1,0,,e1,2k11]=FFT(k1,ω2,f0)=FFT(k1,ω2,f1)

假设 e i , j = f i ( ( ω 2 ) j ) e_{i, j} = f_i((\omega^2)^j) ei,j=fi((ω2)j),则对任意的 j j j有:
f ( ω j ) = f 0 ( ( ω 2 ) j ) + ω j f 1 ( ( ω 2 ) j ) \begin{aligned} f(\omega^j) &= f_0((\omega^2)^j) + \omega^j f_1((\omega^2)^j) \end{aligned} f(ωj)=f0((ω2)j)+ωjf1((ω2)j)

由于 j j j可能大于 2 k − 1 − 1 2^{k-1}-1 2k11,因此需将其reduce为 m o d    2 k − 1 \mod 2^{k-1} mod2k1。若 τ \tau τ n n n-th root of unity 则有: τ j = τ j m o d    n \tau^j = \tau^{j \mod n} τj=τjmodn τ n = 1 \tau^n = 1 τn=1。因此有:
( ω 2 ) j = ( ω 2 ) j m o d    2 k − 1 (\omega^2)^j = (\omega^2)^{j \mod 2^{k-1}} (ω2)j=(ω2)jmod2k1
从而有:
f ( ω j ) = f 0 ( ( ω 2 ) j m o d    2 k − 1 ) + ω j f 1 ( ( ω 2 ) j m o d    2 k − 1 ) = e 0 , j m o d    2 k − 1 + ω j e 1 , j m o d    2 k − 1 \begin{aligned} f(\omega^j) &= f_0((\omega^2)^{j \mod 2^{k-1}} ) + \omega^j f_1((\omega^2)^{j \mod 2^{k-1}}) \\ &= e_{0, j \mod 2^{k-1}} + \omega^j e_{1, j \mod 2^{k-1}} \end{aligned} f(ωj)=f0((ω2)jmod2k1)+ωjf1((ω2)jmod2k1)=e0,jmod2k1+ωje1,jmod2k1
计算数组 W = [ 1 , ω , … , ω 2 k − 1 ] W = [ 1, \omega, \dots, \omega^{2^k - 1}] W=[1,ω,,ω2k1] 的复杂度为 O ( n ) O(n) O(n) (因为每个元素为前一元素乘以 ω \omega ω),然后可以 O ( 1 ) O(1) O(1)复杂度计算:
f ( ω j ) = e 0 , j m o d    2 k − 1 + W [ j ] ⋅ e 1 , j m o d    2 k − 1 \begin{aligned} f(\omega^j) &= e_{0, j \mod 2^{k-1}} + W[j] \cdot e_{1, j \mod 2^{k-1}} \end{aligned} f(ωj)=e0,jmod2k1+W[j]e1,jmod2k1
由于需计算 n n n个类似元素,因此总复杂度为 O ( n ) O(n) O(n)

完整的 F F T ( k , ω , f ) \mathsf{FFT}(k, \omega, f) FFT(k,ω,f)递归算法示意如下:【将系数表示法转换为点值表示法】

Algorithm: computing e v a l A k \mathsf{eval}_{A_k} evalAk

  • I n p u t   f = [ c 0 , … , c 2 k − 1 ] \mathsf{Input~} f = [c_0, \ldots, c_{2^k - 1}] Input f=[c0,,c2k1] the coefficients of polynomial f ( x ) = ∑ i < 2 k c i x i f(x) = \sum_{i < 2^k} c_i x^i f(x)=i<2kcixi
  • C o m p u t e   W ← [ 1 , ω , ω 2 , . . . , ω 2 k − 1 ] \mathsf{Compute~} W \gets \left[1, \omega, \omega^2, ..., \omega^{2^k - 1}\right] Compute W[1,ω,ω2,...,ω2k1]【复杂度为 O ( n ) O(n) O(n)
  • F F T ( k , ω , f ) → [ f ( 1 ) , f ( ω ) , f ( ω 2 ) … , f ( ω 2 k − 1 ) ] \mathsf{FFT}(k, \omega, f) \rightarrow \left[f(1), f(\omega), f(\omega^2) \dots, f(\omega^{2^k - 1})\right] FFT(k,ω,f)[f(1),f(ω),f(ω2),f(ω2k1)]
    • i f   k = = 0 \mathtt{if~} k == 0 if k==0
      • r e t u r n   f \mathtt{return~} f return f
    • e l s e \mathtt{else} else
      • C o m p u t e   f 0 = [ c 0 , c 2 , . . . , c 2 k − 2 ] \mathsf{Compute~} f_0 = [c_0, c_2, ..., c_{2^k - 2}] Compute f0=[c0,c2,...,c2k2] the even coefficients of f , f, f, corresponding to f 0 ( x ) = ∑ i < 2 k − 1 c 2 i x i f_0(x) = \sum_{i < 2^{k - 1}} c_{2i} x^i f0(x)=i<2k1c2ixi
      • C o m p u t e   f 1 = [ c 1 , c 3 , . . . , c 2 k − 1 ] \mathsf{Compute~} f_1 = [c_1, c_3, ..., c_{2^k - 1}] Compute f1=[c1,c3,...,c2k1] the odd coefficients of f , f, f, corresponding to f 1 ( x ) = ∑ i < 2 k − 1 c 2 i + 1 x i f_1(x) = \sum_{i < 2^{k - 1}} c_{2i + 1} x^i f1(x)=i<2k1c2i+1xi【计算 f 0 f_0 f0 f 1 f_1 f1的复杂度为 O ( n ) O(n) O(n)
      • e 0 ← F F T ( k − 1 , ω 2 , f 0 ) e_0 \gets \mathsf{FFT}(k - 1, \omega^2, f_0) e0FFT(k1,ω2,f0)【递归调用size为 n / 2 n/2 n/2
      • e 1 ← F F T ( k − 1 , ω 2 , f 1 ) e_1 \gets \mathsf{FFT}(k - 1, \omega^2, f_1) e1FFT(k1,ω2,f1)【递归调用size为 n / 2 n/2 n/2
      • f o r   j ∈ [ 0 , 2 k − 1 ] \mathtt{for~} j \in [0, 2^k - 1] for j[0,2k1]【将递归调用结果组合复杂度为 O ( n ) O(n) O(n)
        • F j ← e 0 , j m o d    2 k − 1 + W [ j ] ⋅ e 1 , j m o d    2 k − 1 F_j \gets e_{0, j \mod 2^{k - 1}} + W[j] \cdot e_{1, j \mod 2^{k - 1}} Fje0,jmod2k1+W[j]e1,jmod2k1
      • r e t u r n   F \mathtt{return~} F return F

T ( n ) T(n) T(n)来表示size为 n n n n = 2 k n=2^k n=2k)的instance的复杂度,则以上算法总的复杂度为:
O ( n ) + 2 T ( n / 2 ) O(n)+2T(n/2) O(n)+2T(n/2)
T ( n ) = O ( n ) ⋅ log ⁡ n = O ( n log ⁡ n ) T(n)=O(n)\cdot \log n=O(n\log n) T(n)=O(n)logn=O(nlogn),因为一共有 log ⁡ n \log n logn次递归调用,每次复杂度为 O ( n ) O(n) O(n)

不过实际实现时,可以非递归的方式实现更好的性能。

将系数表示法转换为点值表示法的算法流程为:【复杂度也为 O ( n log ⁡ n ) O(n\log n) O(nlogn)

Algorithm: computing i n t e r p A k \mathsf{interp}_{A_k} interpAk

  1. Input: [ a 0 , … , a n − 1 ] [a_0, \dots, a_{n-1}] [a0,,an1] the points we want to interpolate and ω \omega ω a n n nth root of unity.

  2. Interpret the input array as the coefficients of a polynomial g = ∑ i < n a i x n g = \sum_{i < n} a_i x^n g=i<naixn.

  3. Let [ e 0 , … , e n ] = F F T ( k , ω − 1 , g ) [e_0, \dots, e_n] = \mathsf{FFT}(k, \omega^{-1}, g) [e0,,en]=FFT(k,ω1,g).

  4. Output the polynomial ∑ i < n ( e i / n ) x i \sum_{i < n}(e_i / n) x^i i<n(ei/n)xi. I.e., in terms of the dense-coefficients form, output the vector [ e 0 / n , … , e n − 1 / n ] [e_0 / n, \dots, e_{n - 1}/n] [e0/n,,en1/n].

5. 多项式承诺

前序博客有:

commitment应具有hiding和binding属性。同时具有一定的同态属性(如基于pairing的commitment具有乘法同态属性;基于DLG的commitment具有加法同态属性。)
polynomial commitment中包含的3个主要算法为:

  • 1)Commit算法
  • 2)Open算法
  • 3)Verify算法
    在这里插入图片描述

当前的polynomial commitment 方案主要分为:

Technology 基于的密码学假设 Proof size Verification time
FRI Hashes only(quantum safe!) Large(10-200kB) Medium(poly-logarithmic)
Inner product arguments (IPAs) Basic elliptic curves Medium (1-3 kB) Very high (linear)
KZG commitments Elliptic curves + pairings + trusted setup Short (~500 bytes) Low (constant)
IPA + Halo-style aggregation Basic elliptic curves Medium (1-3 kB) Medium (constant but higher than KZG)

5.1 inner product argument

前序博客有:

Mina中采用的为inner product argument多项式承诺方案。
Inner product argument的发展历程为:

详细的衍化历程为:【仅 a ⃗ \vec{a} a 为secret info。】

  • 1)直接的方案为Prover将secret info a ⃗ \vec{a} a 发送给Verifier:
    ⟨ a ⃗ , b ⃗ ⟩ = z given  b ⃗ ,  z , and a hash of  a ⃗    open proof ←    a ⃗ \boxed{ \begin{aligned} & \langle \vec{a}, \vec{b} \rangle = z\\ & \text{given } \vec{b} \text{, } z \text{, and a hash of } \vec{a} \end{aligned} } \; \overleftarrow{\text{open proof}} \; \boxed{\vec{a}} a ,b =zgiven b z, and a hash of a open proof a

  • 2)引入中间reduction proof为:【其中 a ⃗ ′ \vec{a}' a 的size 为 a ⃗ \vec{a} a 的一半,最终的open proof ( a ⃗ ) ′ (\vec{a})' (a ) size 也为方案1)中的一半。】
    ⟨ a ⃗ , b ⃗ ⟩ = z given  b ⃗ ,  z , and a hash of  a ⃗    reduction proof ←    ⟨ a ′ ⃗ , b ′ ⃗ ⟩ = z ′  given  b ′ ⃗ ,  z ′ , and a hash of  a ′ ⃗    open proof ←    a ′ ⃗ \boxed{\begin{aligned} & \langle \vec{a}, \vec{b} \rangle = z\\ & \text{given } \vec{b} \text{, } z \text{, and a hash of } \vec{a} \end{aligned}} \; \overleftarrow{\text{reduction proof}} \; \boxed{\begin{aligned} & \langle \vec{a'}, \vec{b'} \rangle = z'\\ & \text{ given } \vec{b'} \text{, } z' \text{, and a hash of } \vec{a'} \end{aligned}} \; \overleftarrow{\text{open proof}} \; \boxed{\vec{a'}} a ,b =zgiven b z, and a hash of a reduction proof a ,b =z given b z, and a hash of a open proof a
    其中的reduction proof为最神奇之处,运行该reduction log ⁡ 2 ( n ) \log_2(n) log2(n)次,最终的opening proof size可减为1。当然整个proof中不只包含该size为1的final opening proof,还包含在reduction中的所有元素,总的大小仍要远小于原始的proof size n n n。总的proof size主要来源于这多个reduction subproofs。总的proof实际是这些subproofs(或miniproofs)的集合。

以多项式 f = a 1 + a 2 x + a 3 x 2 + a 4 x 3 f=a_1+a_2x+a_3x^2+a_4x^3 f=a1+a2x+a3x2+a4x3为例,有 a ⃗ = ( a 1 , a 2 , a 3 , a 4 ) \vec{a}=(a_1,a_2,a_3,a_4) a =(a1,a2,a3,a4) G ⃗ = ( G 1 , G 2 , G 3 , G 4 ) \vec{G}=(G_1,G_2,G_3,G_4) G =(G1,G2,G3,G4)为相互不知道discret logarithm关系的generators。
inner product argument针对的场景为:
在这里插入图片描述

  • 1)Prover发送对多项式 f f f的commitment值: A = < a ⃗ , G ⃗ > A=<\vec{a},\vec{G}> A=<a ,G >为对 a ⃗ \vec{a} a 的commitment。
  • 2)Verifier发送evaluation point s s s,请求evaluation值 f ( s ) f(s) f(s),有: b ⃗ = ( b 1 , b 2 , b 3 , b 4 ) = ( 1 , s , s 2 , s 3 ) \vec{b}=(b_1,b_2,b_3,b_4)=(1,s,s^2,s^3) b =(b1,b2,b3,b4)=(1,s,s2,s3)
    Verifier还发送random challenge x x x
  • 3)Prover发送evaluation结果 z z z 以及 相应的proof。

其中Verifier发送的random challenge x x x用于实现half reduction:

  • a ′ ⃗ = x − 1 ( a 1 a 2 ) + x ( a 3 a 4 ) = ( x − 1 a 1 + x a 3 x − 1 a 2 + x a 4 ) \vec{a'} = x^{-1} \begin{pmatrix}a_1 \\ a_2\end{pmatrix} + x \begin{pmatrix}a_3 \\ a_4\end{pmatrix}=\begin{pmatrix}x^{-1} a_1 + x a_3 \\ x^{-1} a_2 + x a_4 \end{pmatrix} a =x1(a1a2)+x(a3a4)=(x1a1+xa3x1a2+xa4)
  • b ′ ⃗ = x ( b 1 b 2 ) + x − 1 ( b 3 b 4 ) = ( x b 1 + x − 1 b 3 x b 2 + x − 1 b 4 ) \vec{b'} = x \begin{pmatrix}b_1 \\ b_2\end{pmatrix} + x^{-1} \begin{pmatrix}b_3 \\ b_4\end{pmatrix}=\begin{pmatrix}x b_1 + x^{-1} b_3 \\ x b_2 + x^{-1} b_4 \end{pmatrix} b =x(b1b2)+x1(b3b4)=(xb1+x1b3xb2+x1b4)
  • G ′ ⃗ = x ( G 1 G 2 ) + x − 1 ( G 3 G 4 ) = ( x G 1 + x − 1 G 3 x G 2 + x − 1 G 4 ) \vec{G'} = x \begin{pmatrix}G_1 \\ G_2\end{pmatrix} + x^{-1} \begin{pmatrix}G_3 \\ G_4\end{pmatrix}=\begin{pmatrix}x G_1 + x^{-1} G_3 \\ x G_2 + x^{-1} G_4 \end{pmatrix} G =x(G1G2)+x1(G3G4)=(xG1+x1G3xG2+x1G4)

这样将待证明的问题由 < a ⃗ , b ⃗ > = z <\vec{a},\vec{b}>=z <a ,b >=z reduce为 证明 < a ⃗ ′ , b ⃗ ′ > = z ′ <\vec{a}',\vec{b}'>=z' <a ,b >=z
此时,Prover可直接将 a ⃗ ′ , b ⃗ ′ , z ′ \vec{a}',\vec{b}',z' a ,b ,z直接发送给Verifier,Verifier验证 < a ⃗ ′ , b ⃗ ′ > = z ′ <\vec{a}',\vec{b}'>=z' <a ,b >=z确实成立。但是,此时仍然有2个问题:

  • 1)需要向Verifier证明 < a ⃗ ′ , b ⃗ ′ > = z ′ <\vec{a}',\vec{b}'>=z' <a ,b >=z确实等价为之前的statement < a ⃗ , b ⃗ > = z <\vec{a},\vec{b}>=z <a ,b >=z
  • 2)Verifier需要自己来计算 z ′ , b ⃗ ′ , G ⃗ ′ 和 A ′ = < b ⃗ ′ , G ⃗ ′ > z',\vec{b}',\vec{G}' 和A'=<\vec{b}',\vec{G}'> z,b ,G A=<b ,G >

其中:

  • (1) A ′ A' A 的计算逻辑为:
    A ′ ⃗ = ⟨ a ′ ⃗ , G ′ ⃗ ⟩ = ( x − 1 a 1 + x a 3 ) ( x G 1 + x − 1 G 3 ) + ( x − 1 a 2 + x a 4 ) ( x G 2 + x − 1 G 4 ) = A + x − 2 ( a 1 G 3 + a 2 G 4 ) + x 2 ( a 3 G 1 + a 4 G 2 ) = A + x − 2 L a + x 2 R a \begin{aligned} \vec{A'} =& \langle \vec{a'}, \vec{G'} \rangle \\ =& (x^{-1} a_1 + x a_3)(x G_1 + x^{-1} G_3) + (x^{-1} a_2 + x a_4)(x G_2 + x^{-1}G_4) \\ =& A + x^{-2} (a_1 G_3 + a_2 G_4) + x^2 (a_3 G_1 + a_4 G_2) \\ =& A + x^{-2} L_a + x^{2} R_a \end{aligned} A ====a ,G (x1a1+xa3)(xG1+x1G3)+(x1a2+xa4)(xG2+x1G4)A+x2(a1G3+a2G4)+x2(a3G1+a4G2)A+x2La+x2Ra
    为了计算 A ′ A' A,Verifier需要:
    • 之前的commitment A A A,Verifier已知。
    • x x x的一些幂值 x 2 , x − 2 x^2,x^{-2} x2,x2,Verifier可自己计算。
    • 2个curve point L a , R a L_a,R_a La,Ra,可由Prover提供给Verifier。【若采用压缩模式表示curve point,大小可压缩为约等于2个field element的size。】
  • (2) z ′ z' z的计算逻辑为:
    z ′ ⃗ = ⟨ a ′ ⃗ , b ′ ⃗ ⟩ = ⟨ ( x − 1 a 1 + x a 3 x − 1 a 2 + x a 4 ) , ( x b 1 + x − 1 b 3 x b 2 + x − 1 b 4 ) ⟩ = ( a 1 b 1 + a 2 b 2 + a 3 b 3 + a 4 b 4 ) + x − 2 ( a 1 b 3 + a 2 b 4 ) + x 2 ( a 3 b 1 + a 4 b 2 ) = z + x − 2 ( L z ) + x 2 ( R z ) \begin{aligned} \vec{z'} =& \langle \vec{a'}, \vec{b'} \rangle \\ =& \langle \begin{pmatrix}x^{-1} a_1 + x a_3 \\ x^{-1} a_2 + x a_4 \end{pmatrix}, \begin{pmatrix}x b_1 + x^{-1} b_3 \\ x b_2 + x^{-1} b_4 \end{pmatrix} \rangle \\ =& (a_1b_1 + a_2b_2 + a_3b_3 + a_4b_4) + x^{-2} (a_1b_3 + a_2b_4) + x^2 (a_3b_1 + a_4b_2) \\ =& z + x^{-2} (L_z) + x^2 (R_z) \end{aligned} z ====a ,b (x1a1+xa3x1a2+xa4),(xb1+x1b3xb2+x1b4)(a1b1+a2b2+a3b3+a4b4)+x2(a1b3+a2b4)+x2(a3b1+a4b2)z+x2(Lz)+x2(Rz)
    为了计算 z ′ z' z,Verifier需要:
    • evaluation结果 z z z,Verifier已知。
    • x x x的一些幂值 x 2 , x − 2 x^2,x^{-2} x2,x2,Verifier可自己计算。
    • 2个scalar value L z , R z L_z,R_z Lz,Rz,可由Prover提供给Verifier。

因此,最终Prover发送的proof中包含的信息为:

  • 1)向量 a ⃗ ′ \vec{a}' a :为 a ⃗ \vec{a} a 的一半大小。
  • 2)2个curve point L a , R a L_a,R_a La,Ra。【若采用压缩表示,大小约为2个field element。】
  • 3)2个scalar value L z , R z L_z,R_z Lz,Rz

相应的证明过程变为:
在这里插入图片描述
不过,本例中, a ⃗ \vec{a} a 的size为4,若直接reveal a ⃗ \vec{a} a ,相应的proof size为4个field element,但经reduction后proof size反而变为了 2 + 2 + 2 = 6 2+2+2=6 2+2+2=6个field element,反而不值当。但是当 a ⃗ \vec{a} a 很大时,如128,reduction后的proof size 仅为 64 + 2 + 2 = 68 64+2+2=68 64+2+2=68个field element。而且,还可进一步优化。

5.2 Halo对inner product argument的优化

Halo优化类似于bulletproofs优化,可进一步减少proof size。

Halo优化中,将待证明问题由 A = < a ⃗ , G ⃗ > ∧ < a ⃗ , b ⃗ > = z A=<\vec{a}, \vec{G}> \wedge <\vec{a},\vec{b}>=z A=<a ,G ><a ,b >=z进一步转换为证明:【注意,实际应再引入一个公共generator U z U_z Uz,Verifier再发送random challenge r z r_z rz,Prover计算 U = r z U z U=r_zU_z U=rzUz
C = A + z U = ⟨ a ⃗ , G ⃗ ⟩ + ⟨ a ⃗ , b ⃗ ⟩ U C = A + zU = \langle \vec{a}, \vec{G} \rangle + \langle \vec{a}, \vec{b} \rangle U C=A+zU=a ,G +a ,b U

可将其half reduction为证明:
C ′ = A ′ + z ′ U = ⟨ a ′ ⃗ , G ′ ⃗ ⟩ + ⟨ a ′ ⃗ , b ′ ⃗ ⟩ U C' = A' + z' U = \langle \vec{a'}, \vec{G'} \rangle + \langle \vec{a'}, \vec{b'} \rangle U C=A+zU=a ,G +a ,b U
因为:
C ′ = ⟨ a ′ ⃗ , G ′ ⃗ ⟩ + ⟨ a ′ ⃗ , b ′ ⃗ ⟩ U = [ A + x − 2 L a + x 2 R a ] + [ z + x − 2 ( L z ) + x 2 ( R z ) ] U = C + x − 2 ( L a + L z U ) + x 2 ( R a + R z U ) \begin{aligned} C' =& \langle \vec{a'}, \vec{G'} \rangle + \langle \vec{a'}, \vec{b'} \rangle U \\ =& [A + x^{-2} L_a + x^{2} R_a] + [z + x^{-2} (L_z) + x^2 (R_z)] U\\ = & C + x^{-2} (L_a + L_z U) + x^{2} (R_a + R_z U) \end{aligned} C===a ,G +a ,b U[A+x2La+x2Ra]+[z+x2(Lz)+x2(Rz)]UC+x2(La+LzU)+x2(Ra+RzU)
此时,Verifier出需要 a ⃗ ′ \vec{a}' a 之外,挨需要2个curve point(~ 2个field element):

  • L = L a + L z U L = L_a + L_z U L=La+LzU
  • R = R a + R z U R = R_a + R_z U R=Ra+RzU

经此优化之后,每一轮reduction,由之前的4个field element降为2个field element。
在最后一轮,Verifier可计算并验证 C ′ = C + x − 2 L + x 2 R = ⟨ a ′ ⃗ , G ′ ⃗ ⟩ + ⟨ a ′ ⃗ , b ′ ⃗ ⟩ U C' = C + x^{-2}L + x^2 R=\langle \vec{a'}, \vec{G'} \rangle + \langle \vec{a'}, \vec{b'} \rangle U C=C+x2L+x2R=a ,G +a ,b U是否成立即可。

至此,仍然需要Verifier自己来计算 G ⃗ ′ \vec{G}' G b ⃗ ′ \vec{b}' b
经Halo优化后相应的证明为:
在这里插入图片描述

5.3 inner product argument + zero knowledge

目前为止,在最后一轮,需要直接发送 a ′ a' a a ′ a' a为单一element,将泄漏原始向量 a ⃗ \vec{a} a 的某些信息( a ′ a' a为原始向量 a ⃗ \vec{a} a 的线性组合。)
详细参看Halo论文的附录A。

为实现zero knowledge,再额外引入一个公共generator H H H以实现blinding:【 r r r由Prover生成,仅Prover知悉。】
C = A + z U + r H = ⟨ a ⃗ , G ⃗ ⟩ + ⟨ a ⃗ , b ⃗ ⟩ U + r H C = A + zU + rH = \langle \vec{a}, \vec{G} \rangle + \langle \vec{a}, \vec{b} \rangle U +rH C=A+zU+rH=a ,G +a ,b U+rH
同理, L = L a + L z U , R = R a + R z U L=L_a+L_zU,R=R_a+R_zU L=La+LzU,R=Ra+RzU也会泄露 a ⃗ \vec{a} a 的某些信息,因此需要在每轮中引入随机值 r L , r R r_L,r_R rL,rR来进行blinding,使得有:

  • L = L a + L z U + r L H L = L_a + L_z U + r_L H L=La+LzU+rLH
  • R = R a + R z U + r R H R = R_a + R_z U + r_R H R=Ra+RzU+rRH

最终的commitment 仍保持为:
C ′ = C + x − 2 L + x 2 R C' = C + x^{-2} L + x^2 R C=C+x2L+x2R
Prover仅需发送 a ⃗ ′ \vec{a}' a 和最终的blinding value r ′ r' r r ′ r' r r r r和每一轮的 r L , r R r_L,r_R rL,rR组成),Verifier再自己重构 G ⃗ ′ \vec{G}' G b ⃗ ′ \vec{b}' b 来将 C ′ C' C open为:
⟨ a ′ ⃗ , G ′ ⃗ ⟩ + ⟨ a ′ ⃗ , b ′ ⃗ ⟩ U + r ′ H \langle \vec{a'}, \vec{G'} \rangle + \langle \vec{a'}, \vec{b'} \rangle U + r'H a ,G +a ,b U+rH
其中 r ′ r' r等于类似 r + ∑ i ( x i 2 r L i + x i − 2 r R i ) r + \sum_i (x_i^2r_{Li} + x_i^{-2}r_{Ri}) r+i(xi2rLi+xi2rRi)

最终,整个协议的proof为:

  • 1)每轮2个curve point L , R L,R L,R
  • 2)最后一轮open时的1个scalar value a ′ a' a
  • 3)最后一轮open时的1个blinding (scalar) value r ′ r' r

不过,在上述协议中,Prover即使不发送 a ⃗ ′ \vec{a}' a ,仅发送 r ′ r' r的情况下,某人也可能会计算出 a ⃗ ′ \vec{a}' a 。为此,在Halo论文中,提出了一种更通用的Schnorr协议,可在不发送 a ⃗ ′ 和 r ′ \vec{a}'和r' a r的情况下,open相应的commitment:【下图中为不发送 a , r ′ a,r' a,r的情况下open Q = a G + a b U + r ′ H Q=aG+abU+r'H Q=aG+abU+rH
在这里插入图片描述
最终经 log ⁡ 2 n \log_2n log2n轮reduction,通过Fiat-Shamir transformation实现的non-interactive zero-knowledge inner product argument为:
在这里插入图片描述

5.4 Mina中的多项式承诺tips

5.4.1 约束所commit的多项式的最大degree

为约束所commit的多项式的最大degree,可要求Prover将多项式的系数移到最右端,使得若该多项式的degree大于所设定的最大degree,则无法符合要求。等价为:
right_shift ( f ) = x n − m a x f \text{right\_shift}(f) = x^{n-max} f right_shift(f)=xnmaxf
当Verifier验证时,也需要对收到的evaluation值也同样进行右移操作:
right_shift ( f ( z ) ) = z n − m a x f ( z ) \text{right\_shift}(f(z)) = z^{n-max} f(z) right_shift(f(z))=znmaxf(z)

5.4.2 对多个多项式在同一点进行聚合证明

⟨ f ⃗ + v ⋅ g ⃗ , x ⃗ ⟩ = f ( x ) + v ⋅ g ( x ) \langle \vec{f} + v \cdot \vec{g}, \vec{x}\rangle = f(x) + v \cdot g(x) f +vg ,x =f(x)+vg(x)

5.4.3 对单个多项式在多个点进行聚合证明

⟨ f ⃗ , x 1 ⃗ + u ⋅ x 2 ⃗ ⟩ = f ( x 1 ) + u ⋅ f ( x 2 ) \langle \vec{f}, \vec{x_1} + u \cdot \vec{x_2}\rangle = f(x_1) + u \cdot f(x_2) f ,x1 +ux2 =f(x1)+uf(x2)

5.4.4 对多个多项式open多个不同点的聚合证明

如对多项式 f f f open x 1 x_1 x1,对多项式 g g g open x 1 , x 2 x_1,x_2 x1,x2,相应的聚合证明为:
⟨ f ⃗ + v ⋅ g ⃗ , x 1 ⃗ + u ⋅ x 2 ⃗ ⟩ = f ( x 1 ) + v ⋅ g ( x 1 ) + u ⋅ ( f ( x 2 ) + v ⋅ g ( x 2 ) ) \langle \vec{f} + v \cdot \vec{g}, \vec{x_1} + u \cdot \vec{x_2} \rangle = f(x_1) + v \cdot g(x_1) + u \cdot (f(x_2) + v \cdot g(x_2)) f +vg ,x1 +ux2 =f(x1)+vg(x1)+u(f(x2)+vg(x2))
注意,这种类型的聚合中要求提供所有组合的evaluation值,可能包含某些不需要的evalaution值(如 f ( x 2 ) f(x_2) f(x2))。

5.4.5 对多项式进行切分

若多项式的degree大于SRS所允许的最大degree n n n,可将其切分为多个degree不超过 n n n的多项式。

5.4.6 proof of correct commitment to a polynomial

这在HALO中有用。
针对的场景为:
已知commitment A A A和多项式 f f f,证明 A = c o m ( f ) A=com(f) A=com(f)

相应的证明过程为:

  • 生成一个随机点 s s s
  • evaluate f f f at s s s,有 f ( s ) = y f(s)=y f(s)=y
  • 请求evaluation proof of A A A on s s s,若其也evaluate to y y y,则大概率 A A A是多项式 f f f的commitment。

参考资料

[1] Mina-book——多项式
[2] Mina-book——多项式承诺方案

猜你喜欢

转载自blog.csdn.net/mutourend/article/details/123842866