Halo2 学习笔记——设计之Proving system之Inner product argument(6)

1. 引言

Halo2中使用的polynomial commitment scheme为Inner product argument。

其中Halo2中的 PC DL . Open \text{PC}_\text{DL}.\text{Open} PCDL.Open使用了BCMS20( B¨unz 等人2020年论文《proof-carrying data from accumulation schemes》)中附录A.2中类似的算法。

2. BCMS20(proof-carry data)中的inner product argument

B¨unz 等人2020年论文《proof-carrying data from accumulation schemes》,详细可参看博客 proof-carrying data from accumulation schemes学习笔记 中的1.5节内容。

以下所有算法中的oracle access都是基于相同的random oracle ρ 0 \rho_0 ρ0
为了方便描述,假设 d + 1 d+1 d+1 D + 1 D+1 D+1均为2的幂乘,即满足 d + 1 = 2 k , D + 1 = 2 m d+1=2^k,D+1=2^m d+1=2k,D+1=2m
对于向量 a ⃗ ∈ S n \vec{a}\in S^n a Sn,二分法时, l ( a ⃗ ) = ( a 1 , ⋯   , a n / 2 ) l(\vec{a})=(a_1,\cdots,a_{n/2}) l(a )=(a1,,an/2) r ( a ⃗ ) = ( a n / 2 + 1 , ⋯   , a n ) r(\vec{a})=(a_{n/2+1},\cdots,a_n) r(a )=(an/2+1,,an)分别表示 a ⃗ \vec{a} a 的左半部分和右半部分。

