多项式知识的 zkSNARK
参考文献:
- Petkus M. Why and how zk-snark works: Definitive explanation[J]. arXiv preprint arXiv:1906.07221, 2019.
- 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.
- Reitwiessner C. zkSNARKs in a nutshell[J]. Ethereum blog, 2016, 6: 1-15.
- 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
描述
对于nnn个变元,定义项的总度数(total degree)为
deg(∏i=1nxisi)=∑i=1nsi\deg(\prod_{i=1}^n x_i^{s_i}) = \sum_{i=1}^n s_i deg(i=1∏nxisi)=i=1∑nsi
(有限 / 无限)域F\mathbb FF上的nnn元ddd次多项式,
P(x1,⋯,xn)∈F[x1,⋯,xn]P(x_1,\cdots,x_n) \in \mathbb F[x_1,\cdots,x_n] P(x1,⋯,xn)∈F[x1,⋯,xn]
令S⊆FS \subseteq \mathbb FS⊆F是有限子集,那么独立均匀地选取随机点(r1,⋯,rn)∈Sn(r_1,\cdots,r_n) \in S^n(r1,⋯,rn)∈Sn,有
Pr[P(r1,⋯,rn)=0]≤d∣S∣Pr[P(r_1,\cdots,r_n)=0] \le \dfrac{d}{|S|} Pr[P(r1,⋯,rn)=0]≤∣S∣d
等价地,令Z(f)Z(f)Z(f)是fff的零点集,那么有
∣Z(f)∩Sn∣≤d⋅∣S∣n−1|Z(f) \cap S^n| \le d \cdot |S|^{n-1} ∣Z(f)∩Sn∣≤d⋅∣S∣n−1
应用
我们可以高效地检查若干(大规模)多项式之间的等式关系。例如:
f(x)=g(x)h(x)⟺f(x)−g(x)h(x)=0f(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,hf,g,hf,g,h的度数最高为ddd,那么我们圈定一个范围SSS,满足d≪∣S∣d \ll |S|d≪∣S∣,那么我们随机选取r∈Sr \in Sr∈S,检查下述等式是否成立:
f(r)−g(r)h(r)=0f(r) - g(r)h(r) = 0 f(r)−g(r)h(r)=0
如果f(x)−g(x)h(x)=0f(x)-g(x)h(x) = 0f(x)−g(x)h(x)=0,那么对于任意的rrr,有
Pr[f(r)−g(r)h(r)=0]=1Pr[f(r) - g(r)h(r) = 0] =1 Pr[f(r)−g(r)h(r)=0]=1如果f(x)−g(x)h(x)≠0f(x)-g(x)h(x) \neq 0f(x)−g(x)h(x)=0,那么对于任意的rrr,上述检查通过的概率为
Pr[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]≤∣S∣d
无论每个多项式有多大,我们仅仅检查一个随机点上的等式即可!没必要计算多项式乘法,然后再检查每个系数是否相等。
多项式知识的证明
可以证明的多项式的性质有很多,我们关注对多项式因子的知识证明。确切地说:
- Prover(简记PPP)宣称自己拥有的多项式p(x)p(x)p(x),它有一个因子t(x)t(x)t(x)
- Verifier(简记VVV)要求 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 来设计简洁的证明:
- VVV随机采样rrr,发送rrr给PPP
- PPP计算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,hp,hp,h给VVV
- VVV本地计算t=t(r)t=t(r)t=t(r),验证p=t⋅hp=t \cdot hp=t⋅h
上述协议的问题:
- PPP如果持有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)≠0r(x)\neq 0r(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),VVV检查p=t⋅h’p=t \cdot h’p=t⋅h’成立
- PPP即使完全不知道p(x)p(x)p(x),它依然可以随机选取hhh,然后设置p=t⋅hp=t \cdot hp=t⋅h,但VVV完全无法发现PPP并没持有p(x)p(x)p(x)
- PPP知道了rrr,因此它可以任意构造多项式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),于是VVV获得了t(x)∣p′(x)t(x)|p'(x)t(x)∣p′(x)的证明,而不是t(x)∣p(x)t(x)|p(x)t(x)∣p(x)的证明
- PPP知道t(x)t(x)t(x)的次数,因此它可以找一个次数特别高的多项式p(x)p(x)p(x),使得它满足t(x)∣p(x)t(x) | p(x)t(x)∣p(x)
同态承诺
我们应当让PPP无法获得r,t(r)r,t(r)r,t(r),从而避免它伪造p(r)p(r)p(r)或者p(x)p(x)p(x),于是同态加密登场了。我们实际上不关心解密问题,因此我们只需要一个承诺算法。
选取合适的循环群(后续技术中要求它是存在双线性映射的椭圆曲线群),它的生成元为ggg,其上的 CDH 是困难的:
E(s)=gsE(s) = g^s E(s)=gs
明显有同态加法:
E(s1)⋅E(s2)=gs1+s2=E(s1+s2)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=gc⋅s=E(c⋅s)E(s)^c = g^{c \cdot s} = E(c \cdot s) E(s)c=gc⋅s=E(c⋅s)
它不支持同态乘法(太笨重,也没必要)。利用同态加法和标量乘法,我们完全可以对一个多项式ϕ(x)\phi(x)ϕ(x)做承诺:随机点s∈Fs \in \mathbb Fs∈F的函数值ϕ(s)\phi(s)ϕ(s)对应的单个群元素gϕ(s)g^{\phi(s)}gϕ(s)(Kate Commitment)
协议修改为:
VVV随机采样sss,发送承诺
E(s0),E(s1),⋯,E(sd)E(s^0),E(s^1),\cdots,E(s^d) E(s0),E(s1),⋯,E(sd)PPP拥有
p(x)=∑i=0dpixip(x) = \sum_{i=0}^d p_i x^i p(x)=i=0∑dpixi然后计算
E(p(s))=∏i=0d(gsi)pi=∏i=0dE(si)pi=gpE(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=0∏d(gsi)pi=i=0∏dE(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)),然后发送gp,ghg^p,g^hgp,gh给VVV
VVV本地计算t=t(s)t=t(s)t=t(s),然后验证gp=(gh)tg^p = (g^h)^tgp=(gh)t
上述协议的问题:
- PPP完全可以使用任意策略,来计算两个任意的值zp,zhz_p,z_hzp,zh,只要满足zp=zht(s)z_p = z_h^{t(s)}zp=zht(s):先计算出E(t(s))=gt(s)E(t(s)) = g^{t(s)}E(t(s))=gt(s),然后随机选取rrr,设置zh=grz_h=g^rzh=gr,zp=(gt(s))rz_p = (g^{t(s)})^rzp=(gt(s))r
限制多项式
我们应当限制PPP正确地使用这些承诺E(si)E(s^i)E(si)的幂次,来计算p(s)p(s)p(s)的承诺。这里,我们让VVV对承诺E(s)E(s)E(s)做随机偏移E(s)αE(s)^\alphaE(s)α,要求PPP返回的一对值a,a′a,a'a,a′满足限制aα=a′a^\alpha=a'aα=a′
那么由于 CDH 限制了PPP不知道α\alphaα,于是它只能选取某个整数ccc,并计算
a=(E(s))c,a′=(E(s)α)ca=(E(s))^c,a'=(E(s)^\alpha)^c a=(E(s))c,a′=(E(s)α)c
这是除了穷举外,唯一的使得aα=a′a^\alpha=a'aα=a′的计算方法。VVV虽然不知道ccc的值(也不应知道),但它可以确定aaa确实是E(s)E(s)E(s)的某个幂次。
协议修改为:
VVV随机采样s,αs,\alphas,α,发送承诺
E(s0),E(s1),⋯,E(sd)E(s^0),E(s^1),\cdots,E(s^d) E(s0),E(s1),⋯,E(sd)以及偏移的承诺
E(s0)α,E(s1)α,⋯,E(sd)αE(s^0)^\alpha,E(s^1)^\alpha,\cdots,E(s^d)^\alpha E(s0)α,E(s1)α,⋯,E(sd)αPPP拥有
p(x)=∑i=0dpixip(x) = \sum_{i=0}^d p_i x^i p(x)=i=0∑dpixi然后计算
E(p(s))=∏i=0d(gsi)pi=∏i=0dE(si)pi=gpE(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=0∏d(gsi)pi=i=0∏dE(si)pi=gp以及对应的偏移
E(p(s))α=(∏i=0d(gsi)pi)α=∏i=0d(E(si)α)pi=gα⋅p=gp′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=0∏d(gsi)pi)α=i=0∏d(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)),然后发送gp,gp’,ghg^p,g^{p’},g^hgp,gp’,gh给VVV
VVV本地计算t=t(s)t=t(s)t=t(s),先检查约束(gp)α=gp′(g^p)^\alpha=g^{p'}(gp)α=gp′,然后再验证gp=(gh)tg^p = (g^h)^tgp=(gh)t
上述协议的问题:
- 理论上h(x)h(x)h(x)的系数hih_ihi的范围是整个域F\mathbb FF,但是实际工程里的系数是有限的取值,因此VVV完全可以根据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)也一样。
添加零知识
由于VVV只能根据PPP发送的承诺值gp,gp′,gh,gh′g^p,g^{p'},g^h,g^{h'}gp,gp′,gh,gh′,来确定p(x)p(x)p(x)的信息。因此,我们让PPP也对这些承诺值做随机偏移δ\deltaδ
协议修改为:
VVV随机采样s,αs,\alphas,α,发送承诺
E(s0),E(s1),⋯,E(sd)E(s^0),E(s^1),\cdots,E(s^d) E(s0),E(s1),⋯,E(sd)以及偏移的承诺
E(s0)α,E(s1)α,⋯,E(sd)αE(s^0)^\alpha,E(s^1)^\alpha,\cdots,E(s^d)^\alpha E(s0)α,E(s1)α,⋯,E(sd)αPPP拥有
p(x)=∑i=0dpixip(x) = \sum_{i=0}^d p_i x^i p(x)=i=0∑dpixi然后计算
E(p(s))=∏i=0d(gsi)pi=∏i=0dE(si)pi=gpE(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=0∏d(gsi)pi=i=0∏dE(si)pi=gp以及对应的偏移
E(p(s))α=(∏i=0d(gsi)pi)α=∏i=0d(E(si)α)pi=gα⋅p=gp′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=0∏d(gsi)pi)α=i=0∏d(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δ,计算并发送
(gp)δ,(gp’)δ,(gh)δ(g^p)^\delta,(g^{p’})^\delta,(g^h)^\delta (gp)δ,(gp’)δ,(gh)δVVV本地计算t=t(s)t=t(s)t=t(s),先检查约束((gp)δ)α=(gp′)δ((g^p)^\delta)^\alpha=(g^{p'})^\delta((gp)δ)α=(gp′)δ,然后再验证
(gp)δ=E(δ⋅p(s))=((gh)δ)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))
上述协议的问题:
- 由于上述协议是PPP,VVV交互式进行的,因此第三者V′V'V′总是可以质疑上述 proof 的正确性。
实现非交互性
观察协议,发现只要让 step 1 的随机点和随机偏移s,αs,\alphas,α成为证明系统的 secret parameters 即可。这个秘密参数应当满足以下性质: to be reusable, public, trustworthy and infeasible to abuse。它叫做 common reference string(CRS),就是天上掉馅饼 !!!∑(゚Д゚ノ)ノ
我们让可信方生成s,αs,\alphas,α,然后计算E(t(s)),{E(si),E(si)α}i=1dE(t(s)),\{E(s^i),E(s^i)^\alpha\}_{i=1}^dE(t(s)),{E(si),E(si)α}i=1d,公开后立刻销毁s,αs,\alphas,α,防止PPP伪造信息。任意的人都可以作为P,VP,VP,V在任意的一次证明中使用它,且他们都不知道s,αs,\alphas,α的值。
由于VVV不知道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,GG,\textbf{G}G,G,令g,gg,\textbf{g}g,g是它们各自的生成元,存在双线性映射e:G×G→Ge:G \times G \to \textbf{G}e:G×G→G,使得e(g,g)=ge(g,g)=\textbf{g}e(g,g)=g,满足
e(ga,gb)=g(gab,g)=e(g,gab)=e(g,g)ab=gabe(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(ga,gb)⋅e(gc,gd)=gab+cde(g^a,g^b) \cdot e(g^c,g^d) = \textbf{g}^{ab+cd} e(ga,gb)⋅e(gc,gd)=gab+cd
协议修改为:
Setup:可信方随机采样s,αs,\alphas,α,计算承诺
E(s0),E(s1),⋯,E(sd)E(s^0),E(s^1),\cdots,E(s^d) E(s0),E(s1),⋯,E(sd)以及偏移的承诺
E(s0)α,E(s1)α,⋯,E(sd)αE(s^0)^\alpha,E(s^1)^\alpha,\cdots,E(s^d)^\alpha E(s0)α,E(s1)α,⋯,E(sd)α设置 Proving key(公开的):
(gα,{gsi}i=1d,{gαsi}i=1d)\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α,gt(s))\left( g^\alpha,\, g^{t(s)} \right) (gα,gt(s))上述两者就构成了 CRS
Proving:PPP拥有
p(x)=∑i=0dpixip(x) = \sum_{i=0}^d p_i x^i p(x)=i=0∑dpixi然后计算
E(p(s))=∏i=0d(gsi)pi=∏i=0dE(si)pi=gpE(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=0∏d(gsi)pi=i=0∏dE(si)pi=gp以及对应的偏移
E(p(s))α=(∏i=0d(gsi)pi)α=∏i=0d(E(si)α)pi=gα⋅p=gp′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=0∏d(gsi)pi)α=i=0∏d(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δ,计算并发送
π={(gp)δ,(gp’)δ,(gh)δ}\pi = \{(g^p)^\delta,(g^{p’})^\delta,(g^h)^\delta\} π={(gp)δ,(gp’)δ,(gh)δ}Verification:利用双线性对(计算乘法),VVV先检查约束,
e((gp)δ,gα)=e((gp′)δ,g)e((g^p)^\delta,g^\alpha) = e((g^{p'})^\delta,g) e((gp)δ,gα)=e((gp′)δ,g)
然后再验证因子
e((gp)δ,g)=e((gh)δ,gt(s))e((g^p)^\delta,g) = e((g^h)^\delta,g^{t(s)}) e((gp)δ,g)=e((gh)δ,gt(s))
注意,应当让G≠GG \neq \textbf{G}G=G,使得e(⋅,⋅)e(\cdot,\cdot)e(⋅,⋅)类似一个Hash函数。如果G=GG = \textbf{G}G=G,那么恶意的PPP可以设置gp′=e(gp,gα)g^{p'}=e(g^p,g^\alpha)gp′=e(gp,gα),于是也可以通过检查
e(e(gp,gα),g)=e(gp,gα)e(e(g^p,g^\alpha),g) = e(g^p,g^\alpha) e(e(gp,gα),g)=e(gp,gα)
上述协议的问题:
- s,αs,\alphas,α是由一个可信方选取的,计算了承诺后立即销毁它们。这在现实中不切实际:没有人会相信其他人确实销毁了s,αs,\alphas,α,持有它们的PPP拥有伪造 proof 的能力。
CRS
为了避免诚实方的问题,我们生成 composite CRS。假设存在nnn个参与者{Pj}j=1n\{P_j\}_{j=1}^n{Pj}j=1n,我们选取P1P_1P1作为链表开头:
P1P_1P1随机选取s1,α1s_1,\alpha_1s1,α1,公布它的 CRS
(gA1,{gS1i}i,{gAS1i}i):=(gα1,{gs1i}i,{gα1s1i}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)PjP_jPj接收到Pj−1P_{j-1}Pj−1的 CRS 后,随机选取sj,αjs_j,\alpha_jsj,αj,利用加法同态,计算新的 CRS
(gAj,{gSji}i,{gAjSji}i):=(gAj−1⋅αj,{gSj−1i⋅sji}i,{gAj−1Sj−1i⋅αjsji}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):=(gAj−1⋅αj,{gSj−1i⋅sji}i,{gAj−1Sj−1i⋅αjsji}i)最后,PnP_nPn发布最终的 CRS
(gAn,{gSni}i,{gAnSni}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]个参与者对不同的幂次iii使用不同的sss,从而破坏 CRS 令它不可用,我们需要做一致性检查(consistency check):
以i=1i=1i=1的承诺E(S1)E(S^1)E(S1)为标准值(canonical value),依次检查其他的i=2,⋯,di = 2,\cdots,di=2,⋯,d的幂次的承诺,
e(E(Si),g)=e(gS,gSi−1)=e(E(S1),gSi−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,gSi−1)=e(E(S1),gSi−1)然后,还要检查每个i=1,2,⋯,di=1,2,\cdots,di=1,2,⋯,d的偏移的承诺,
e(E(ASi),g)=e(gSi,gA)=e(E(Ai),gA)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≥2j \ge 2j≥2个参与者不使用前j−1j-1j−1个人的 CRS,从而移除它们的随机性,我们还需要验证它们确实是在(gAj−1,{gSj−1i}i,{gAj−1Sj−1i}i)\left( g^{A_{j-1}}, \{g^{S_{j-1}^i}\}_i, \{g^{A_{j-1}S_{j-1}^i}\}_i \right)(gAj−1,{gSj−1i}i,{gAj−1Sj−1i}i)的基础上计算了幂次,利用双线性对判断密文下乘积是否相等,
要求j≥2j \ge 2j≥2的参与者都公布额外的关于sj,αjs_j,\alpha_jsj,αj的承诺
(gαj,{gsji}i,{gαjsji}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)每个参与者都可以检查
e(E(Aji),g)=e(E(Aj−1i),gαj)e(E(A_{j}^i),g) = e(E(A_{j-1}^i),g^{\alpha_j}) e(E(Aji),g)=e(E(Aj−1i),gαj)e(E(Sji),g)=e(E(Sj−1i),gsji)e(E(S_{j}^i),g) = e(E(S_{j-1}^i),g^{s_j^i}) e(E(Sji),g)=e(E(Sj−1i),gsji)
e(E(AjSji),g)=e(E(Aj−1Sj−1i),gαjsji)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(Aj−1Sj−1i),gαjsji)
总结
在 CRS model 下,我们实现了对于多项式知识 t(x)∣p(x)t(x) | p(x)t(x)∣p(x) 的非交互简洁零知识证明,Prover 只需发送一个消息
π={(gp)δ,(gp’)δ,(gh)δ}\pi = \{(g^p)^\delta,(g^{p’})^\delta,(g^h)^\delta\} π={(gp)δ,(gp’)δ,(gh)δ}
给 Verifier 验证。这个 proof 仅仅包含333个承诺,无论p(x),t(x)p(x),t(x)p(x),t(x)的规模有多大。
多项式知识的 zkSNARK相关推荐
- 通用 zkSNARK
文章目录 算术电路的约束 单个乘法操作 多个乘法操作 其他操作 Constant Coefficients Addition for Free Addition Subtraction and Div ...
- 笔记——零知识证明zkSNARK
记录下学习零知识证明的相关资料以及协议构建过程 相关定义 Definition 1 (Quadratic Span Program) 若一个程序QQQ为QSP,则其在域FFF上存在两个集合V={vk( ...
- 零知识 QAP 问题的转化
简介:本文是 Vitalik 写于 2016 年 12 月,用于介绍零知识证明的数学实现方式的论文.文章思路清晰,通俗易懂,也因此,该文成为区块链行业技术人员学习这方面知识的首选文章之一. 术语介绍 ...
- 零知识证明学习(三)—— 非交互式零知识证明(zkSNARKs)
非交互式零知识证明 本节主要介绍一种新的零知识证明-zkSNARKzkSNARKzkSNARK,zkSNARK:zero−knowledgeSuccinctNon−InteractiveArgumen ...
- 【知识总结】多项式全家桶(一)(NTT、加减乘除和求逆)
我这种数学一窍不通的菜鸡终于开始学多项式全家桶了-- 必须要会的前置技能:FFT(不会?戳我:[知识总结]快速傅里叶变换(FFT)) 以下无特殊说明的情况下,多项式的长度指多项式最高次项的次数加\(1 ...
- 【知识总结】多项式全家桶(三)(任意模数NTT)
经过两个月的咕咕,"多项式全家桶" 系列终于迎来了第三期--(雾) 上一篇:[知识总结]多项式全家桶(二)(ln和exp) 先膜拜(伏地膜)大恐龙的博客:任意模数 NTT (在页面 ...
- 任意模数ntt_【知识总结】多项式全家桶(三)(任意模数NTT)
经过两个月的咕咕,"多项式全家桶" 系列终于迎来了第三期--(雾) 先膜拜(伏地膜)大恐龙的博客:任意模数 NTT (在页面右侧面板 "您想嘴谁" 中选择 &q ...
- zk-snark的算法详解
前言 了解零知识证明的读者,可能都拜读过V神的文章,整个系列由浅入深,很有条理,相对其他文章更容易理解一下.其实V神讲解的算法是PGHR13算法的整体步骤,此算法也被应用于知名项目Zcash中,现在, ...
- 零知识证明系列之三——入门zkSNARK
前文回顾 回顾一下一套完善的零知识证明体系需要以下的条件: (1)完备性(Completeness)如果证明方和验证方都是诚实的,并遵循证明过程的每一步,进行正确的计算,那么这个证明一定是成功的,验证 ...
最新文章
- Android基础教程之五大布局对象------FrameLayout,LinearLayout,AbsoluteLayout,RelativeLayout,TableLayout...
- Oracle常用监控SQL
- Crystal 语法概述[转]
- 常用的、现成的!正则表达式及基础知识
- JS判断页面是否出现滚动条
- python与html关系,python - jinja2模板、框架和html是什么关系?
- linux 系统对信号的处理,Linux下的信号处理函数总结
- win32 api 显示一张位图的简单代码,释疑用的。
- 5. Keras - CNN应用于手写数字识别
- 发现《后端架构师技术图谱》
- cocostudio html5,Cocostudio的简单使用:
- php源码查后门,某一次排查源码后门的过程
- 导出mysql某个表数据_mysql数据库导出指定表数据的方法
- ubuntu upgrade problem
- php中关于qq第三方登录
- Java学习笔记:SQL数据排序
- 移动硬盘突然在电脑上无法显示
- 蒲公英 · JELLY技术周刊 Vol.29: 前端智能化在阿里的那些事
- Adobe Photoshop CC 2019 for Mac(版本介绍)
- 数字经济商学院开班仪式成功举行 创新社《筱静观察》倾情支持