电路:门约束、线约束、定制门、查找表

Plonk / UltraPlonk 多项式承诺:KZG 承诺、Dan Boneh 承诺 + Fflonk 优化

Halo2 多项式承诺:向量內积承诺。对多项式使用向量内积承诺,不需要基于有毒废料计算 CRS

向量内积承诺

折半打开,并行承诺

证明方知道秘密 4 维向量 $\vec{a} = ( a_1 , a_2 , a_3 , a_4 )$,基于 SystemParameter 计算 $s = hash ( SystemParameter )$,计算 $\vec{b}= (1, s , s^2 , s^3 )$

初始化:系统参数为 $G = ( G_1 , G_2 , G_3 , G_4 )$

承诺:计算多项式承诺与多项式的值

$$ C = A + zU = <\vec{a}, \vec{G} >+ <\vec{a}, \vec{b}> U $$

其中,$A=<\vec{a}, \vec{G} >=\sum^4_{i=1}a_iG_i$ 是多项式承诺,$z=<\vec{a}, \vec{b}>$ 是多项式的值,$U$ 是椭圆曲线的生成元,这样便将多项式承诺和多项式的值放在了一个承诺中,实现并行承诺。

挑战:证明方计算 $x = hash ( SystemParameter , C , A , U )$

折半响应:证明方计算

$$ \begin{align} &a' = x^{-1}(a_1 , a_2)+ x( a_3 , a_4 ) = (x^{-1} a_1 + xa_3 , x^{-1} a_2 + xa_4)\\ &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)\\ &G ' = x ( G_1 , G_2 ) + x^{-1} ( G_3 , G_4 ) = (xG_1 + x^{-1}G_3 , xG_2 + x^{-1}G_4) \end{align} $$

计算

$$ \begin{align} & <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) \\ &= C + x^{-2} L + x^2 R \end{align} $$

其中 $L=L_a + l_zU, R=R_a + r_zU$

发送数据为:$(C, \vec{a'}, L, R)$,长度为 $\frac{n}{2} + 3$

优点:N 次递归后,总共发送 $(C , a , L_1 , R_1 ,..., L_{log_2 n }, R_{log_2 n} )$,数据总量为 $2(1 + log_2 n )$。

验证:基于 $C$ 和 $\vec{G}$ 计算 $s, x, \vec{b'}$,校验

$$ C+x^{-2}L + x^{-2}R= <\vec{a'}, \vec{G'}> + <\vec{a'},\vec{b'}>U $$

多项式承诺和多项式值均正确。

N 次后,校验等式为 $C+ \sum^n_{i=1}(x_i^{-2}L_i + x_i^2R_i)=aG + abU = a(G + bU)$

添加零知识

承诺:添加随机项 $rH = <\vec{r}, \vec{1^4}>H$ ,实现零知识

$$ C = A + zU = <\vec{a}, \vec{G} >+ <\vec{a}, \vec{b}> U + <\vec{r}, \vec{1^4}>H $$

挑战:证明方计算 $x = hash ( SystemParameter , C , A , U )$

折半响应: $L=L_a + l_zU + r_LH, R=R_a + r_zU + r_RH$

发送数据为:$(C, \vec{a'}, L, R)$

N 次递归后,总共发送 $(C , a , r, L_1 , R_1 ,..., L_{log_2 n }, R_{log_2 n} )$

验证:基于 $C$ 和 $\vec{G}$ 计算 $s, x, \vec{b'}$,校验

$$ C+x^{-2}L + x^{-2}R= <\vec{a'}, \vec{G'}> + <\vec{a'},\vec{b'}>U + r'U $$

N 次后,校验等式为 $C+ \sum^n_{i=1}(x_i^{-2}L_i + x_i^2R_i)=aG + abU + rH= a(G + bU) + rH$

对于最后一次 $a(G + bU) + rH$ ,可使用经典的 sigma 协议证明其知道 $a$。

计算均摊

使用递归证明:验证方在验证时,每轮都需要折半 $\vec{G}$,计算复杂度较高,可以改为由证明方额外生成一个 proof,证明确实对 $\vec{G}$ 进行了正确的折叠。

Halo2

四个优点:

  1. 使用 plonk 的门约束、线约束、定制门、查找表,构造多项式
  2. 对多项式使用向量內积承诺:不需要基于有毒废料计算 CRS
  3. 使用 Tweedledum/Tweedledee 曲线,实现递归零知识证明
  4. 使用累积递归的方式,减少验证复杂度;做均摊

Halo2 的证明系统与 UltraPlonk 有严格的一一对应关系。

UltraPlonk 证明方:

  1. 对电路赋值进行承诺:电路门管脚数据多项式承诺
  2. 对查表数据进行承诺
  3. 对相等约束置换进行承诺:线数据多项式承诺
  4. 对查表置换进行承诺:公开且正确的 Table 多项式承诺
  5. 消退证明:保密数据满足门约束、线约束、查找表。计算商多项式承诺
  6. 多项式求值
  7. 多点打开证明(用到 6 结果):计算商多项式值,确保上述所有多项式正确

Halo2 按功能分为 4 部分:

  1. 数据多项式承诺:对应 UltraPlonk 证明方的步骤 1-4。按打开点集的不同,将多项式划分为不同集合,然后承诺
  2. 消退证明:对应 UltraPlonk 证明方的步骤 5。将 vanishing argument 中 $h(X)$ 多项式,根据最大阶 $n$ 进行划分,并逐个承诺;然后,计算多项式的值
  3. 多点打开证明:使用多点打开方案,构造最终多项式 $f_{final} (X)$ = 随机打开点多项式 + 数据多项式
  4. 内积证明:承诺/验证最终的多项式 $f_{final} (X)$

参考

Halo2证明系统-p1

Halo2证明系统-p2