多项式知识的 zkSNARK

参考文献:

  1. Petkus M. Why and how zk-snark works: Definitive explanation[J]. arXiv preprint arXiv:1906.07221, 2019.
  2. Kilian J. A note on efficient zero-knowledge proofs and arguments[C]//Proceedings of the twenty-fourth annual ACM symposium on Theory of computing. 1992: 723-732.
  3. Reitwiessner C. zkSNARKs in a nutshell[J]. Ethereum blog, 2016, 6: 1-15.
  4. Nitulescu A. zk-SNARKs: A Gentle Introduction[R]. Technical report, 2020.

文章目录

  • zkSNARKs
  • Schwartz-Zippel lemma
    • 描述
    • 应用
  • 多项式知识的证明
    • 简洁的证明
    • 同态承诺
    • 限制多项式
    • 添加零知识
    • 实现非交互性
    • CRS
  • 总结

zkSNARKs

SNARK 是 succinct non-interactive arguments of knowledge 的简写。它是一个知识的证明系统,除了完备性completeness)和可靠性soundness),额外拥有:

  • 简洁性Succinct):相较于证明的内容,消息的长度很小
  • 非交互性Non-interactive):消息的发送方只有 Prover
  • 论证ARguments):Verifier 仅可以抵御多项式有界敌手,又称 “computational soundness”
  • 关于知识的of Knowledge):如果 Prover 不知道 witness,那么它不能构造出 proof / argument

而 zkSNARK,它额外再拥有零知识性zero-knowledge)。事实上,零知识很容易达成(加入随机偏移即可),最重要的特性其实是 “简洁、无交互”。

Schwartz-Zippel lemma

描述

对于 n n n个变元,定义项的总度数(total degree)为
deg ⁡ ( ∏ i = 1 n x i s i ) = ∑ i = 1 n s i \deg(\prod_{i=1}^n x_i^{s_i}) = \sum_{i=1}^n s_i deg(i=1nxisi)=i=1nsi

(有限 / 无限)域 F \mathbb F F上的 n n n d d d次多项式,
P ( x 1 , ⋯   , x n ) ∈ F [ x 1 , ⋯   , x n ] P(x_1,\cdots,x_n) \in \mathbb F[x_1,\cdots,x_n] P(x1,,xn)F[x1,,xn]

S ⊆ F S \subseteq \mathbb F SF有限子集,那么独立均匀地选取随机点 ( r 1 , ⋯   , r n ) ∈ S n (r_1,\cdots,r_n) \in S^n (r1,,rn)Sn,有
P r [ P ( r 1 , ⋯   , r n ) = 0 ] ≤ d ∣ S ∣ Pr[P(r_1,\cdots,r_n)=0] \le \dfrac{d}{|S|} Pr[P(r1,,rn)=0]Sd

等价地,令 Z ( f ) Z(f) Z(f) f f f的零点集,那么有
∣ Z ( f ) ∩ S n ∣ ≤ d ⋅ ∣ S ∣ n − 1 |Z(f) \cap S^n| \le d \cdot |S|^{n-1} Z(f)SndSn1

应用

我们可以高效地检查若干(大规模)多项式之间的等式关系。例如:
f ( x ) = g ( x ) h ( x )    ⟺    f ( x ) − g ( x ) h ( x ) = 0 f(x) = g(x)h(x) \iff f(x)-g(x)h(x) = 0 f(x)=g(x)h(x)f(x)g(x)h(x)=0

已知 f , g , h f,g,h f,g,h的度数最高为 d d d,那么我们圈定一个范围 S S S,满足 d ≪ ∣ S ∣ d \ll |S| dS,那么我们随机选取 r ∈ S r \in S rS,检查下述等式是否成立:
f ( r ) − g ( r ) h ( r ) = 0 f(r) - g(r)h(r) = 0 f(r)g(r)h(r)=0

  1. 如果 f ( x ) − g ( x ) h ( x ) = 0 f(x)-g(x)h(x) = 0 f(x)g(x)h(x)=0,那么对于任意的 r r r,有
    P r [ f ( r ) − g ( r ) h ( r ) = 0 ] = 1 Pr[f(r) - g(r)h(r) = 0] =1 Pr[f(r)g(r)h(r)=0]=1

  2. 如果 f ( x ) − g ( x ) h ( x ) ≠ 0 f(x)-g(x)h(x) \neq 0 f(x)g(x)h(x)=0,那么对于任意的 r r r,上述检查通过的概率为
    P r [ f ( r ) − g ( r ) h ( r ) = 0 ] ≤ d ∣ S ∣ Pr[f(r) - g(r)h(r) = 0] \le \frac{d}{|S|} Pr[f(r)g(r)h(r)=0]Sd

