看zk-SNARK的文章或者资料的时候,经常会碰到一些算法名称,比如Groth16,GGPR13等等。这些名称是由算法提出的作者名称或者名称首字母以及相应的年份组成。Groth16,是由Jens Groth在2016年提出的算法。GGPR13,是由Rosario Gennaro,Craig Gentry,Bryan Parno,Mariana Raykova在2013年提出的算法。

零知识证明(zk-SNARK ),从QSP/QAP到Groth16,期间也有很多学者专家,提出各种优化(优化计算时间,优化证明的大小,优化电路的尺寸等等)。Groth16提出的算法,具有非常少的证明数据(2/3个证明数据)以及一个表达式验证。

Groth16论文(On the Size of Pairing-based Non-interactive Arguments)的下载地址:

https://eprint.iacr.org/2016/260.pdf

本文主要从工程应用理解的角度介绍Groth16算法的证明和验证过程。文章中所用的中文字眼可能和行业中不一样,欢迎批评指出。

术语介绍

Proofs - 在零知识证明的场景下,Proofs指具有完美的完备性(Completeness)以及完美的可靠性(Soundness)。也就是,具有无限计算资源也无法攻破。

Arguments - 在零知识证明的场景下,Arguments是指具有完美的完备性以及多项式计算的可靠性。也就是,在多项式计算能力下,是可靠的。

Schwartz-Zippel 定理 - 假设f(x1,x2,...,xn)f(x_1, x_2, ..., x_n)f(x1​,x2​,...,xn​)是个n元多项式,多项式总的阶为d。如果r1,r2,...,rnr_1, r_2, ..., r_nr1​,r2​,...,rn​是从有限集合S中随机选取,则f(r1,r2,...,rn)=0f(r_1, r_2, ..., r_n) = 0f(r1​,r2​,...,rn​)=0的概率是小于等于d∣s∣\frac{d}{|s|}∣s∣d​。简单的说,如果多元多项式,在很大的集合中随机选取参数,恰好函数f等于0的概率几乎为0。

https://brilliant.org/wiki/schwartz-zippel-lemma/

线性(Linear)函数 - 假设函数f满足两个条件:1. f(x+y)=f(x)+f(y)f(x+y) = f(x)+f(y)f(x+y)=f(x)+f(y) 2. f(αx)=αf(x)f(\alpha x) = \alpha f(x)f(αx)=αf(x),则称函数f为线性函数。

Affine 函数 - 假设函数g,能找到一个线性函数f,满足g(x)=f(x)+bg(x) = f(x) + bg(x)=f(x)+b,则称函数g为Affine函数。也就是,Affine函数是由一个线性函数和偏移构成。

Trapdoor函数 - 假设一个Trapdoor函数f,x→f(x)x \to f(x)x→f(x) 很容易,但是f(x)→xf(x) \to xf(x)→x非常难。但是,如果提供一个secret,f(x)→xf(x) \to xf(x)→x也非常容易。

Jens Groth是谁?

Groth是英国伦敦UCL大学的计算机系的教授。伦敦大学学院 (University College London),简称UCL,建校于1826年,位于英国伦敦,是一所世界著名的顶尖高等学府,为享有顶级声誉的综合研究型大学,伦敦大学联盟创始院校,英国金三角名校,与剑桥大学、牛津大学、帝国理工、伦敦政经学院并称G5超级精英大学。

http://www0.cs.ucl.ac.uk/staff/j.groth/

Groth从2009年开始,每年发表一篇或者多篇密码学或者零知识证明的文章,所以你经常会听到Groth09,Groth10等等算法。

简言之,牛人~。

NILP

Groth16的论文先引出NILP(non-interactive linear proofs)的定义:

  1. (σ,τ)←Setup(R)(\sigma, \tau) \gets Setup(R)(σ,τ)←Setup(R) :设置过程,生成σ∈Fm\sigma \in F^mσ∈Fm, τ∈Fn\tau \in F^nτ∈Fn。

  2. π←Prove(R,σ,ϕ,ω)\pi \gets Prove(R, \sigma, \phi, \omega)π←Prove(R,σ,ϕ,ω) :证明过程,证明过程又分成两步:a. 生成线性关系Π←ProofMatrix(R,ϕ,ω)\Pi \gets ProofMatrix(R, \phi, \omega)Π←ProofMatrix(R,ϕ,ω),其中ProofMatrix是个多项式算法。b. 生成证明:π=Πσ\pi = \Pi\sigmaπ=Πσ。

  3. 0/1←Vfy(R,σ,ϕ,π)0/1 \gets Vfy(R, \sigma, \phi, \pi)0/1←Vfy(R,σ,ϕ,π) :验证过程,验证者使用(R,ϕ)(R, \phi)(R,ϕ)生成电路t,并验证t(σ,π)t(\sigma, \pi)t(σ,π)是否成立。

在NILP定义的基础上,Groth16进一步定义了split NILP,也就是说,CRS分成两部分(σ1,σ2)(\sigma1, \sigma2)(σ1,σ2),证明者提交的证明也分成两部分(π1,π2)(\pi1, \pi2)(π1,π2)。

总的来说,核心在“Linear”上,证明者生成的证明和CRS成线性关系。

QAP的NILP

