零知识证明 - Groth16算法介绍
看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)的定义:
(σ,τ)←Setup(R)(\sigma, \tau) \gets Setup(R)(σ,τ)←Setup(R) :设置过程,生成σ∈Fm\sigma \in F^mσ∈Fm, τ∈Fn\tau \in F^nτ∈Fn。
π←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π=Πσ。
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=0maiui(X)⋅∑i=0maivi(X)=∑i=0maiwi(X)+h(X)t(X)
t(X)t(X)t(X)的阶为n。
设置过程:随机选取α,β,γ,δ,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)
证明过程:随机选择两个参数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=0maiui(x)+rδ
B=β+∑i=0maivi(x)+sδB = \beta + \sum_{i=0}^{m} a_i v_i(x) + s\deltaB=β+∑i=0maivi(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=ℓ+1mai(βui(x)+αvi(x)+wi(x))+h(x)t(x)+As+rB−rsδ
验证过程:
验证过程,计算如下的等式是否成立:
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=0maiui(x)+rδ)⋅(β+∑i=0maivi(x)+sδ)
=α⋅β+α⋅∑i=0maivi(x)+αsδ= \alpha \cdot \beta + \alpha \cdot \sum_{i=0}^{m} a_i v_i(x) + \alpha s \delta=α⋅β+α⋅∑i=0maivi(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=0maiui(x)+∑i=0maiui(x)⋅∑i=0maivi(x)+sδ⋅∑i=0maiui(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=0maivi(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=ℓ+1mai(β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=0maiui(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=0maivi(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=ℓ+1mai(β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=ℓ+1mAiδβ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=ℓ+1mBiδβ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=ℓ+1mCiδβ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=ℓ+1mAiδβ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=ℓ+1mBiδβ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=ℓ+1mAi(βui(x)+αvi(x)+wi(x))+Ah(x)t(x))(∑i=ℓ+1mBi(β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=ℓ+1mAi(β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=ℓ+1mBi(β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=ℓ+1mBi(β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=ℓ+1mCiδβ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=ℓ+1mCiα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=ℓ+1mCiβ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=0maiui(x)
B(x)=∑i=0maivi(x)B(x) = \sum_{i=0}^m a_i v_i(x)B(x)=∑i=0maivi(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=0maiui(x)⋅∑i=0maivi(x)=∑i=0maiwi(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=0maiui(X)⋅∑i=0maivi(X)=∑i=0maiwi(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表示。
设置过程:随机选取α,β,γ,δ,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)
证明过程:随机选择两个参数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=0maiui(x)+rδ
B=β+∑i=0maivi(x)+sδB = \beta + \sum_{i=0}^{m} a_i v_i(x) + s\deltaB=β+∑i=0maivi(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=ℓ+1mai(βui(x)+αvi(x)+wi(x))+h(x)t(x)+As+rB−rsδ
验证过程:验证如下的等式是否成立。
[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算法介绍相关推荐
- 零知识证明学习资源汇总
本文将继续会持续进行更新,更新后的版本将在 Github 和知乎上发布,欢迎关注. Github 地址:https://github.com/sec-bit/learning-zkp/blob/mas ...
- 《零知识证明 – zkSNARK 入门》— PPIO Code Talks 第二期
PPIO Code Talks 致力于打造一个以上海为中心,辐射全球的高质量区块链学习,分享,交友平台. 7月27日,PPIO 举办了第二期 Code Talks 闭门技术交流分享会.在上一期的活动中 ...
- 比较零知识证明算法zkSNARK,zkSTARKs,zkBoo,Sonic,BulletProofs
本文分为两部分,第一部分说明零知识能干什么,为什么它这么强大,在区块链中这么火:第二部分比较零知识证明的算法zkSNARK, zkSTARKs, zkBoo, Sonic和BulletProofs的特 ...
- Step1. 理解零知识证明算法之Zk-stark
Concept:zk-stark vs zk-snark 谈到ZKP算法,大伙可能听过一些,比如zk-snark,zk-stark, bulletproof, aztec, plonk等等.今天,咱就 ...
- 零知识证明 - bellman源码分析
bellman是Zcash团队用Rust语言开发的一个zk-SNARK软件库,实现了Groth16算法. 项目地址:https://github.com/zcash/librustzcash/tree ...
- PrivacyIN Week2 | 张宇鹏博导开讲经典零知识证明协议设计原理
前言 隐私研究院[PrivacyIN]第一期ZK训练营课程精讲内容上线,本期课堂邀请到美国德州农工大学(Texas A&M University)计算机科学与工程学院的助理教授张宇鹏,主要介绍 ...
- 零知识证明经典文献大汇总(可收藏)
从去年的DAO经典到更早的NFT经典(以及在此之前是最初的加密经典). 本文, 为那些寻求理解.深入和构建零知识的人挑选了一组资源:强大的基础技术,这些基础技术掌握着区块链可扩展性的关键,代表着隐私应 ...
- 零知识证明的硬件加速
作者 | paradigm首席技术官Georgios Konstantopoulos,google翻译 内容 介绍 为什么零知识证明很重要? 为什么 ZKP 很慢,我们如何让它们变快? 硬件很重要 ...
- 零知识证明 Learn by Coding:libsnark 入门篇
本文作者:p0n1@安比实验室 libsnark 是目前实现 zk-SNARKs 电路最重要的框架,在众多私密交易或隐私计算相关项目间广泛应用,其中最著名当然要数 Zcash.Zcash 在 Sapl ...
最新文章
- 【Linux】一步一步学Linux——Unix发展史(02)
- struts 2 时间控件
- 象棋 计算机配置,象棋名手要什么配置的电脑运行最佳,用来弈天砍分
- java文件转base64
- 新势力盯上了“新能源车险”
- RANSAC算法(原理及代码实现+迭代次数参数自适应)
- 服务器网卡信息BIOS中设置,bios设置如何关闭网卡
- 圆形谷仓Circular Barn_Silver---(DP优化 / )队列 + 贪心(复杂度O(2n))---DD(XYX)​​​​​​​的博客
- 使用Hutool生成多个excel文件合并成zip压缩包下载
- 木子-后端-随机验证码的各种实现方法
- 视频聊天能正常工作吗?
- python 白噪声检验-时间序列 平稳性检验 白噪声 峰度 偏度
- MySQL数据库增删改查常用语句详解
- 2019年5G创新深度研究报告
- 服务器默认管理口登录信息(默认IP、用户名、密码)大全
- IE 下JS上传文件时出现“拒绝访问”的解决方案
- 老虎证券开放api期货合约建立
- docker部署excalidraw画图工具
- 华为安全认证722复习知识点(自用)
- pandas DataFrame 缺失值处理(数据预处理)