无论每个多项式有多大,我们仅仅检查一个随机点上的等式即可!没必要计算多项式乘法,然后再检查每个系数是否相等。

多项式知识的证明

可以证明的多项式的性质有很多,我们关注对多项式因子的知识证明。确切地说:

  1. Prover(简记 P P P)宣称自己拥有的多项式 p ( x ) p(x) p(x),它有一个因子 t ( x ) t(x) t(x)
  2. Verifier(简记 V V V)要求 Prover 证明存在一个 h ( x ) h(x) h(x),满足 p ( x ) = t ( x ) h ( x ) p(x)=t(x)h(x) p(x)=t(x)h(x)

简洁的证明

我们利用 Schwartz-Zippel lemma 来设计简洁的证明:

  1. V V V随机采样 r r r,发送 r r r P P P
  2. P P P计算 h ( x ) = p ( x ) / t ( x ) h(x) = p(x)/t(x) h(x)=p(x)/t(x),再计算 p = p ( r ) , h = h ( r ) p=p(r),h=h(r) p=p(r),h=h(r),然后发送 p , h p,h p,h V V V
  3. V V V本地计算 t = t ( r ) t=t(r) t=t(r),验证 p = t ⋅ h p=t \cdot h p=th

上述协议的问题:

  • P P P如果持有 p ( x ) = t ( x ) h ( x ) + s ( x ) p(x)=t(x)h(x)+s(x) p(x)=t(x)h(x)+s(x),其中 r ( x ) ≠ 0 r(x)\neq 0 r(x)=0,它可以计算 h ′ ( r ) = h ( r ) + s ( r ) / t ( r ) h'(r)=h(r)+s(r)/t(r) h(r)=h(r)+s(r)/t(r) V V V检查 p = t ⋅ h ’ p=t \cdot h’ p=th成立
  • P P P即使完全不知道 p ( x ) p(x) p(x),它依然可以随机选取 h h h,然后设置 p = t ⋅ h p=t \cdot h p=th,但 V V V完全无法发现 P P P并没持有 p ( x ) p(x) p(x)
  • P P P知道了 r r r,因此它可以任意构造多项式 p ′ ( x ) p'(x) p(x),使它满足 p ′ ( r ) = t ( r ) ⋅ h ( r ) p'(r)=t(r) \cdot h(r) p(r)=t(r)h(r),于是 V V V获得了 t ( x ) ∣ p ′ ( x ) t(x)|p'(x) t(x)p(x)的证明,而不是 t ( x ) ∣ p ( x ) t(x)|p(x) t(x)p(x)的证明
  • P P P知道 t ( x ) t(x) t(x)的次数,因此它可以找一个次数特别高的多项式 p ( x ) p(x) p(x),使得它满足 t ( x ) ∣ p ( x ) t(x) | p(x) t(x)p(x)

同态承诺

我们应当让 P P P无法获得 r , t ( r ) r,t(r) r,t(r),从而避免它伪造 p ( r ) p(r) p(r)或者 p ( x ) p(x) p(x),于是同态加密登场了。我们实际上不关心解密问题,因此我们只需要一个承诺算法。

选取合适的循环群(后续技术中要求它是存在双线性映射的椭圆曲线群),它的生成元为 g g g,其上的 CDH 是困难的:
E ( s ) = g s E(s) = g^s E(s)=gs

明显有同态加法
E ( s 1 ) ⋅ E ( s 2 ) = g s 1 + s 2 = E ( s 1 + s 2 ) E(s_1) \cdot E(s_2) = g^{s_1+s_2} = E(s_1+s_2) E(s1)E(s2)=gs1+s2=E(s1+s2)

以及标量乘法
E ( s ) c = g c ⋅ s = E ( c ⋅ s ) E(s)^c = g^{c \cdot s} = E(c \cdot s) E(s)c=gcs=E(cs)

它不支持同态乘法(太笨重,也没必要)。利用同态加法和标量乘法,我们完全可以对一个多项式 ϕ ( x ) \phi(x) ϕ(x)做承诺:随机点 s ∈ F s \in \mathbb F sF的函数值 ϕ ( s ) \phi(s) ϕ(s)对应的单个群元素 g ϕ ( s ) g^{\phi(s)} gϕ(s)Kate Commitment