QAP的定义为"Relation":R=(F,aux,ℓ,{ui(X),vi(X),wi(X)}i=0m,t(X))R=(F, aux, \ell, \{u_i(X), v_i(X), w_i(X)\}_{i=0}^m, t(X))R=(F,aux,ℓ,{ui​(X),vi​(X),wi​(X)}i=0m​,t(X))。也就是说,statements为(a1,...,aℓ)∈Fℓ(a_1, ..., a_\ell) \in F^\ell(a1​,...,aℓ​)∈Fℓ, witness为(al+1,...,am)∈Fm−ℓ(a_{l+1}, ..., a_m) \in F^{m-\ell}(al+1​,...,am​)∈Fm−ℓ,并且a0=1a_0 = 1a0​=1的情况下,满足如下的等式:

∑i=0maiui(X)⋅∑i=0maivi(X)=∑i=0maiwi(X)+h(X)t(X)\sum_{i=0}^m a_iu_i(X) \cdot \sum_{i=0}^m a_iv_i(X) = \sum_{i=0}^m {a_iw_i(X)+h(X)t(X)}∑i=0m​ai​ui​(X)⋅∑i=0m​ai​vi​(X)=∑i=0m​ai​wi​(X)+h(X)t(X)

t(X)t(X)t(X)的阶为n。

  1. 设置过程:随机选取α,β,γ,δ,x←F∗\alpha, \beta, \gamma, \delta, x \gets F^*α,β,γ,δ,x←F∗,生成σ,τ\sigma, \tauσ,τ。

    τ=(α,β,γ,δ,x)\tau = (\alpha, \beta, \gamma, \delta, x)τ=(α,β,γ,δ,x)

    σ=(α,β,γ,δ,{xi}i=0n−1,{βui(x)+αvi(x)+wi(x)γ}i=0ℓ,{βui(x)+αvi(x)+wi(x)δ}i=ℓ+1m,{xit(x)δ}i=0n−2)\sigma = (\alpha, \beta, \gamma, \delta, \{x^i\}_{i=0}^{n-1}, \{\cfrac{\beta u_i(x)+\alpha v_i(x)+w_i(x)}{\gamma}\}_{i=0}^\ell, \{\cfrac{\beta u_i(x)+\alpha v_i(x)+w_i(x)}{\delta}\}_{i=\ell+1}^m, \{\cfrac{x^it(x)}{\delta}\}_{i=0}^{n-2})σ=(α,β,γ,δ,{xi}i=0n−1​,{γβui​(x)+αvi​(x)+wi​(x)​}i=0ℓ​,{δβui​(x)+αvi​(x)+wi​(x)​}i=ℓ+1m​,{δxit(x)​}i=0n−2​)

  2. 证明过程:随机选择两个参数r和sr和sr和s,计算π=Πσ=(A,B,C)\pi = \Pi\sigma = (A, B, C)π=Πσ=(A,B,C)

    A=α+∑i=0maiui(x)+rδA = \alpha + \sum_{i=0}^{m} a_i u_i(x) + r\deltaA=α+∑i=0m​ai​ui​(x)+rδ

    B=β+∑i=0maivi(x)+sδB = \beta + \sum_{i=0}^{m} a_i v_i(x) + s\deltaB=β+∑i=0m​ai​vi​(x)+sδ

    C=∑i=ℓ+1mai(βui(x)+αvi(x)+wi(x))+h(x)t(x)δ+As+rB−rsδC = \cfrac{\sum_{i=\ell+1}^m a_i (\beta u_i(x)+\alpha v_i(x)+w_i(x))+h(x)t(x)}{\delta} + As + r B - r s \deltaC=δ∑i=ℓ+1m​ai​(βui​(x)+αvi​(x)+wi​(x))+h(x)t(x)​+As+rB−rsδ

  3. 验证过程:

    验证过程,计算如下的等式是否成立:

    A⋅B=α⋅β+∑i=0ℓai(βui(x)+αvi(x)+wi(x))γ⋅γ+C⋅δA\cdot B = \alpha \cdot \beta + \cfrac{\sum_{i=0}^\ell a_i (\beta u_i(x)+\alpha v_i(x)+w_i(x))}{\gamma} \cdot \gamma + C \cdot \deltaA⋅B=α⋅β+γ∑i=0ℓ​ai​(βui​(x)+αvi​(x)+wi​(x))​⋅γ+C⋅δ

注意,设置过程中的x是一个值,不是代表多项式。在理解证明/验证过程的时候,必须要明确,A/B/C的计算是和CRS中的参数成线性关系(NILP的定义)。在明确这一点的基础上,可以看出α和β\alpha和 \betaα和β的参数能保证A/B/C的计算采用统一的a0,a1,...,ama_0, a_1, ... , a_ma0​,a1​,...,am​参数。因为A⋅BA\cdot BA⋅B会包含∑i=0ℓai(βui(x)+αvi(x))\sum_{i=0}^\ell a_i (\beta u_i(x)+\alpha v_i(x))∑i=0ℓ​ai​(βui​(x)+αvi​(x))子项,要保证A⋅BA\cdot BA⋅B和C相等,必须采用统一的a0,a1,...,ama_0, a_1, ... , a_ma0​,a1​,...,am​参数。参数r和sr和sr和s增加随机因子,保证零知识(验证者无法从证明中获取有用信息)。参数γ和δ\gamma和\deltaγ和δ保证了验证等式的最后两个乘积独立于α和β\alpha和 \betaα和β的参数。

完备性证明(Completeness):
完备性证明,也就是验证等式成立。