基于discrete logarithm,对单变量多项式 p ( X ) = c 0 + c 1 X + ⋯ + c d X d p(X)=c_0+c_1X+\cdots+c_dX^d p(X)=c0+c1X++cdXd的polynomial commitment算法实现细节为:

  • P C D L . S e t u p PC_{DL}.Setup PCDL.Setup
    在这里插入图片描述

  • P C D L . T r i m PC_{DL}.Trim PCDL.Trim:(暂时只考虑所有polynomial degree均为 d d d的情况)
    在这里插入图片描述

  • P C D L . C o m m i t PC_{DL}.Commit PCDL.Commit:引入随机数 w w w,对多项式系数进行commit C = w S + ∑ i = 0 d c i G i C=wS+\sum_{i=0}^{d}c_iG_i C=wS+i=0dciGi
    在这里插入图片描述

  • P C D L . O p e n PC_{DL}.Open PCDL.Open:借助[BCCGP16; BBBPWM18]中inner product argument的变种,计算evaluation proof π \pi π:(evaluation point为 z z z
    – 1. 计算evaluation v = p ( z ) ∈ F q v=p(z)\in\mathbb{F}_q v=p(z)Fq
    – 2. sample 随机多项式 p ˉ ∈ F q ≤ d [ X ] \bar{p}\in\mathbb{F}_q^{\leq d}[X] pˉFqd[X],使得 p ˉ ( z ) = 0 \bar{p}(z)=0 pˉ(z)=0
    – 3. sample 相应的commitment randomness w ˉ ∈ F q \bar{w}\in\mathbb{F}_q wˉFq
    – 4. 计算随机多项式 p ˉ \bar{p} pˉ的hiding commitment: C ˉ = C M . C o m m i t ρ 0 ( c k ⃗ , p ˉ ; w ˉ ) \bar{C}=CM.Commit^{\rho_0}(\vec{ck},\bar{p};\bar{w}) Cˉ=CM.Commitρ0(ck ,pˉ;wˉ)
    – 5. 计算challenge α = ρ ( C , z , v , C ˉ ) ∈ F q ∗ \alpha=\rho(C,z,v,\bar{C})\in\mathbb{F}_q^* α=ρ(C,z,v,Cˉ)Fq
    – 6. 计算多项式: p ′ = p + α p ˉ = ∑ i = 0 d c i X i ∈ F q [ X ] p'=p+\alpha \bar{p}=\sum_{i=0}^{d}c_iX^i\in\mathbb{F}_q[X] p=p+αpˉ=i=0dciXiFq[X]
    – 7. 计算commitment randomness: w ′ = w + α w ˉ ∈ F q w'=w+\alpha\bar{w}\in\mathbb{F}_q w=w+αwˉFq
    – 8. 计算多项式 p ′ p' p的non-hiding commitment: C ′ = C + α C ˉ − w ′ S ∈ G C'=C+\alpha\bar{C}-w'S\in\mathbb{G} C=C+αCˉwSG
    计算 0 0 0-th challenge field element ξ 0 = ρ o ( C ′ , z , v ) ∈ F q \xi_0=\rho_o(C',z,v)\in\mathbb{F}_q ξ0=ρo(C,z,v)Fq,用它来计算group element H ′ = ξ 0 H ∈ G H'=\xi_0H\in\mathbb{G} H=ξ0HG
    转为inner product 证明:
    a)public info: z ⃗ 0 = ( 1 , z , ⋯   , z d ) ∈ F q d + 1 \vec{z}_0=(1,z,\cdots,z^d)\in\mathbb{F}_q^{d+1} z 0=(1,z,,zd)Fqd+1 G ⃗ 0 = ( G 0 , G 1 , ⋯   , G d ) ∈ G d + 1 \vec{G}_0=(G_0,G_1,\cdots,G_d)\in\mathbb{G}^{d+1} G 0=(G0,G1,,Gd)Gd+1 v ∈ F q v\in\mathbb{F}_q vFq C ′ ∈ G C'\in\mathbb{G} CG
    b)private info: c ⃗ 0 = ( c 0 , c 1 , ⋯   , c d ) ∈ F q d + 1 \vec{c}_0=(c_0,c_1,\cdots,c_d)\in\mathbb{F}_q^{d+1} c 0=(c0,c1,,cd)Fqd+1
    c)relation: < c ⃗ 0 , z ⃗ 0 > = v <\vec{c}_0,\vec{z}_0>=v <c 0,z 0>=v C ′ = ∑ i = 0 d c i G i C'=\sum_{i=0}^{d}c_iG_i C=i=0dciGi
    借助[BCCGP16; BBBPWM18]中二分法递归调用思想,在每一轮 i ∈ { 1 , ⋯   , log ⁡ 2 ( d + 1 ) } i\in \{1,\cdots,\log_2(d+1)\} i{ 1,,log2(d+1)},有:
    1)设置 ∑ L = l ( G ⃗ i − 1 ) ∣ ∣ H ′ \sum_L=l(\vec{G}_{i-1})||H' L=l(G i1)H,计算left commitment L i = C M . C o m m i t ∑ L ( r ( c ⃗ i − 1 ) ∣ ∣ < r ( c ⃗ i − 1 ) , l ( z ⃗ i − 1 ) > ) L_i=CM.Commit_{\sum_L}(r(\vec{c}_{i-1})||<r(\vec{c}_{i-1}),l(\vec{z}_{i-1})>) Li=CM.CommitL(r(c i1)<r(c i1),l(z i1)>)
    2)设置 ∑ R = r ( G ⃗ i − 1 ) ∣ ∣ H ′ \sum_R=r(\vec{G}_{i-1})||H' R=r(G i1)H,计算right commitment R i = C M . C o m m i t ∑ R ( l ( c ⃗ i − 1 ) ∣ ∣ < l ( c ⃗ i − 1 ) , r ( z ⃗ i − 1 ) > ) R_i=CM.Commit_{\sum_R}(l(\vec{c}_{i-1})||<l(\vec{c}_{i-1}),r(\vec{z}_{i-1})>) Ri=CM.CommitR(l(c i1)<l(c i1),r(z i1)>)
    3)生成 i i i-th challenge ξ i = ρ 0 ( ξ i − 1 , L i , R i ) ∈ F q \xi_i=\rho_0(\xi_{i-1}, L_i,R_i)\in\mathbb{F}_q ξi=ρ0(ξi1,Li,Ri)Fq
    4)为下一轮构建新的commitment key: G ⃗ i = l ( G ⃗ i − 1 ) + ξ i ⋅ r ( G ⃗ i − 1 ) \vec{G}_i=l(\vec{G}_{i-1})+\xi_i\cdot r(\vec{G}_{i-1}) G i=l(G i1)+ξir(G i1)
    5)构建下一轮的输入: c ⃗ i = l ( c ⃗ i − 1 ) + ξ i − 1 ⋅ r ( c ⃗ i − 1 ) \vec{c}_i=l(\vec{c}_{i-1})+\xi_i^{-1}\cdot r(\vec{c}_{i-1}) c i=l(c i1)+ξi1r(c i1) z ⃗ i = l ( z ⃗ i − 1 ) + ξ i ⋅ r ( z ⃗ i − 1 ) \vec{z}_i=l(\vec{z}_{i-1})+\xi_i\cdot r(\vec{z}_{i-1}) z i=l(z i1)+ξir(z i1)
    最后一轮,设置 U = G log ⁡ 2 ( d + 1 ) , c = c log ⁡ 2 ( d + 1 ) U=G_{\log_2(d+1)},c=c_{\log_2(d+1)} U=Glog2(d+1),c=clog2(d+1)
    最终给receiver发送的evaluation proof 为: π = ( L ⃗ , R ⃗ , U , c , C ˉ , w ′ ) \pi=(\vec{L},\vec{R},U,c,\bar{C},w') π=(L ,R ,U,c,Cˉ,w)

  • P C D L . C h e c k PC_{DL}.Check PCDL.Check:receiver的输入为:receiver key r k ⃗ P C \vec{rk}_{PC} rk PC、commitment C C C、degree bound d d d、evaluation point z z z、claimed evaluation v v v 以及 evaluation proof π \pi π P C D L . C h e c k PC_{DL}.Check PCDL.Check verifies the evaluation proof by invoking the verifier of the inner product argument:
    – 1. Parse c k ⃗ \vec{ck} ck as ( < g r o u p > , h k ⃗ , S ) (<group>,\vec{hk},S) (<group>,hk ,S)
    – 2. 设置 d ′ = ∣ h k ⃗ ∣ − 1 d'=|\vec{hk}|-1 d=hk 1
    – 3. 设置 r k ⃗ = ( < g r o u p > , S , H , d ′ ) \vec{rk}=(<group>,S,H,d') rk =(<group>,S,H,d)
    – 4. 验证 P C D L . S u c c i n c t C h e c k ρ 0 ( r k ⃗ , C , d , z , v , π ) PC_{DL}.SuccinctCheck^{\rho_0}(\vec{rk},C,d,z,v,\pi) PCDL.SuccinctCheckρ0(rk ,C,d,z,v,π) 是否成立,输出为 ( h , U ) (h,U) (h,U)
    – 5. 验证 U = C M . C o m m i t ( c k , h ⃗ ) U=CM.Commit(ck,\vec{h}) U=CM.Commit(ck,h ),其中 h ⃗ \vec{h} h 为多项式 h h h的系数。

  • P C D L . S u c c i n c t C h e c k PC_{DL}.SuccinctCheck PCDL.SuccinctCheck:在 P C D L . C h e c k PC_{DL}.Check PCDL.Check和本文的accumulation scheme中均会调用。【 P C D L . O p e n PC_{DL}.Open PCDL.Open中的inner product argument递归调用构建proof过程中,保证了每一轮的 C i = C M . C o m m i t G ⃗ i ( c i ⃗ ) + < c ⃗ i , z ⃗ i > H ′ C_i=CM.Commit_{\vec{G}_i}(\vec{c_i})+<\vec{c}_i,\vec{z}_i>H' Ci=CM.CommitG i(ci )+<c i,z i>H成立。在最后一轮的 c ⃗ log ⁡ 2 ( d + 1 ) = c , z ⃗ log ⁡ 2 ( d + 1 ) = h ( z ) \vec{c}_{\log_2(d+1)}=c,\vec{z}_{\log_2(d+1)}=h(z) c log2(d+1)=c,z log2(d+1)=h(z)。】
    – 1. Parse r k ⃗ \vec{rk} rk as ( < g r o u p > , S , H , d ′ ) (<group>, S,H,d') (<group>,S,H,d),和 π \pi π as ( L ⃗ , R ⃗ , U , c , C ˉ , w ′ ) (\vec{L},\vec{R},U,c,\bar{C},w') (L ,R ,U,c,Cˉ,w)
    – 2. 验证 d = d ′ d=d' d=d
    – 3. 计算challenge: α = ρ 0 ( C , z , v , C ˉ ) ∈ F q ∗ \alpha=\rho_0(C,z,v,\bar{C})\in\mathbb{F}_q^* α=ρ0(C,z,v,Cˉ)Fq
    – 4. 计算non-hiding commitment C ′ = C + α C ˉ − w ′ S ∈ G C'=C+\alpha\bar{C}-w'S\in\mathbb{G} C=C+αCˉwSG
    – 5. 计算 0 0 0-th challenge ξ 0 = ρ 0 ( C ′ , z , v ) \xi_0=\rho_0(C',z,v) ξ0=ρ0(C,z,v),设置 H ′ = ξ 0 H ∈ G H'=\xi_0H\in\mathbb{G} H=ξ0HG
    – 6. 计算 group element C 0 = C ′ + v H ′ ∈ G C_0=C'+vH'\in\mathbb{G} C0=C+vHG
    – 7. 在每一轮 i ∈ { 1 , ⋯   , log ⁡ 2 ( d + 1 ) } i\in \{1,\cdots,\log_2(d+1)\} i{ 1,,log2(d+1)},有:
    (a)生成 i i i-th challenge: ξ i = ρ 0 ( ξ i − 1 , L i , R i ) ∈ F q \xi_i=\rho_0(\xi_{i-1},L_i,R_i)\in\mathbb{F}_q ξi=ρ0(ξi1,Li,Ri)Fq
    (b)计算the i i i-th commitment: C i = ξ i − 1 L i + C i − 1 + ξ i R i ∈ G C_i=\xi_i^{-1}L_i+C_{i-1}+\xi_iR_i\in\mathbb{G} Ci=ξi1Li+Ci1+ξiRiG
    – 8. 定义单变量多项式 h ( X ) = ∏ i = 0 log ⁡ 2 ( d + 1 ) − 1 ( 1 + ξ log ⁡ 2 ( d + 1 ) − i X 2 i ) ∈ F q [ X ] h(X)=\prod_{i=0}^{\log_2(d+1)-1}(1+\xi_{\log_2(d+1)-i}X^{2^i})\in\mathbb{F}_q[X] h(X)=i=0log2(d+1)1(1+ξlog2(d+1)iX2i)Fq[X]
    – 9. 计算evaluation v ′ = c ⋅ h ( z ) ∈ F q v'=c\cdot h(z)\in\mathbb{F}_q v=ch(z)Fq
    – 10. 验证 C log ⁡ 2 ( d + 1 ) = C M . C o m m i t ∑ ( c ∣ ∣ v ′ ) C_{\log_2(d+1)}=CM.Commit_{\sum}(c||v') Clog2(d+1)=CM.Commit(cv),其中 ∑ = ( U ∣ ∣ H ′ ) \sum=(U||H') =(UH)
    – 11. 输出 ( h , U ) (h,U) (h,U)

以上整个 P C D L PC_{DL} PCDL算法具有hiding和extractability属性。


注意:
借鉴了[BMMV19]中inner-product argument(参见博客 Proofs for Inner Pairing Products and Applications 学习笔记 5.2.1节内容。)中的思想,由于 z ⃗ = ( 1 , z , z 2 , ⋯   , z d ) \vec{z}=(1,z,z^2,\cdots,z^d) z =(1,z,z2,,zd)为public info,且为structured,Verifier中的递归调用计算 z ⃗ i \vec{z}_i z i,可延迟计算最终以多项式 h ( z ) = ∏ i = 0 log ⁡ 2 ( d + 1 ) − 1 ( 1 + ξ log ⁡ 2 ( d + 1 ) − i z 2 i ) h(z) =\prod_{i=0}^{\log_2(d+1)-1}(1+\xi_{\log_2(d+1)-i}z^{2^i}) h(z)=i=0log2(d+1)1(1+ξlog2(d+1)iz2i)表示。
甚至可以构建多项式 h ( X ) = ∏ i = 0 log ⁡ 2 ( d + 1 ) − 1 ( 1 + ξ log ⁡ 2 ( d + 1 ) − i X 2 i ) ∈ F q [ X ] h(X)=\prod_{i=0}^{\log_2(d+1)-1}(1+\xi_{\log_2(d+1)-i}X^{2^i})\in\mathbb{F}_q[X] h(X)=i=0log2(d+1)1(1+ξlog2(d+1)iX2i)Fq[X],如 博客 Proofs for Inner Pairing Products and Applications 学习笔记 5.2.1节内容 所示,为减少Verifier的计算压力,再引入一个对 h ( X ) h(X) h(X)的polynomial commitment,将相应的计算压力转移给Prover。


3. Halo2中的inner product argument

BCMS20( B¨unz 等人2020年论文《proof-carrying data from accumulation schemes》)中的polynomial commitment scheme 与 BGH19(Bowe等人2019年论文《Halo: Recursive Proof Composition without a Trusted Setup》)的类似。
BCMS20为a generalization of the original Halo paper。
Halo论文解读可参看博客:Halo: Recursive Proof Composition without a Trusted Setup 学习笔记

Halo2中的Inner product argument同时借鉴了BCMS20和BGH19的研究成果,Halo2中使用的polynomial commitment scheme与BCMS2非常类似。

以下为BCMS20中的变量名 与 Halo2中变量名 的映射关系为:【Halo2实际实现采用了Halo论文中的命名法】

BCMS20 Halo 2
S S S H H H
H H H U U U
C C C msm or P P P
α \alpha α ι \iota ι
ξ 0 \xi_0 ξ0 z z z
ξ i \xi_i ξi challenge_i
H ′ H' H [ z ] U [z] U [z]U
p ˉ \bar{p} pˉ s_poly
ω ˉ \bar{\omega} ωˉ s_poly_blind
C ˉ \bar{C} Cˉ s_poly_commitment
h ( X ) h(X) h(X) g ( X ) g(X) g(X)
ω ′ \omega' ω blind / ξ \xi ξ
c \mathbf{c} c a \mathbf{a} a
c c c a = a 0 a = \mathbf{a}_0 a=a0
v ′ v' v a b ab ab

Halo2中的polynomial commitment scheme与BCMS20 附录A.2 有2个不同之处:

  • 1)BCMS20 附录A.2: P C D L . O p e n PC_{DL}.Open PCDL.Open算法中的第8步中,在inner product argument之前计算了a “non-hiding” commitment C ′ C' C,该"non-hiding" commitment C ′ C' C 可open to the same value as C C C,但是为a commitment to a randomly-drawn polynomial。协议的剩余部分不包含blinding。
    而Halo2中:对每个单独的commitment都实现了blind(甚至对于instance polynomials和fixed polynomials 也实现了blind,为fixed polynomials使用的blinding factor为 1 1 1),这使得协议更易于推理。为此,Verifier在协议末尾需对blinding factor进行累计处理,因此,也不需要在协议初始阶段派生 C ′ C' C.

    • C ′ C' C也为an input to the random oracle for ξ 0 \xi_0 ξ0。在Halo2中,使用了a transcript that has already committed to the equivalent components of C ′ C' C prior to sampling z z z
  • 2)BCMS20 附录A.2: PC DL . SuccinctCheck \text{PC}_\text{DL}.\text{SuccinctCheck} PCDL.SuccinctCheck算法中,initial group element C 0 = C ′ + v H ′ ∈ G C_0=C'+vH'\in\mathbb{G} C0=C+vHG,其中 v H ′ = [ v ξ 0 ] H vH'=[v\xi_0]H vH=[vξ0]H需要2次scalar multiplication运算。
    而Halo2中:改为subtract [ v ] G 0 [v]G_0 [v]G0 from original commitment P P P,从而可effectively opening the polynomial at the point to the value zero。 [ v ] G 0 [v]G_0 [v]G0在recursion场景下的计算效率更高,因为 G 0 G_0 G0为a fixed base,因此可使用lookup tables。

参考资料

[1] Halo2 之 Inner product argument

猜你喜欢

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