协议修改为:

  1. V V V随机采样 s s s,发送承诺
    E ( s 0 ) , E ( s 1 ) , ⋯   , E ( s d ) E(s^0),E(s^1),\cdots,E(s^d) E(s0),E(s1),,E(sd)

  2. P P P拥有
    p ( x ) = ∑ i = 0 d p i x i p(x) = \sum_{i=0}^d p_i x^i p(x)=i=0dpixi

    然后计算
    E ( p ( s ) ) = ∏ i = 0 d ( g s i ) p i = ∏ i = 0 d E ( s i ) p i = g p E(p(s)) = \prod_{i=0}^d (g^{s^i})^{p_i} = \prod_{i=0}^d E(s^i)^{p_i} = g^p E(p(s))=i=0d(gsi)pi=i=0dE(si)pi=gp

    类似的计算 h ( x ) = p ( x ) / t ( x ) h(x)=p(x)/t(x) h(x)=p(x)/t(x)对应的 E ( h ( s ) ) E(h(s)) E(h(s)),然后发送 g p , g h g^p,g^h gp,gh V V V

  3. V V V本地计算 t = t ( s ) t=t(s) t=t(s),然后验证 g p = ( g h ) t g^p = (g^h)^t gp=(gh)t

上述协议的问题:

  • P P P完全可以使用任意策略,来计算两个任意的值 z p , z h z_p,z_h zp,zh,只要满足 z p = z h t ( s ) z_p = z_h^{t(s)} zp=zht(s):先计算出 E ( t ( s ) ) = g t ( s ) E(t(s)) = g^{t(s)} E(t(s))=gt(s),然后随机选取 r r r,设置 z h = g r z_h=g^r zh=gr z p = ( g t ( s ) ) r z_p = (g^{t(s)})^r zp=(gt(s))r

限制多项式

我们应当限制 P P P正确地使用这些承诺 E ( s i ) E(s^i) E(si)的幂次,来计算 p ( s ) p(s) p(s)的承诺。这里,我们让 V V V对承诺 E ( s ) E(s) E(s)随机偏移 E ( s ) α E(s)^\alpha E(s)α,要求 P P P返回的一对值 a , a ′ a,a' a,a满足限制 a α = a ′ a^\alpha=a' aα=a

那么由于 CDH 限制了 P P P不知道 α \alpha α,于是它只能选取某个整数 c c c,并计算
a = ( E ( s ) ) c , a ′ = ( E ( s ) α ) c a=(E(s))^c,a'=(E(s)^\alpha)^c a=(E(s))c,a=(E(s)α)c

这是除了穷举外,唯一的使得 a α = a ′ a^\alpha=a' aα=a的计算方法。 V V V虽然不知道 c c c的值(也不应知道),但它可以确定 a a a确实是 E ( s ) E(s) E(s)的某个幂次