A⋅B=(α+∑i=0maiui(x)+rδ)⋅(β+∑i=0maivi(x)+sδ)A\cdot B = (\alpha + \sum_{i=0}^{m} a_i u_i(x) + r\delta) \cdot (\beta + \sum_{i=0}^{m} a_i v_i(x) + s\delta)A⋅B=(α+∑i=0m​ai​ui​(x)+rδ)⋅(β+∑i=0m​ai​vi​(x)+sδ)

=α⋅β+α⋅∑i=0maivi(x)+αsδ= \alpha \cdot \beta + \alpha \cdot \sum_{i=0}^{m} a_i v_i(x) + \alpha s \delta=α⋅β+α⋅∑i=0m​ai​vi​(x)+αsδ
+β⋅∑i=0maiui(x)+∑i=0maiui(x)⋅∑i=0maivi(x)+sδ⋅∑i=0maiui(x)+ \beta \cdot \sum_{i=0}^{m} a_i u_i(x) + \sum_{i=0}^{m} a_i u_i(x) \cdot \sum_{i=0}^{m} a_i v_i(x) + s\delta \cdot \sum_{i=0}^{m} a_i u_i(x)+β⋅∑i=0m​ai​ui​(x)+∑i=0m​ai​ui​(x)⋅∑i=0m​ai​vi​(x)+sδ⋅∑i=0m​ai​ui​(x)
+rδβ+rδ∑i=0maivi(x)+rsδ2+ r\delta \beta + r\delta \sum_{i=0}^{m} a_i v_i(x) + rs\delta^2+rδβ+rδ∑i=0m​ai​vi​(x)+rsδ2

=α⋅β+∑i=0ℓai(βui(x)+αvi(x)+wi(x))+∑i=ℓ+1mai(βui(x)+αvi(x)+wi(x))+h(t)⋅t(x)= \alpha \cdot \beta + \sum_{i=0}^\ell a_i (\beta u_i(x)+\alpha v_i(x)+w_i(x)) + \sum_{i=\ell + 1}^m a_i (\beta u_i(x)+\alpha v_i(x)+w_i(x)) + h(t)\cdot t(x)=α⋅β+∑i=0ℓ​ai​(βui​(x)+αvi​(x)+wi​(x))+∑i=ℓ+1m​ai​(βui​(x)+αvi​(x)+wi​(x))+h(t)⋅t(x)

+αsδ+sδ⋅∑i=0maiui(x)+rsδ2+ \alpha s \delta + s\delta \cdot \sum_{i=0}^{m} a_i u_i(x) + r s \delta^2+αsδ+sδ⋅∑i=0m​ai​ui​(x)+rsδ2

+rδβ+rδ∑i=0maivi(x)+rsδ2+ r\delta \beta + r\delta \sum_{i=0}^{m} a_i v_i(x) + r s \delta^2+rδβ+rδ∑i=0m​ai​vi​(x)+rsδ2

−rsδ2- r s \delta^2−rsδ2

=α⋅β+∑i=0ℓai(βui(x)+αvi(x)+wi(x))+∑i=ℓ+1mai(βui(x)+αvi(x)+wi(x))+h(t)⋅t(x)= \alpha \cdot \beta + \sum_{i=0}^\ell a_i (\beta u_i(x)+\alpha v_i(x)+w_i(x)) + \sum_{i=\ell + 1}^m a_i (\beta u_i(x)+\alpha v_i(x)+w_i(x)) + h(t)\cdot t(x)=α⋅β+∑i=0ℓ​ai​(βui​(x)+αvi​(x)+wi​(x))+∑i=ℓ+1m​ai​(βui​(x)+αvi​(x)+wi​(x))+h(t)⋅t(x)

+Asδ+rBδ−rsδ2+ A s \delta + r B \delta - r s \delta^2+Asδ+rBδ−rsδ2

=α⋅β+∑i=0ℓai(βui(x)+αvi(x)+wi(x))γ⋅γ+C⋅δ= \alpha \cdot \beta + \cfrac{\sum_{i=0}^\ell a_i (\beta u_i(x)+\alpha v_i(x)+w_i(x))}{\gamma} \cdot \gamma + C \cdot \delta=α⋅β+γ∑i=0ℓ​ai​(βui​(x)+αvi​(x)+wi​(x))​⋅γ+C⋅δ

可靠性证明 (Soundness):

Groth16算法证明的是statistical knowledge soundness,假设证明者提供的证明和CRS成线性关系。也就是说,证明A可以用如下的表达式表达(A和CRS的各个参数成线性关系):

A=Aαα+Aββ+Aγγ+Aδδ+A(x)+∑i=0ℓAiβui(x)+αvi(x)+wi(x)γ+∑i=ℓ+1mAiβui(x)+αvi(x)+wi(x)δ+Ah(x)t(x)δA = A_\alpha \alpha + A_\beta \beta + A_\gamma \gamma + A_\delta \delta + A(x) + \sum_{i=0}^{\ell} A_i \cfrac{\beta u_i(x)+\alpha v_i(x)+w_i(x)}{\gamma} + \sum_{i=\ell + 1}^{m} A_i \cfrac{\beta u_i(x)+\alpha v_i(x)+w_i(x)}{\delta} + A_h(x)\cfrac{t(x)}{\delta}A=Aα​α+Aβ​β+Aγ​γ+Aδ​δ+A(x)+∑i=0ℓ​Ai​γβui​(x)+αvi​(x)+wi​(x)​+∑i=ℓ+1m​Ai​δβui​(x)+αvi​(x)+wi​(x)​+Ah​(x)δt(x)​

同理,B/C都可以写成类似的表达:

B=Bαα+Bββ+Bγγ+Bδδ+B(x)+∑i=0ℓBiβui(x)+αvi(x)+wi(x)γ+∑i=ℓ+1mBiβui(x)+αvi(x)+wi(x)δ+Bh(x)t(x)δB = B_\alpha \alpha + B_\beta \beta + B_\gamma \gamma + B_\delta \delta + B(x) + \sum_{i=0}^{\ell} B_i \cfrac{\beta u_i(x)+\alpha v_i(x)+w_i(x)}{\gamma} + \sum_{i=\ell + 1}^{m} B_i \cfrac{\beta u_i(x)+\alpha v_i(x)+w_i(x)}{\delta} + B_h(x)\cfrac{t(x)}{\delta}B=Bα​α+Bβ​β+Bγ​γ+Bδ​δ+B(x)+∑i=0ℓ​Bi​γβui​(x)+αvi​(x)+wi​(x)​+∑i=ℓ+1m​Bi​δβui​(x)+αvi​(x)+wi​(x)​+Bh​(x)δt(x)​

C=Cαα+Cββ+Cγγ+Cδδ+C(x)+∑i=0ℓCiβui(x)+αvi(x)+wi(x)γ+∑i=ℓ+1mCiβui(x)+αvi(x)+wi(x)δ+Ch(x)t(x)δC = C_\alpha \alpha + C_\beta \beta + C_\gamma \gamma + C_\delta \delta + C(x) + \sum_{i=0}^{\ell} C_i \cfrac{\beta u_i(x)+\alpha v_i(x)+w_i(x)}{\gamma} + \sum_{i=\ell + 1}^{m} C_i \cfrac{\beta u_i(x)+\alpha v_i(x)+w_i(x)}{\delta} + C_h(x)\cfrac{t(x)}{\delta}C=Cα​α+Cβ​β+Cγ​γ+Cδ​δ+C(x)+∑i=0ℓ​Ci​γβui​(x)+αvi​(x)+wi​(x)​+∑i=ℓ+1m​Ci​δβui​(x)+αvi​(x)+wi​(x)​+Ch​(x)δt(x)​

从Schwartz-Zippel 定理,我们可以把A/B/C看作是α,β,γ,δ,x\alpha, \beta, \gamma, \delta, xα,β,γ,δ,x的多项式。观察A⋅B=α⋅β+∑i=0ℓai(βui(x)+αvi(x)+wi(x))γ⋅γ+C⋅δA\cdot B = \alpha \cdot \beta + \cfrac{\sum_{i=0}^\ell a_i (\beta u_i(x)+\alpha v_i(x)+w_i(x))}{\gamma} \cdot \gamma + C \cdot \deltaA⋅B=α⋅β+γ∑i=0ℓ​ai​(βui​(x)+αvi​(x)+wi​(x))​⋅γ+C⋅δ 这个验证等式,发现一些变量的限制条件:

1)AαBαα2=0A_\alpha B_\alpha \alpha^2 = 0Aα​Bα​α2=0 (等式的右边没有α2因子\alpha^2因子α2因子)

不失一般性,可以假设Bα=0B_\alpha = 0Bα​=0。

2)AαBβ+AβBα=AαBβ=1A_\alpha B_\beta + A_\beta B_\alpha = A_\alpha B_\beta = 1Aα​Bβ​+Aβ​Bα​=Aα​Bβ​=1 (等式右边αβ=1\alpha \beta = 1αβ=1)

不失一般性,可以假设Aα=Bβ=1A_\alpha = B_\beta = 1Aα​=Bβ​=1。

3)AβBβ=Aβ=0A_\beta B_\beta = A_\beta = 0Aβ​Bβ​=Aβ​=0(等式的右边没有β2\beta^2β2因子)

也就是Aβ=0A_\beta = 0Aβ​=0。

在上述三个约束下,A/B的表达式变成:

A=α+Aγγ+Aδδ+A(x)+∑i=0ℓAiβui(x)+αvi(x)+wi(x)γ+∑i=ℓ+1mAiβui(x)+αvi(x)+wi(x)δ+Ah(x)t(x)δA = \alpha + A_\gamma \gamma + A_\delta \delta + A(x) + \sum_{i=0}^{\ell} A_i \cfrac{\beta u_i(x)+\alpha v_i(x)+w_i(x)}{\gamma} + \sum_{i=\ell + 1}^{m} A_i \cfrac{\beta u_i(x)+\alpha v_i(x)+w_i(x)}{\delta} + A_h(x)\cfrac{t(x)}{\delta}A=α+Aγ​γ+Aδ​δ+A(x)+∑i=0ℓ​Ai​γβui​(x)+αvi​(x)+wi​(x)​+∑i=ℓ+1m​Ai​δβui​(x)+αvi​(x)+wi​(x)​+Ah​(x)δt(x)​

B=β+Bγγ+Bδδ+B(x)+∑i=0ℓBiβui(x)+αvi(x)+wi(x)γ+∑i=ℓ+1mBiβui(x)+αvi(x)+wi(x)δ+Bh(x)t(x)δB = \beta + B_\gamma \gamma + B_\delta \delta + B(x) + \sum_{i=0}^{\ell} B_i \cfrac{\beta u_i(x)+\alpha v_i(x)+w_i(x)}{\gamma} + \sum_{i=\ell + 1}^{m} B_i \cfrac{\beta u_i(x)+\alpha v_i(x)+w_i(x)}{\delta} + B_h(x)\cfrac{t(x)}{\delta}B=β+Bγ​γ+Bδ​δ+B(x)+∑i=0ℓ​Bi​γβui​(x)+αvi​(x)+wi​(x)​+∑i=ℓ+1m​Bi​δβui​(x)+αvi​(x)+wi​(x)​+Bh​(x)δt(x)​

4)等式的右边没有1δ2\cfrac{1}{\delta^2}δ21​

(∑i=ℓ+1mAi(βui(x)+αvi(x)+wi(x))+Ah(x)t(x))(∑i=ℓ+1mBi(βui(x)+αvi(x)+wi(x))+Ah(x)t(x))=0(\sum_{i=\ell+1}^m A_i(\beta u_i(x) + \alpha v_i(x) + w_i(x)) + A_h(x)t(x))(\sum_{i=\ell+1}^m B_i(\beta u_i(x) + \alpha v_i(x) + w_i(x)) + A_h(x)t(x)) = 0(∑i=ℓ+1m​Ai​(βui​(x)+αvi​(x)+wi​(x))+Ah​(x)t(x))(∑i=ℓ+1m​Bi​(βui​(x)+αvi​(x)+wi​(x))+Ah​(x)t(x))=0

不失一般性,∑i=ℓ+1mAi(βui(x)+αvi(x)+wi(x))+Ah(x)t(x)=0\sum_{i=\ell+1}^m A_i(\beta u_i(x) + \alpha v_i(x) + w_i(x)) + A_h(x)t(x) = 0∑i=ℓ+1m​Ai​(βui​(x)+αvi​(x)+wi​(x))+Ah​(x)t(x)=0

5)等式的右边没有1γ2\cfrac{1}{\gamma^2}γ21​

(∑i=0ℓAi(βui(x)+αvi(x)+wi(x)))(∑i=0ℓBi(βui(x)+αvi(x)+wi(x)))=0(\sum_{i=0}^\ell A_i(\beta u_i(x) + \alpha v_i(x) + w_i(x)))(\sum_{i=0}^\ell B_i(\beta u_i(x) + \alpha v_i(x) + w_i(x))) = 0(∑i=0ℓ​Ai​(βui​(x)+αvi​(x)+wi​(x)))(∑i=0ℓ​Bi​(βui​(x)+αvi​(x)+wi​(x)))=0

不失一般性,∑i=0ℓAi(βui(x)+αvi(x)+wi(x))=0\sum_{i=0}^\ell A_i(\beta u_i(x) + \alpha v_i(x) + w_i(x)) = 0∑i=0ℓ​Ai​(βui​(x)+αvi​(x)+wi​(x))=0。

6)等式的右边没有αγ\cfrac{\alpha}{\gamma}γα​, αδ\cfrac{\alpha}{\delta}δα​

α∑i=0ℓBi(βui(x)+αvi(x)+wi(x))γ=0\alpha \cfrac{\sum_{i=0}^\ell B_i(\beta u_i(x) + \alpha v_i(x) + w_i(x))}{\gamma} = 0αγ∑i=0ℓ​Bi​(βui​(x)+αvi​(x)+wi​(x))​=0

α∑i=ℓ+1mBi(βui(x)+αvi(x)+wi(x))+Bh(x)t(x)δ=0\alpha \cfrac{\sum_{i=\ell+1}^m B_i(\beta u_i(x) + \alpha v_i(x) + w_i(x)) + B_h(x)t(x)}{\delta} = 0αδ∑i=ℓ+1m​Bi​(βui​(x)+αvi​(x)+wi​(x))+Bh​(x)t(x)​=0

所以,∑i=0ℓBi(βui(x)+αvi(x)+wi(x))=0,∑i=ℓ+1mBi(βui(x)+αvi(x)+wi(x))+Bh(x)t(x)\sum_{i=0}^\ell B_i(\beta u_i(x) + \alpha v_i(x) + w_i(x)) = 0,\sum_{i=\ell+1}^m B_i(\beta u_i(x) + \alpha v_i(x) + w_i(x)) + B_h(x)t(x)∑i=0ℓ​Bi​(βui​(x)+αvi​(x)+wi​(x))=0,∑i=ℓ+1m​Bi​(βui​(x)+αvi​(x)+wi​(x))+Bh​(x)t(x) 。

7)等式的右边没有βγ\beta \gammaβγ和αγ\alpha\gammaαγ

Aγβγ=0,Bγαγ=0A_\gamma \beta \gamma = 0, B_\gamma \alpha \gamma = 0Aγ​βγ=0,Bγ​αγ=0

所以,Aγ=0,Bγ=0A_\gamma =0, B_\gamma = 0Aγ​=0,Bγ​=0。

在上述七个约束下,A/B的表达式变成:

$A = \alpha + A_\delta \delta + A(x) $

B=β+Bδδ+B(x)B = \beta + B_\delta \delta + B(x)B=β+Bδ​δ+B(x)

再看验证的等式:

A⋅B=α⋅β+∑i=0ℓai(βui(x)+αvi(x)+wi(x))γ⋅γ+C⋅δA\cdot B = \alpha \cdot \beta + \cfrac{\sum_{i=0}^\ell a_i (\beta u_i(x)+\alpha v_i(x)+w_i(x))}{\gamma} \cdot \gamma + C \cdot \deltaA⋅B=α⋅β+γ∑i=0ℓ​ai​(βui​(x)+αvi​(x)+wi​(x))​⋅γ+C⋅δ