协议修改为:

  1. V V V随机采样 s , α s,\alpha s,α,发送承诺
    E ( s 0 ) , E ( s 1 ) , ⋯   , E ( s d ) E(s^0),E(s^1),\cdots,E(s^d) E(s0),E(s1),,E(sd)

    以及偏移的承诺
    E ( s 0 ) α , E ( s 1 ) α , ⋯   , E ( s d ) α E(s^0)^\alpha,E(s^1)^\alpha,\cdots,E(s^d)^\alpha E(s0)α,E(s1)α,,E(sd)α

  2. P P P拥有
    p ( x ) = ∑ i = 0 d p i x i p(x) = \sum_{i=0}^d p_i x^i p(x)=i=0dpixi

    然后计算
    E ( p ( s ) ) = ∏ i = 0 d ( g s i ) p i = ∏ i = 0 d E ( s i ) p i = g p E(p(s)) = \prod_{i=0}^d (g^{s^i})^{p_i} = \prod_{i=0}^d E(s^i)^{p_i} = g^p E(p(s))=i=0d(gsi)pi=i=0dE(si)pi=gp

    以及对应的偏移
    E ( p ( s ) ) α = ( ∏ i = 0 d ( g s i ) p i ) α = ∏ i = 0 d ( E ( s i ) α ) p i = g α ⋅ p = g p ′ E(p(s))^\alpha = (\prod_{i=0}^d (g^{s^i})^{p_i})^\alpha = \prod_{i=0}^d (E(s^i)^\alpha)^{p_i} = g^{\alpha \cdot p} = g^{p'} E(p(s))α=(i=0d(gsi)pi)α=i=0d(E(si)α)pi=gαp=gp

    类似的计算 h ( x ) = p ( x ) / t ( x ) h(x)=p(x)/t(x) h(x)=p(x)/t(x)对应的 E ( h ( s ) ) E(h(s)) E(h(s)),然后发送 g p , g p ’ , g h g^p,g^{p’},g^h gp,gp,gh V V V

  3. V V V本地计算 t = t ( s ) t=t(s) t=t(s),先检查约束 ( g p ) α = g p ′ (g^p)^\alpha=g^{p'} (gp)α=gp,然后再验证 g p = ( g h ) t g^p = (g^h)^t gp=(gh)t

上述协议的问题:

  • 理论上 h ( x ) h(x) h(x)的系数 h i h_i hi的范围是整个域 F \mathbb F F,但是实际工程里的系数是有限的取值,因此 V V V完全可以根据 E ( h ( s ) ) E(h(s)) E(h(s))的信息获得 h ( x ) h(x) h(x)的一些特性信息。 p ( x ) = t ( x ) h ( x ) p(x)=t(x)h(x) p(x)=t(x)h(x)也一样。

添加零知识

由于 V V V只能根据 P P P发送的承诺值 g p , g p ′ , g h , g h ′ g^p,g^{p'},g^h,g^{h'} gp,gp,gh,gh,来确定 p ( x ) p(x) p(x)的信息。因此,我们让 P P P也对这些承诺值做随机偏移 δ \delta δ

协议修改为:

  1. V V V随机采样 s , α s,\alpha s,α,发送承诺
    E ( s 0 ) , E ( s 1 ) , ⋯   , E ( s d ) E(s^0),E(s^1),\cdots,E(s^d) E(s0),E(s1),,E(sd)

    以及偏移的承诺
    E ( s 0 ) α , E ( s 1 ) α , ⋯   , E ( s d ) α E(s^0)^\alpha,E(s^1)^\alpha,\cdots,E(s^d)^\alpha E(s0)α,E(s1)α,,E(sd)α

  2. P P P拥有
    p ( x ) = ∑ i = 0 d p i x i p(x) = \sum_{i=0}^d p_i x^i p(x)=i=0dpixi

    然后计算
    E ( p ( s ) ) = ∏ i = 0 d ( g s i ) p i = ∏ i = 0 d E ( s i ) p i = g p E(p(s)) = \prod_{i=0}^d (g^{s^i})^{p_i} = \prod_{i=0}^d E(s^i)^{p_i} = g^p E(p(s))=i=0d(gsi)pi=i=0dE(si)pi=gp

    以及对应的偏移
    E ( p ( s ) ) α = ( ∏ i = 0 d ( g s i ) p i ) α = ∏ i = 0 d ( E ( s i ) α ) p i = g α ⋅ p = g p ′ E(p(s))^\alpha = (\prod_{i=0}^d (g^{s^i})^{p_i})^\alpha = \prod_{i=0}^d (E(s^i)^\alpha)^{p_i} = g^{\alpha \cdot p} = g^{p'} E(p(s))α=(i=0d(gsi)pi)α=i=0d(E(si)α)pi=gαp=gp

    类似的计算 h ( x ) = p ( x ) / t ( x ) h(x)=p(x)/t(x) h(x)=p(x)/t(x)对应的 E ( h ( s ) ) E(h(s)) E(h(s))

    然后选取随机偏移 δ \delta δ,计算并发送
    ( g p ) δ , ( g p ’ ) δ , ( g h ) δ (g^p)^\delta,(g^{p’})^\delta,(g^h)^\delta (gp)δ,(gp)δ,(gh)δ

  3. V V V本地计算 t = t ( s ) t=t(s) t=t(s),先检查约束 ( ( g p ) δ ) α = ( g p ′ ) δ ((g^p)^\delta)^\alpha=(g^{p'})^\delta ((gp)δ)α=(gp)δ,然后再验证
    ( g p ) δ = E ( δ ⋅ p ( s ) ) = ( ( g h ) δ ) t = E ( δ ⋅ t ( s ) h ( s ) ) (g^p)^\delta = E(\delta \cdot p(s)) = ((g^h)^\delta)^t = E(\delta \cdot t(s)h(s)) (gp)δ=E(δp(s))=((gh)δ)t=E(δt(s)h(s))

上述协议的问题:

  • 由于上述协议是 P P P, V V V交互式进行的,因此第三者 V ′ V' V总是可以质疑上述 proof 的正确性。

实现非交互性

观察协议,发现只要让 step 1 的随机点和随机偏移 s , α s,\alpha s,α成为证明系统的 secret parameters 即可。这个秘密参数应当满足以下性质: to be reusable, public, trustworthy and infeasible to abuse。它叫做 common reference stringCRS),就是天上掉馅饼 !!!∑(゚Д゚ノ)ノ

我们让可信方生成 s , α s,\alpha s,α,然后计算 E ( t ( s ) ) , { E ( s i ) , E ( s i ) α } i = 1 d E(t(s)),\{E(s^i),E(s^i)^\alpha\}_{i=1}^d E(t(s)),{E(si),E(si)α}i=1d,公开后立刻销毁 s , α s,\alpha s,α,防止 P P P伪造信息。任意的人都可以作为 P , V P,V P,V在任意的一次证明中使用它,且他们都不知道 s , α s,\alpha s,α的值。

由于 V V V不知道 t ( s ) t(s) t(s),那么怎么验证 E ( p ( s ) ) = E ( t ( s ) ⋅ h ( s ) ) E(p(s))=E(t(s) \cdot h(s)) E(p(s))=E(t(s)h(s))是个问题,因为承诺算法 E ( ⋅ ) E(\cdot) E()不支持同态乘法。于是我们引入双线性对(可在椭圆曲线群上实例化),它可以计算密文下的单次乘法。

椭圆曲线群 G , G G,\textbf{G} G,G,令 g , g g,\textbf{g} g,g是它们各自的生成元,存在双线性映射 e : G × G → G e:G \times G \to \textbf{G} e:G×GG,使得 e ( g , g ) = g e(g,g)=\textbf{g} e(g,g)=g,满足
e ( g a , g b ) = g ( g a b , g ) = e ( g , g a b ) = e ( g , g ) a b = g a b e(g^a,g^b) = g(g^{ab},g) = e(g,g^{ab}) = e(g,g)^{ab} = \textbf{g}^{ab} e(ga,gb)=g(gab,g)=e(g,gab)=e(g,g)ab=gab

易知,
e ( g a , g b ) ⋅ e ( g c , g d ) = g a b + c d e(g^a,g^b) \cdot e(g^c,g^d) = \textbf{g}^{ab+cd} e(ga,gb)e(gc,gd)=gab+cd

协议修改为:

  1. Setup:可信方随机采样 s , α s,\alpha s,α,计算承诺
    E ( s 0 ) , E ( s 1 ) , ⋯   , E ( s d ) E(s^0),E(s^1),\cdots,E(s^d) E(s0),E(s1),,E(sd)

    以及偏移的承诺
    E ( s 0 ) α , E ( s 1 ) α , ⋯   , E ( s d ) α E(s^0)^\alpha,E(s^1)^\alpha,\cdots,E(s^d)^\alpha E(s0)α,E(s1)α,,E(sd)α

    设置 Proving key(公开的):
    ( g α ,   { g s i } i = 1 d ,   { g α s i } i = 1 d ) \left( g^\alpha,\, \{g^{s^i}\}_{i=1}^d,\, \{g^{\alpha s^i}\}_{i=1}^d \right) (gα,{gsi}i=1d,{gαsi}i=1d)

    设置 Verification key(公开的):
    ( g α ,   g t ( s ) ) \left( g^\alpha,\, g^{t(s)} \right) (gα,gt(s))

    上述两者就构成了 CRS

  2. Proving: P P P拥有
    p ( x ) = ∑ i = 0 d p i x i p(x) = \sum_{i=0}^d p_i x^i p(x)=i=0dpixi

    然后计算
    E ( p ( s ) ) = ∏ i = 0 d ( g s i ) p i = ∏ i = 0 d E ( s i ) p i = g p E(p(s)) = \prod_{i=0}^d (g^{s^i})^{p_i} = \prod_{i=0}^d E(s^i)^{p_i} = g^p E(p(s))=i=0d(gsi)pi=i=0dE(si)pi=gp

    以及对应的偏移
    E ( p ( s ) ) α = ( ∏ i = 0 d ( g s i ) p i ) α = ∏ i = 0 d ( E ( s i ) α ) p i = g α ⋅ p = g p ′ E(p(s))^\alpha = (\prod_{i=0}^d (g^{s^i})^{p_i})^\alpha = \prod_{i=0}^d (E(s^i)^\alpha)^{p_i} = g^{\alpha \cdot p} = g^{p'} E(p(s))α=(i=0d(gsi)pi)α=i=0d(E(si)α)pi=gαp=gp

    类似的计算 h ( x ) = p ( x ) / t ( x ) h(x)=p(x)/t(x) h(x)=p(x)/t(x)对应的 E ( h ( s ) ) , E ( α ⋅ p ( s ) ) E(h(s)),E(\alpha \cdot p(s)) E(h(s)),E(αp(s))

    然后选取随机偏移 δ \delta δ,计算并发送
    π = { ( g p ) δ , ( g p ’ ) δ , ( g h ) δ } \pi = \{(g^p)^\delta,(g^{p’})^\delta,(g^h)^\delta\} π={(gp)δ,(gp)δ,(gh)δ}

  3. Verification:利用双线性对(计算乘法) V V V先检查约束,
    e ( ( g p ) δ , g α ) = e ( ( g p ′ ) δ , g ) e((g^p)^\delta,g^\alpha) = e((g^{p'})^\delta,g) e((gp)δ,gα)=e((gp)δ,g)
    然后再验证因子
    e ( ( g p ) δ , g ) = e ( ( g h ) δ , g t ( s ) ) e((g^p)^\delta,g) = e((g^h)^\delta,g^{t(s)}) e((gp)δ,g)=e((gh)δ,gt(s))

注意,应当让 G ≠ G G \neq \textbf{G} G=G,使得 e ( ⋅ , ⋅ ) e(\cdot,\cdot) e(,)类似一个Hash函数。如果 G = G G = \textbf{G} G=G,那么恶意的 P P P可以设置 g p ′ = e ( g p , g α ) g^{p'}=e(g^p,g^\alpha) gp=e(gp,gα),于是也可以通过检查
e ( e ( g p , g α ) , g ) = e ( g p , g α ) e(e(g^p,g^\alpha),g) = e(g^p,g^\alpha) e(e(gp,gα),g)=e(gp,gα)

上述协议的问题:

  • s , α s,\alpha s,α是由一个可信方选取的,计算了承诺后立即销毁它们。这在现实中不切实际:没有人会相信其他人确实销毁了 s , α s,\alpha s,α,持有它们的 P P P拥有伪造 proof 的能力。

CRS

为了避免诚实方的问题,我们生成 composite CRS。假设存在 n n n个参与者 { P j } j = 1 n \{P_j\}_{j=1}^n {Pj}j=1n,我们选取 P 1 P_1 P1作为链表开头:

  1. P 1 P_1 P1随机选取 s 1 , α 1 s_1,\alpha_1 s1,α1,公布它的 CRS
    ( g A 1 , { g S 1 i } i , { g A S 1 i } i ) : = ( g α 1 ,   { g s 1 i } i ,   { g α 1 s 1 i } i ) \left( g^{A_1}, \{g^{S_1^i}\}_i, \{g^{AS_1^i}\}_i \right) := \left( g^{\alpha_1},\, \{g^{s_1^i}\}_i,\, \{g^{\alpha_1 s_1^i}\}_i \right) (gA1,{gS1i}i,{gAS1i}i):=(gα1,{gs1i}i,{gα1s1i}i)

  2. P j P_j Pj接收到 P j − 1 P_{j-1} Pj1的 CRS 后,随机选取 s j , α j s_j,\alpha_j sj,αj,利用加法同态,计算新的 CRS
    ( g A j , { g S j i } i , { g A j S j i } i ) : = ( g A j − 1 ⋅ α j ,   { g S j − 1 i ⋅ s j i } i ,   { g A j − 1 S j − 1 i ⋅ α j s j i } i ) \left( g^{A_j}, \{g^{S_j^i}\}_i, \{g^{A_jS_j^i}\}_i \right) := \left( g^{A_{j-1} \cdot \alpha_j},\, \{g^{S_{j-1}^i \cdot s_j^i}\}_i,\, \{g^{A_{j-1}S_{j-1}^i \cdot \alpha_j s_j^i}\}_i \right) (gAj,{gSji}i,{gAjSji}i):=(gAj1αj,{gSj1isji}i,{gAj1Sj1iαjsji}i)

  3. 最后, P n P_n Pn发布最终的 CRS
    ( g A n , { g S n i } i , { g A n S n i } i ) \left( g^{\Alpha_n}, \{g^{S_n^i}\}_i, \{g^{A_nS_n^i}\}_i \right) (gAn,{gSni}i,{gAnSni}i)

为了防止第 j ∈ [ n ] j \in [n] j[n]个参与者对不同的幂次 i i i使用不同的 s s s,从而破坏 CRS 令它不可用,我们需要做一致性检查consistency check):

  1. i = 1 i=1 i=1的承诺 E ( S 1 ) E(S^1) E(S1)为标准值(canonical value),依次检查其他的 i = 2 , ⋯   , d i = 2,\cdots,d i=2,,d的幂次的承诺,
    e ( E ( S i ) , g ) = e ( g S , g S i − 1 ) = e ( E ( S 1 ) , g S i − 1 ) e(E(S^i),g) = e(g^S,g^{S^{i-1}}) = e(E(S^1),g^{S^{i-1}}) e(E(Si),g)=e(gS,gSi1)=e(E(S1),gSi1)

  2. 然后,还要检查每个 i = 1 , 2 , ⋯   , d i=1,2,\cdots,d i=1,2,,d的偏移的承诺,
    e ( E ( A S i ) , g ) = e ( g S i , g A ) = e ( E ( A i ) , g A ) e(E(A S^i),g) = e(g^{S^i},g^A) = e(E(A^i),g^A) e(E(ASi),g)=e(gSi,gA)=e(E(Ai),gA)

另外,为了防止第 j ≥ 2 j \ge 2 j2个参与者不使用前 j − 1 j-1 j1个人的 CRS,从而移除它们的随机性,我们还需要验证它们确实是在 ( g A j − 1 , { g S j − 1 i } i , { g A j − 1 S j − 1 i } i ) \left( g^{A_{j-1}}, \{g^{S_{j-1}^i}\}_i, \{g^{A_{j-1}S_{j-1}^i}\}_i \right) (gAj1,{gSj1i}i,{gAj1Sj1i}i)的基础上计算了幂次,利用双线性对判断密文下乘积是否相等,

  1. 要求 j ≥ 2 j \ge 2 j2的参与者都公布额外的关于 s j , α j s_j,\alpha_j sj,αj的承诺
    ( g α j , { g s j i } i , { g α j s j i } i ) \left( g^{\alpha_j}, \{g^{s_j^i}\}_i, \{g^{\alpha_j s_j^i}\}_i \right) (gαj,{gsji}i,{gαjsji}i)

  2. 每个参与者都可以检查
    e ( E ( A j i ) , g ) = e ( E ( A j − 1 i ) , g α j ) e(E(A_{j}^i),g) = e(E(A_{j-1}^i),g^{\alpha_j}) e(E(Aji),g)=e(E(Aj1i),gαj)

    e ( E ( S j i ) , g ) = e ( E ( S j − 1 i ) , g s j i ) e(E(S_{j}^i),g) = e(E(S_{j-1}^i),g^{s_j^i}) e(E(Sji),g)=e(E(Sj1i),gsji)

    e ( E ( A j S j i ) , g ) = e ( E ( A j − 1 S j − 1 i ) , g α j s j i ) e(E(A_j S_{j}^i),g) = e(E(A_{j-1} S_{j-1}^i),g^{\alpha_j s_j^i}) e(E(AjSji),g)=e(E(Aj1Sj1i),gαjsji)

总结

在 CRS model 下,我们实现了对于多项式知识 t ( x ) ∣ p ( x ) t(x) | p(x) t(x)p(x) 的非交互简洁零知识证明,Prover 只需发送一个消息
π = { ( g p ) δ , ( g p ’ ) δ , ( g h ) δ } \pi = \{(g^p)^\delta,(g^{p’})^\delta,(g^h)^\delta\} π={(gp)δ,(gp)δ,(gh)δ}
给 Verifier 验证。这个 proof 仅仅包含 3 3 3个承诺,无论 p ( x ) , t ( x ) p(x),t(x) p(x),t(x)的规模有多大。

你可能感兴趣的:(#,零知识证明,机器学习,信息安全,密码学,网络,区块链)