=α⋅β+∑i=0ℓai(βui(x)+αvi(x)+wi(x))+C⋅δ= \alpha \cdot \beta + \sum_{i=0}^\ell a_i (\beta u_i(x)+\alpha v_i(x)+w_i(x)) + C \cdot \delta=α⋅β+∑i=0ℓ​ai​(βui​(x)+αvi​(x)+wi​(x))+C⋅δ

观察C⋅δC \cdot \deltaC⋅δ,因为不存在 δγ\cfrac{\delta}{\gamma}γδ​,所以,∑i=0ℓCiβui(x)+αvi(x)+wi(x)γ=0\sum_{i=0}^{\ell} C_i \cfrac{\beta u_i(x)+\alpha v_i(x)+w_i(x)}{\gamma} = 0∑i=0ℓ​Ci​γβui​(x)+αvi​(x)+wi​(x)​=0。

也就是说,C=Cαα+Cββ+Cγγ+Cδδ+C(x)+∑i=ℓ+1mCiβui(x)+αvi(x)+wi(x)δ+Ch(x)t(x)δC = C_\alpha \alpha + C_\beta \beta + C_\gamma \gamma + C_\delta \delta + C(x) + \sum_{i=\ell + 1}^{m} C_i \cfrac{\beta u_i(x)+\alpha v_i(x)+w_i(x)}{\delta} + C_h(x)\cfrac{t(x)}{\delta}C=Cα​α+Cβ​β+Cγ​γ+Cδ​δ+C(x)+∑i=ℓ+1m​Ci​δβui​(x)+αvi​(x)+wi​(x)​+Ch​(x)δt(x)​。

代入验证等式,所以可以推导出:

αB(x)=∑i=0ℓaiαvi(x)+∑i=ℓ+1mCiαvi(x)\alpha B(x) = \sum_{i=0}^\ell a_i \alpha v_i(x) + \sum_{i=\ell+1}^m C_i \alpha v_i(x)αB(x)=∑i=0ℓ​ai​αvi​(x)+∑i=ℓ+1m​Ci​αvi​(x),

βA(x)=∑i=0ℓaiβui(x)+∑i=ℓ+1mCiβui(x)\beta A(x) = \sum_{i=0}^\ell a_i \beta u_i(x) + \sum_{i=\ell+1}^m C_i \beta u_i(x)βA(x)=∑i=0ℓ​ai​βui​(x)+∑i=ℓ+1m​Ci​βui​(x)

如果,假设,对于i=ℓ+1,...,m,ai=Cii=\ell+1, ... , m,a_i = C_ii=ℓ+1,...,m,ai​=Ci​,则

A(x)=∑i=0maiui(x)A(x) = \sum_{i=0}^m a_i u_i(x)A(x)=∑i=0m​ai​ui​(x)

B(x)=∑i=0maivi(x)B(x) = \sum_{i=0}^m a_i v_i(x)B(x)=∑i=0m​ai​vi​(x)

代入A/B,可以获取以下等式:

∑i=0maiui(x)⋅∑i=0maivi(x)=∑i=0maiwi(x)+Ch(x)t(x)\sum_{i=0}^ma_i u_i(x) \cdot \sum_{i=0}^ma_i v_i(x) = \sum_{i=0}^ma_i w_i(x) + C_h(x)t(x)∑i=0m​ai​ui​(x)⋅∑i=0m​ai​vi​(x)=∑i=0m​ai​wi​(x)+Ch​(x)t(x)

在证明和CRS线性关系下,所有能使验证等式成立的情况下,(aℓ+1,...,am)=(Cℓ+1,...,Cm)(a_{\ell+1}, ... , a_m) = (C_{\ell+1}, ... , C_m)(aℓ+1​,...,am​)=(Cℓ+1​,...,Cm​)等式必须成立。也就说,能提供正确证明的,肯定知道witness。

QAP的NIZK Arguments
从QAP的NILP可以演化为QAP的NIZK Arguments。也就是说Groth16算法并不是完美的可靠,而是多项式计算情况下可靠。QAP的定义为"Relation":R=(p,G1,G2,GT,e,g,h,ℓ,{ui(X),vi(X),wi(X)}i=0m,t(X))R=(p, G_1, G_2, G_T, e, g, h, \ell, \{u_i(X), v_i(X), w_i(X)\}_{i=0}^m, t(X))R=(p,G1​,G2​,GT​,e,g,h,ℓ,{ui​(X),vi​(X),wi​(X)}i=0m​,t(X))。也就是说,在一个域ZpZ_pZp​中,statements为(a1,...,aℓ)∈Zpℓ(a_1, ..., a_\ell) \in Z_p^\ell(a1​,...,aℓ​)∈Zpℓ​, witness为(al+1,...,am)∈Zpm−ℓ(a_{l+1}, ..., a_m) \in Z_p^{m-\ell}(al+1​,...,am​)∈Zpm−ℓ​,并且a0=1a_0 = 1a0​=1的情况下,满足如下的等式(t(X)t(X)t(X)的阶为n):

∑i=0maiui(X)⋅∑i=0maivi(X)=∑i=0maiwi(X)+h(X)t(X)\sum_{i=0}^m a_iu_i(X) \cdot \sum_{i=0}^m a_iv_i(X) = \sum_{i=0}^m {a_iw_i(X)}+h(X)t(X)∑i=0m​ai​ui​(X)⋅∑i=0m​ai​vi​(X)=∑i=0m​ai​wi​(X)+h(X)t(X)

也就是说,三个有限群G1,G2,GTG_1, G_2, G_TG1​,G2​,GT​, 对应的生成元分别是g,h,e(g,h)g, h, e(g,h)g,h,e(g,h)。为了方便起见,也为了和论文的表达方式一致,G1有限群G_1有限群G1​有限群的计算用[y]1=gy[y]_1 = g^y[y]1​=gy表示,G2有限群G_2有限群G2​有限群的计算用[y]2=hy[y]_2 = h^y[y]2​=hy表示。

  1. 设置过程:随机选取α,β,γ,δ,x←Zp∗\alpha, \beta, \gamma, \delta, x \gets Z_p^*α,β,γ,δ,x←Zp∗​,生成σ,τ\sigma, \tauσ,τ。

    τ=(α,β,γ,δ,x)\tau = (\alpha, \beta, \gamma, \delta, x)τ=(α,β,γ,δ,x)

    σ=([σ1]1,[σ2]2)\sigma = ([\sigma_1]_1, [\sigma_2]_2)σ=([σ1​]1​,[σ2​]2​)

    σ1=(α,β,δ,{xi}i=0n−1,{βui(x)+αvi(x)+wi(x)γ}i=0ℓ,{βui(x)+αvi(x)+wi(x)δ}i=ℓ+1m,{xit(x)δ}i=0n−2)\sigma_1 = (\alpha, \beta, \delta, \{ x^i \}_{i=0}^{n-1}, \{\cfrac{\beta u_i(x)+\alpha v_i(x) + w_i(x)}{\gamma}\}_{i=0}^{\ell}, \{\cfrac{\beta u_i(x) + \alpha v_i(x) + w_i(x)}{\delta}\}_{i=\ell+1}^{m}, \{\cfrac{x^it(x)}{\delta}\}_{i=0}^{n-2})σ1​=(α,β,δ,{xi}i=0n−1​,{γβui​(x)+αvi​(x)+wi​(x)​}i=0ℓ​,{δβui​(x)+αvi​(x)+wi​(x)​}i=ℓ+1m​,{δxit(x)​}i=0n−2​)

    σ2=(β,γ,δ,{xi}i=0n−1)\sigma_2 = (\beta, \gamma, \delta, \{x^i\}_{i=0}^{n-1})σ2​=(β,γ,δ,{xi}i=0n−1​)

  2. 证明过程:随机选择两个参数r和sr和sr和s,计算π=Πσ=([A]1,[C]1,[B]2)\pi = \Pi\sigma = ([A]_1, [C]_1, [B]_2)π=Πσ=([A]1​,[C]1​,[B]2​)

    A=α+∑i=0maiui(x)+rδA = \alpha + \sum_{i=0}^{m} a_i u_i(x) + r\deltaA=α+∑i=0m​ai​ui​(x)+rδ

    B=β+∑i=0maivi(x)+sδB = \beta + \sum_{i=0}^{m} a_i v_i(x) + s\deltaB=β+∑i=0m​ai​vi​(x)+sδ

    C=∑i=ℓ+1mai(βui(x)+αvi(x)+wi(x))+h(x)t(x)δ+As+rB−rsδC = \cfrac{\sum_{i=\ell+1}^m a_i (\beta u_i(x)+\alpha v_i(x)+w_i(x))+h(x)t(x)}{\delta} + As + r B - r s \deltaC=δ∑i=ℓ+1m​ai​(βui​(x)+αvi​(x)+wi​(x))+h(x)t(x)​+As+rB−rsδ

  3. 验证过程:验证如下的等式是否成立。

    [A]1⋅[B]2=[α]1⋅[β]2+∑i=0ℓai[βui(x)+αvi(x)+wi(x)γ]1⋅[γ]2+[C]1⋅[δ]2[A]_1\cdot [B]_2 = [\alpha]_1 \cdot [\beta]_2 + \sum_{i=0}^\ell a_i [\cfrac{\beta u_i(x)+\alpha v_i(x)+w_i(x)}{\gamma}]_1 \cdot [\gamma]_2 + [C]_1 \cdot [\delta]_2[A]1​⋅[B]2​=[α]1​⋅[β]2​+∑i=0ℓ​ai​[γβui​(x)+αvi​(x)+wi​(x)​]1​⋅[γ]2​+[C]1​⋅[δ]2​

很容易发现,验证过程的等式也可以用4个配对函数表示:

​ e([A]1,[B]2)=e([α]1,[β]2)⋅e(∑i=0ℓai[βui(x)+αvi(x)+wi(x)γ]1,[γ]2)⋅e([C]1,[δ]2)e([A]_1, [B]_2) = e([\alpha]_1, [\beta]_2) \cdot e(\sum_{i=0}^\ell a_i [\cfrac{\beta u_i(x)+\alpha v_i(x)+w_i(x)}{\gamma}]_1, [\gamma]_2) \cdot e([C]_1, [\delta]_2)e([A]1​,[B]2​)=e([α]1​,[β]2​)⋅e(∑i=0ℓ​ai​[γβui​(x)+αvi​(x)+wi​(x)​]1​,[γ]2​)⋅e([C]1​,[δ]2​)

证明过程和QAP的NILP的证明过程类似,不再详细展开。

证明元素的最小个数

论文指出zk-SNARK的最少的证明元素是2个。上述的证明方式是需要提供3个证明元素(A/B/C)。论文进一步说明,如果将电路进行一定方式的改造,使用同样的理论,可以降低证明元素为2个,但是,电路的大小会变的很大。

总结:Groth16算法是Jens Groth在2016年发表的算法。该算法的优点是提供的证明元素个数少(只需要3个),验证等式简单,保证完整性和多项式计算能力下的可靠性。Groth16算法论文同时指出,zk-SNARK算法需要的最少的证明元素为2个。目前Groth16算法已经被ZCash,Filecoin等项目使用。

题外:

最近好多朋友表示对零知识证明的基础知识感兴趣,但是,zk-SNARK相关的技术涉及到比较多的数学公式的推导,比较难理解。我打算有空录个QSP/QAP/Groth16的介绍视频,方便工程开发人员快速的入门和理解。觉得有需要的小伙伴,请留言。

零知识证明 - Groth16算法介绍相关推荐

  1. 零知识证明学习资源汇总

    本文将继续会持续进行更新,更新后的版本将在 Github 和知乎上发布,欢迎关注. Github 地址:https://github.com/sec-bit/learning-zkp/blob/mas ...

  2. 《零知识证明 – zkSNARK 入门》— PPIO Code Talks 第二期

    PPIO Code Talks 致力于打造一个以上海为中心,辐射全球的高质量区块链学习,分享,交友平台. 7月27日,PPIO 举办了第二期 Code Talks 闭门技术交流分享会.在上一期的活动中 ...

  3. 比较零知识证明算法zkSNARK,zkSTARKs,zkBoo,Sonic,BulletProofs

    本文分为两部分,第一部分说明零知识能干什么,为什么它这么强大,在区块链中这么火:第二部分比较零知识证明的算法zkSNARK, zkSTARKs, zkBoo, Sonic和BulletProofs的特 ...

  4. Step1. 理解零知识证明算法之Zk-stark

    Concept:zk-stark vs zk-snark 谈到ZKP算法,大伙可能听过一些,比如zk-snark,zk-stark, bulletproof, aztec, plonk等等.今天,咱就 ...

  5. 零知识证明 - bellman源码分析

    bellman是Zcash团队用Rust语言开发的一个zk-SNARK软件库,实现了Groth16算法. 项目地址:https://github.com/zcash/librustzcash/tree ...

  6. PrivacyIN Week2 | 张宇鹏博导开讲经典零知识证明协议设计原理

    前言 隐私研究院[PrivacyIN]第一期ZK训练营课程精讲内容上线,本期课堂邀请到美国德州农工大学(Texas A&M University)计算机科学与工程学院的助理教授张宇鹏,主要介绍 ...

  7. 零知识证明经典文献大汇总(可收藏)

    从去年的DAO经典到更早的NFT经典(以及在此之前是最初的加密经典). 本文, 为那些寻求理解.深入和构建零知识的人挑选了一组资源:强大的基础技术,这些基础技术掌握着区块链可扩展性的关键,代表着隐私应 ...

  8. 零知识证明的硬件加速

    作者 | paradigm首席技术官Georgios Konstantopoulos,google翻译 内容 介绍 为什么零知识证明很重要? 为什么 ZKP 很慢,我们如何让它们变快? 硬件很重要 ​ ...

  9. 零知识证明 Learn by Coding:libsnark 入门篇

    本文作者:p0n1@安比实验室 libsnark 是目前实现 zk-SNARKs 电路最重要的框架,在众多私密交易或隐私计算相关项目间广泛应用,其中最著名当然要数 Zcash.Zcash 在 Sapl ...

最新文章

  1. LSTM模型(基于Keras框架)预测特定城市或者区域的太阳光照量实战
  2. Spring @SessionAttributes @ModelAttribute
  3. 最小公倍数 最大公约数
  4. java8 lambda python_【学习笔记】java8 Lambda表达式语法及应用
  5. java 列表展开方式_android列表控件实现展开、收缩功能
  6. websocket server client 编写
  7. 【flink】Flink 1.12.2 源码浅析 : Task数据输入
  8. 问题:安卓手机插入OTG摄像头时,如何禁用摄像头自带的MIC?
  9. 计算机科学导论课后感,关于《计算机科学导论》课程教学的思考
  10. 哈理工OJ 1924 分数表达式(暴力枚举)
  11. matlab 摄动波浪理论,等于波浪论文,关于MATLAB在实验室波高采集中的应用相关参考文献资料-免费论文范文...
  12. ps一点等于多少厘米_ps1厘米等于多少像素
  13. [SugerTangYL] Verilog 语言入门(零基础视角)
  14. thrift夸语言编程,facebok
  15. 第八届蓝桥杯C/C++程序设计本科B组决赛 ——瓷砖样式(填空题)【DP?我的暴力排列搜索】...
  16. 数据库原理第六章课后题答案(第四版)
  17. 论文解读:Prefix-Tuning: Optimizing Continuous Prompts for Generation
  18. Cocos Creator AssetBundle 游戏分包方案评估
  19. 杨亦涛老师分享PHP简易用户登录系统
  20. I/O复用-select

热门文章

  1. 计算机财务管理是,计算机财务管理
  2. 微软Windows Phone卷土归来
  3. 成都榆熙:拼多多店铺装修的作用是什么?
  4. js通过两种方式进行对商品价格排序
  5. ebay 后台HTML有尺寸宽度要求吗,eBay后台基础设置(专题)
  6. 福建农商银行计算机类笔试题目,2014年福建农商银行考试计算机模拟题
  7. 整合资源对个人站长的重要性
  8. Android 4.03 编译系统------lunch
  9. tdd 私有方法_使用TDD方法构建自定义的Twig过滤器
  10. linux卸载命令pkg,[转]软件包管理的命令:pkginfo、pkgadd和pkgrm