网络上讲解零知识证明的文章就不多,这些文章要不太浅显,要不太深入,很少有能给入门者整体框架上的认识。

比如,阿里巴巴零知识证明就是一个非常好的通俗理解零知识证明的例子:

阿里巴巴被强盗抓住,为了保命,他需要向强盗证明自己拥有打开石门的密码,同时又不能把密码告诉强盗。他想出一个解决办法,先让强盗离开自己一箭之地,距离足够远让强盗无法听到口令,足够近让阿里巴巴无法在强盗的弓箭下逃生。阿里巴巴就在这个距离下向强盗展示了石门的打开和关闭。

这个整个过程就是零知识证明,证明者能够在不向验证者提供任何有用信息(石门的口令)的情况下,使验证者相信某个论断(阿里巴巴知道打开石门的方法)是正确的。

技术人除了通俗的理解零知识证明外,还需要对零知识的理论和推导过程深入理解运用。以太坊的一篇blog,比较适合想深入理解零知识证明的小伙伴。

https://blog.ethereum.org/2016/12/05/zksnarks-in-a-nutshell/

这篇文章也是这篇blog的翻译和我自己的理解。通过这篇文章,能快速建立零知识证明的逻辑框架。虽然这篇文章有些推导公式,但是相对简单,小伙伴可以耐心阅读。

先给出零知识证明的逻辑框架:

0 - 零知识证明的基本概念

零知识证明,zkSNARKzero-knowledge Succint Non-interactive ARguments of Knowledge的简称:

  • Succinct:证明的数据量比较小
  • Non-interactive:没有或者只有很少交互。
  • ARguments:验证者只对计算能力有限的证明者有效。拥有足够计算能力的证明者可以伪造证明。这也叫“计算可靠性"(相对的还有”完美可靠性")。
  • of Knowledge:对于证明者来说在不知道证据(Witness,比如一个哈希函数的输入或者一个确定 Merkle-tree 节点的路径)的情况下,构造出一组参数和证明是不可能的。

零知识证明大体由四部分组成:

  • 多项式问题的转化 - 需要证明的问题转化为多项式问题 t(x)h(x) = w(x)v(x),证明者提交证明让验证者确认多项式成立。
  • 随机挑选验证 - 随机选择验证的数值s,验证t(s)h(s) = w(s)v(s)。相对于验证多项式相等t(x)h(x) = w(x)v(x),随机挑选验证,简单,验证数据少。随机挑选验证,安全性肯定不及多项式等式验证,但如果确实足够随机,安全性还是相当高的。
  • 同态隐藏 - 同态隐藏指的是函数的一种特性。输入的计算和输出的计算保持“同态”。以加法同态为例,满足如下的三个条件的函数E(x),称为加法同态:1. 给定 E(x),很难推导出x. 2. 不同的输入,对应不同输出 3. E(x+y) 可以由 E(x),E(y)计算出来。乘法同态类似。
  • 零知识 - 证明者和验证者之间除了“问题证明与否”知识外,不知道其他任何知识(不知道随机挑选值,不知道挑选值的多项式计算结果等等)。

在了解零知识的基础概念上,慢慢推导整个零知识证明过程,先从NP问题说起。

1- NP问题以及约化

解决一个问题需要花费时间。如果解决问题需要的时间与问题的规模之间是多项式关系,则可以称该问题具有多项式复杂度。一般问题可分成两类:P问题NP问题。P问题指的是在多项式时间内可解的问题。 NP问题(Non-Deterministic Polynomial Problem,非确定性多项式问题),指不能在多项式内可解,但是可以在多项式时间内验证的问题。

很显然,P问题也是NP问题,但是是否NP问题是P问题,NP=P?,目前为止还没有人能证明。一般认为,NP问题不等于P问题,也就是说,NP问题不存在多项式解法。

约化(Reduction),可以理解成问题的转化。对任意一个程序A的输入,都能按某种法则变换成程序B的输入,使两程序的输出相同,那么,可以说,问题A可约化为问题B。

NPC问题,是一个NP问题,并且,其他所有的NP问题都能归约到它。简单的说,NP问题之间可以相互归约,一个NP问题求解,其他NP问题一样能求解。

举例说明,NP问题以及NP问题的归约。

布尔公式满足性问题(SAT问题,boolean formula satisfiability) 就是一个NP问题。布尔公式定义如下:

  • 假设变量x1x_1x1​, x2x_2x2​, x3x_3x3​, … 是布尔公式

  • 假设f是布尔公式,¬f\lnot f¬f也是布尔公式(取反)

  • 假设f和g是布尔公式,f∧gf \land gf∧g和f∨gf \lor gf∨g也是布尔公式(与和或)

一个布尔公式可满足,指输入是0/1的情况下,存在输出为真。SAT问题指,找出所有可满足的布尔公式。SAT问题看上去,除了枚举一个个可能的布尔公式外,没有更好的办法,也就是多项式时间内不可解。如果知道一个可满足的布尔公式,验证非常方便(输入是0/1的情况下,看看输出是否为真)。SAT问题是NP问题。

再看看另外一个NP问题:PolyZero问题。PolyZero问题指某个多项式满足:多项式输入是0或1的情况下,多项式输出为0。

​ PolyZero(f):=1PolyZero(f) := 1PolyZero(f):=1

f满足输入是0/1的情况下,多项式输出为0。

一个布尔表达式f可以通过如下的归约函数r,转化为多项式:

  • r(xi):=(1−xi)r(x_i) := (1-x_i)r(xi​):=(1−xi​)
  • r(¬f):=(1−r(f))r(\lnot f) := (1-r(f))r(¬f):=(1−r(f))
  • r(f∧g):=(1−(1−r(f))(1−r(g)))r(f \land g) := (1- (1 - r(f))(1 - r(g)))r(f∧g):=(1−(1−r(f))(1−r(g)))
  • r(f∨g):=r(f)r(g)r(f \lor g) := r(f)r(g)r(f∨g):=r(f)r(g)

也就是说,一个SAT问题,通过归约函数r,可以归约为一个PolyZero问题:f是可满足的,当且仅当r(f)输出为0。

​ SAT(f)=PolyZero(r(f))SAT(f) = PolyZero(r(f))SAT(f)=PolyZero(r(f))

总结一下,NP问题是在多项式时间内无解,但是可以多项式时间验证的问题。NP问题可以相互归约。

2 - QSP问题

需要证明的问题,肯定是NP问题,如果是P问题,不存在问题解的”寻找“,也就不存在证明。简单的说,zkSNARK问题处理的都是NP问题。既然NP问题相互可以归约,首先需要确定一个NP问题,其他NP问题都可以归约到这个NP问题,再进行证明。也就是,证明了一个NP问题,就可以证明所有NP问题。

QSP问题是个NP问题,也特别适合zkSNARK。为啥特别适合,目前还不需要深究。有相关的论文论证:https://eprint.iacr.org/2012/215.pdf。

QSP问题是这样一个NP问题:给定一系列的多项式,以及给定一个目标多项式,找出多项式的组合能整除目标多项式。输入为nnn位的QSP问题定义如下:

  • 给定多个多项式:v0,...,vm,w0,...,wmv_0, ... , v_m, w_0, ... , w_mv0​,...,vm​,w0​,...,wm​
  • 目标多项式:ttt
  • 映射函数:f:{(i,j)∣1≤i≤n,j∈0,1}→{1,...m}f: \left\{(i, j) |1\leq i \leq n, j\in{0,1} \right\} \to \left\{1, ... m\right\}f:{(i,j)∣1≤i≤n,j∈0,1}→{1,...m}

给定一个证据(Witness)u,满足如下条件,即可验证u是QSP问题的解:

  • ak,bk=1如果k=f(i,u[i])a_k, b_k = 1\ \ 如果 k = f(i, u[i])ak​,bk​=1  如果k=f(i,u[i])

  • ak,bk=0如果k=f(i,1−u[i])a_k, b_k = 0\ \ 如果 k = f(i, 1- u[i])ak​,bk​=0  如果k=f(i,1−u[i])

  • vawb能整除t,其中va=v0+a1v1+...+amvm,wb=w0+b1w1+...+bmwmv_aw_b能整除\ t,其中v_a = v_0 + a_1v_1 + ... + a_mv_m, w_b = w_0 + b_1w_1+ ... + b_mw_mva​wb​能整除 t,其中va​=v0​+a1​v1​+...+am​vm​,wb​=w0​+b1​w1​+...+bm​wm​

对一个证据u,对每一位进行两次映射计算(u[i]u[i]u[i]以及1−u[i]1-u[i]1−u[i]),确定多项式之间的系数。因为针对证据u的每一位,计算两次,确定多项式之间的系数,如果2n<m2n < m2n<m,多项式的选择还是有很大的灵活性。

如果证明者知道QSP问题的解,需要提供证据(也就是u)。验证者在获知证据u的情况下,按照上述的规则恢复出多项式的系数,验证vavbv_av_bva​vb​是否能整除ttt:th=vawbth=v_aw_bth=va​wb​。为了方便验证者验证,证明者可以同时提供hhh。在多项式维度比较大的情况下,多项式的乘法还是比较复杂的。

有个简单的想法,与其验证者验证整个多项式是否相等,不如随机挑选数值进行验证。假设验证者随机挑选验证数值s,验证者只需要验证t(s)h(s)=va(s)wb(s)t(s)h(s)=v_a(s)w_b(s)t(s)h(s)=va​(s)wb​(s)。

以上是基础知识,下面开始介绍zkSNARK的证明过程。在继续深入一个QSP问题证明细节之前,先看看一个多项式问题的证明过程。

3 - 多项式问题的证明过程

假设一个多项式f(x)=a0+a1x+a2x2+...+ad−1xd−1+adxdf(x)=a_0+a_1x+a_2x^2+ ... + a_{d-1}x^{d-1}+a_dx^df(x)=a0​+a1​x+a2​x2+...+ad−1​xd−1+ad​xd。证明一个多项式,即给定一个输入xxx,提供f(x)f(x)f(x)的证明。

3.1 有线群论基础(椭圆曲线)

定一个有限群,生成元是ggg,阶为nnn,则该群包括如下的元素:g0,g1,g2,...,gn−1g^0,g^1,g^2, ... ,g^{n-1}g0,g1,g2,...,gn−1。通过有限群加密的方式很简单:E(x):=gxE(x) := g^xE(x):=gx。也就是说,得知gxg^xgx的情况下,不能反推出xxx。

3.2 选定随机数

验证者随机选择一个有限群中的元素,比如sss。提供如下的计算结果(sss的不同阶的加密结果):

E(s0),E(s1),...,E(sd)E(s^0), E(s^1), ... , E(s^d)E(s0),E(s1),...,E(sd)

在生成这些计算结果后,sss就不需要了,可以忘记。

3.3 E(f(s))E(f(s))E(f(s))计算

举个例子,f(x)=4+2x+4x2f(x) = 4 + 2x + 4x^2f(x)=4+2x+4x2,E(f(s))=E(s0)4E(s1)2E(s2)4E(f(s)) = E(s^0)^4E(s^1)^2E(s^2)^4E(f(s))=E(s0)4E(s1)2E(s2)4。显然,E(f(s))E(f(s))E(f(s)) 可以不知道sss 的情况下,通过验证者提供的数据计算出来。

3.4 α\alphaα对

注意的是,验证者是不知道待证明的多项式参数的,即使证明者提供了E(f(s))E(f(s))E(f(s)),验证者也无法验证。 α\alphaα对的方法可以让验证者确认证明者是通过多项式计算出结果。 在3.2的基础上,验证者还随机选择另外一个元素α\alphaα,并提供额外的计算结果:

E(αs0),E(αs1),...,E(αsd)E(\alpha s^0), E(\alpha s^1), ... , E(\alpha s^d)E(αs0),E(αs1),...,E(αsd)

证明者需要提供E(f(s))E(f(s))E(f(s))和E(αf(s))E(\alpha f(s))E(αf(s))。

E(f(s))=E(s0)4E(s1)2E(s2)4E(f(s)) = E(s^0)^4E(s^1)^2E(s^2)^4E(f(s))=E(s0)4E(s1)2E(s2)4

E(αf(s))=E(αs0)4E(αs1)2E(αs2)4E(\alpha f(s)) = E(\alpha s^0)^4E(\alpha s^1)^2E(\alpha s^2)^4E(αf(s))=E(αs0)4E(αs1)2E(αs2)4

3.5 配对函数

配对函数eee,满足如下定义:

e(gx,gy)=e(g,g)xye(g^x, g^y) = e(g, g)^{xy}e(gx,gy)=e(g,g)xy

验证者验证α\alphaα对的方式很简单,检验如下的等式是否成立:

e(E(f(s)),gα)=e(E(αf(s)),g)e(E(f(s)), g^\alpha) = e(E(\alpha f(s)), g) e(E(f(s)),gα)=e(E(αf(s)),g)

假设A=e(E(f(s)),B=E(αf(s))A= e(E(f(s)), B=E(\alpha f(s))A=e(E(f(s)),B=E(αf(s))推导过程如下:

e(A,gα)=e(E(f(s)),gα)=e(gf(s),gα)=e(g,g)αf(s)e(A, g^\alpha) = e(E(f(s)), g^\alpha) = e(g^{f(s)}, g^\alpha) = e(g, g)^{\alpha f(s)}e(A,gα)=e(E(f(s)),gα)=e(gf(s),gα)=e(g,g)αf(s)

e(B,g)=e(E(αf(s)),g)=e(gαf(s),g)=e(g,g)αf(s)e(B, g) = e(E(\alpha f(s)), g) = e(g^{\alpha f(s)}, g) = e(g, g)^{\alpha f(s)}e(B,g)=e(E(αf(s)),g)=e(gαf(s),g)=e(g,g)αf(s)

到此为止,验证者提供α\alphaα对的情况下,证明者可以证明通过某个多项式计算出某个结果,验证者不知道具体的多项式的参数。

3.6 δ\deltaδ 偏移

更进一步,证明者采用δ\deltaδ 偏移,甚至不想让验证者知道E(f(s))E(f(s))E(f(s))。采用δ\deltaδ 偏移,证明者不再提供AAA和BBB,而是随机一个δ\deltaδ参数,提供A′A'A′和B′B'B′。

A′=E(δ+f(s))=gδ+f(s)=gδgf(s)=E(δ)E(f(s))=E(δ)AA' = E(\delta + f(s)) = g^{\delta + f(s)} = g^\delta g^{f(s)} = E(\delta)E(f(s)) = E(\delta)AA′=E(δ+f(s))=gδ+f(s)=gδgf(s)=E(δ)E(f(s))=E(δ)A

B′=E(α(δ+f(s)))=E(αδ+αf(s))=gαδ+αf(s)=E(α)δE(αf(s))=E(α)δBB' = E(\alpha (\delta + f(s))) = E(\alpha\delta + \alpha f(s)) = g^{\alpha \delta + \alpha f(s)} = E(\alpha)^\delta E(\alpha f(s)) = E(\alpha)^\delta BB′=E(α(δ+f(s)))=E(αδ+αf(s))=gαδ+αf(s)=E(α)δE(αf(s))=E(α)δB

很显然,验证者从A′A'A′无法推导出E(f(s))E(f(s))E(f(s)),但验证者一样能验证α\alphaα对的配对函数是否成立:

e(A′,gα)=e(E(δ+f(s)),gα)=e(gδ+f(s),gα)=e(g,g)α(δ+f(s))e(A', g^\alpha) = e(E(\delta + f(s)), g^\alpha) = e(g^{\delta + f(s)}, g^\alpha) = e(g, g)^{\alpha (\delta + f(s))}e(A′,gα)=e(E(δ+f(s)),gα)=e(gδ+f(s),gα)=e(g,g)α(δ+f(s))

e(B,g)=e(E(α(δ+f(s)),g)=e(gα(δ+f(s)),g)=e(g,g)α(δ+f(s))e(B, g) = e(E(\alpha (\delta + f(s)), g) = e(g^{\alpha (\delta + f(s))}, g) = e(g, g)^{\alpha (\delta + f(s))}e(B,g)=e(E(α(δ+f(s)),g)=e(gα(δ+f(s)),g)=e(g,g)α(δ+f(s))

多项式的整个证明过程如下图所示:

4 - QSP问题的skSNARK证明

skSNARK证明过程分为两部分:a) setup阶段 b)证明阶段。QSP问题就是给定一系列的多项式v0,...,vm,w0,...,wmv_0, ..., v_m, w_0, ..., w_mv0​,...,vm​,w0​,...,wm​以及目标多项式ttt,证明存在一个证据uuu。这些多项式中的最高阶为ddd。

4.1 setup和CRS

CRS - Common Reference String,也就是预先setup的公开信息。在选定sss和α\alphaα的情况下,发布如下信息:

  • sss和α\alphaα的计算结果

    E(s0),E(s1),...,E(sd)E(s^0), E(s^1), ... , E(s^d)E(s0),E(s1),...,E(sd)

    E(αs0),E(αs1),...,E(αsd)E(\alpha s^0), E(\alpha s^1), ... , E(\alpha s^d)E(αs0),E(αs1),...,E(αsd)

  • 多项式的α\alphaα对的计算结果
    E(t(s)),E(αt(s))E(t(s)), E(\alpha t(s))E(t(s)),E(αt(s))

    E(v0(s)),...E(vm(s)),E(αv0(s)),...,E(αvm(s))E(v_0(s)), ... E(v_m(s)), E(\alpha v_0(s)), ..., E(\alpha v_m(s))E(v0​(s)),...E(vm​(s)),E(αv0​(s)),...,E(αvm​(s))

    E(w0(s)),...E(wm(s)),E(αw0(s)),...,E(αwm(s))E(w_0(s)), ... E(w_m(s)), E(\alpha w_0(s)), ..., E(\alpha w_m(s))E(w0​(s)),...E(wm​(s)),E(αw0​(s)),...,E(αwm​(s))

  • 多项式的βv,βw,γ\beta_v, \beta_w, \gammaβv​,βw​,γ 参数的计算结果

    E(γ),E(βvγ),E(βwγ)E(\gamma), E(\beta_v\gamma), E(\beta_w\gamma)E(γ),E(βv​γ),E(βw​γ)

    E(βvv1(s)),...,E(βvvm(s))E(\beta_vv_1(s)), ... , E(\beta_vv_m(s))E(βv​v1​(s)),...,E(βv​vm​(s))

    E(βww1(s)),...,E(βwwm(s))E(\beta_ww_1(s)), ... , E(\beta_ww_m(s))E(βw​w1​(s)),...,E(βw​wm​(s))

    E(βvt(s)),E(βwt(s))E(\beta_vt(s)), E(\beta_wt(s))E(βv​t(s)),E(βw​t(s))

4.2 证明者提供证据

在QSP的映射函数中,如果2n<m2n < m2n<m,1,...,m1, ..., m1,...,m中有些数字没有映射到。这些没有映射到的数字组成IfreeI_{free}Ifree​,并定义(kkk为未映射到的数字):

vfree(x)=∑kakvk(x)v_{free}(x) = \sum_k a_kv_k(x)vfree​(x)=k∑​ak​vk​(x)

证明者需提供的证据如下

  • Vfree:=E(vfree(s)),W:=E(w(s)),H:=E(h(s)),V_{free} := E(v_{free}(s)), \ W := E(w(s)), \ H := E(h(s)),Vfree​:=E(vfree​(s)), W:=E(w(s)), H:=E(h(s)),

  • Vfree′:=E(αvfree(s)),W′:=E(αw(s)),H′:=E(αh(s)),V_{free}' := E(\alpha v_{free}(s)), W' := E(\alpha w(s)), H' := E(\alpha h(s)), Vfree′​:=E(αvfree​(s)),W′:=E(αw(s)),H′:=E(αh(s)),

  • Y:=E(βvvfree(s)+βww(s))Y := E(\beta_vv_{free}(s) + \beta_ww(s))Y:=E(βv​vfree​(s)+βw​w(s))

Vfree/Vfree′,W/W′,H/H′V_{free}/V_{free}', W/W', H/H'Vfree​/Vfree′​,W/W′,H/H′是α\alphaα对,用以验证vfree,w,hv_{free},w,hvfree​,w,h是否是多项式形式。ttt是已知,公开的,毋需验证。YYY用来确保vfree(s)v_{free}(s)vfree​(s)和w(s)w(s)w(s)的计算采用一致的参数。

4.3 验证者验证

在QSP的映射函数中,如果2n<m2n < m2n<m,1,...,m1, ..., m1,...,m中所有映射到的数字作为组成系数组成的二项式定义为(和vfreev_{free}vfree​互补):

vin(x)=∑kakvk(x)v_{in}(x) = \sum_k a_kv_k(x)vin​(x)=k∑​ak​vk​(x)

验证者需要验证如下的等式是否成立:

  • e(Vfree′,g)=e(Vfree,gα),e(W′,E(1))=e(W,E(α)),e(H′,E(1))=e(H,E(α))e(V_{free}', g) = e(V_{free}, g^\alpha), e(W', E(1)) = e(W, E(\alpha)), e(H', E(1)) = e(H, E(\alpha))e(Vfree′​,g)=e(Vfree​,gα),e(W′,E(1))=e(W,E(α)),e(H′,E(1))=e(H,E(α))

  • e(E(γ),Y)=e(E(βvγ),Vfree)e(E(βwγ),W)e(E(\gamma), Y) = e(E(\beta_v\gamma), V_{free})e(E(\beta_w\gamma), W)e(E(γ),Y)=e(E(βv​γ),Vfree​)e(E(βw​γ),W)

  • e(E(v0(s))E(vin(s))Vfree,E(w0(s))W)=e(H,E(t(s)))e(E(v_0(s))E(v_{in}(s))V_{free}, E(w_0(s))W) = e(H, E(t(s)))e(E(v0​(s))E(vin​(s))Vfree​,E(w0​(s))W)=e(H,E(t(s)))

第一个(系列)等式验证Vfree/Vfree′,W/W′,H/H′V_{free}/V'_{free}, W/W', H/H'Vfree​/Vfree′​,W/W′,H/H′是否是α\alphaα对。

第二个等式验证VfreeV_{free}Vfree​和WWW的计算采用一致的参数。因为vfreev_{free}vfree​和w都是二项式,它们的和也同样是一个多项式,所以采用γ\gammaγ 参数进行确认。证明过程如下:

e(E(γ),Y)=e(E(γ),E(βvvfree(s)+βww(s)))=e(g,g)γ(βvvfree(s)+βww(s))e(E(\gamma), Y) = e(E(\gamma), E(\beta_vv_{free}(s) + \beta_ww(s))) = e(g, g)^{\gamma(\beta_vv_{free}(s) + \beta_ww(s))}e(E(γ),Y)=e(E(γ),E(βv​vfree​(s)+βw​w(s)))=e(g,g)γ(βv​vfree​(s)+βw​w(s))

e(E(βvγ),Vfree)e(E(βwγ),W)=e(E(βvγ),E(vfree(s)))e(E(βwγ),E(w(s)))=e(g,g)(βvγ)vfree(s)e(g,g)(βwγ)w(s)=e(g,g)γ(βvvfree(s)+βww(s))e(E(\beta_v\gamma), V_{free})e(E(\beta_w\gamma), W) = e(E(\beta_v\gamma), E(v_{free}(s)))e(E(\beta_w\gamma), E(w(s))) = e(g,g)^{(\beta_v\gamma)v_{free}(s)}e(g,g)^{(\beta_w\gamma)w(s)} = e(g, g)^{\gamma(\beta_vv_{free}(s) + \beta_ww(s))}e(E(βv​γ),Vfree​)e(E(βw​γ),W)=e(E(βv​γ),E(vfree​(s)))e(E(βw​γ),E(w(s)))=e(g,g)(βv​γ)vfree​(s)e(g,g)(βw​γ)w(s)=e(g,g)γ(βv​vfree​(s)+βw​w(s))

第三个等式验证v(s)w(s)=h(s)t(s)v(s)w(s) = h(s)t(s)v(s)w(s)=h(s)t(s),其中v0(s)+vin(s)+vfree(s)=v(s)v_0(s)+v_{in}(s)+v_{free}(s) = v(s)v0​(s)+vin​(s)+vfree​(s)=v(s)。

简单的说,逻辑是确认v,w,hv, w, hv,w,h是多项式,并且v,wv,wv,w采用同样的参数,满足v(s)w(s)=h(s)t(s)v(s)w(s) = h(s)t(s)v(s)w(s)=h(s)t(s)。

到目前为止,整个QSP的zkSNARK的证明过程逻辑已见雏形:

图2

4.4 δ\deltaδ 偏移

为了进一步“隐藏” VfreeV_{free}Vfree​和WWW,额外需要采用两个偏移: δfree和δw\delta_{free}和\delta_wδfree​和δw​。 vfree(s)/w(s)/h(s)v_{free}(s)/w(s)/h(s)vfree​(s)/w(s)/h(s)进行如下的变形,验证者用同样的逻辑验证。

vfree(s)→vfree(s)+δfreet(s)v_{free}(s) \rightarrow v_{free}(s) + \delta_{free}t(s)vfree​(s)→vfree​(s)+δfree​t(s)
 w(s)→w(s)+δwt(s)w(s) \rightarrow w(s) + \delta_wt(s)w(s)→w(s)+δw​t(s)
 h(s)→h(s)+δfree(w0(s)+w(s))+δw(v0(s)+vin(s)+vfree(s))+(δfreeδw)t(s)h(s) \rightarrow h(s)+\delta_{free}(w_0(s) + w(s)) + \delta_w(v_0(s) + v_{in}(s) + v_{free}(s)) + (\delta_{free}\delta_w)t(s)h(s)→h(s)+δfree​(w0​(s)+w(s))+δw​(v0​(s)+vin​(s)+vfree​(s))+(δfree​δw​)t(s)

至此,zkSNARK的推导逻辑就基本完整。使用zkSNARK证明,由如下的几步组成:

1/ 问题转化: 一个需要证明的NP问题转化为选定的NP问题(比如QSP问题)

2/ 设置参数(setup):设置参数的过程也是挑选随机数的过程,并提供CRS

3/ 证明者获取证据u,通过CRS计算证据(proof)

4/ 验证者验证证据以及响应的proof

总结:零知识证明由四部分组成:多项式问题的转化,随机挑选验证,同态隐藏以及零知识。需要零知识证明的问题先转化为特定的NP问题,挑选随机数,设置参数,公布CRS。证明者,在求得证据的情况下,通过CRS计算出证据。验证者再无需其他知识的情况下可以进行验证。

零知识证明 - zkSNARK入门相关推荐

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

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

  2. 笔记——零知识证明zkSNARK

    记录下学习零知识证明的相关资料以及协议构建过程 相关定义 Definition 1 (Quadratic Span Program) 若一个程序QQQ为QSP,则其在域FFF上存在两个集合V={vk( ...

  3. 零知识证明 - 从QSP到QAP

    前一段时间,介绍了零知识证明的入门知识,通过QSP问题证明来验证另外一个NP问题的解.最近在看QAP问题相关的文章和资料,这篇文章分享一下QAP问题的理解. 0 背景介绍 QSP/QAP问题的思想都是 ...

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

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

  5. 蚂蚁区块链第7课 零知识证明隐私保护原理和蚂蚁BAAS接口调用实现

    1,摘要 本文试图普及隐私保护和零知识证明的相关技术知识,尝试使用更简单的描述来理解复杂的数学算法和技术原理.同时,也提供了蚂蚁区块链已经实现的隐私保护的接口函数说明. 本文涉及的专业知识有零知识证明 ...

  6. 零知识证明系列之三——入门zkSNARK

    前文回顾 回顾一下一套完善的零知识证明体系需要以下的条件: (1)完备性(Completeness)如果证明方和验证方都是诚实的,并遵循证明过程的每一步,进行正确的计算,那么这个证明一定是成功的,验证 ...

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

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

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

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

  9. 零知识证明之zk-snark 应用案例(零知识证明实战渔业监控【zksnark】)

    文章目录 零知识证明实战渔业监控 1.需求分析 2.circom电路实现 3.circom电路编译 4.zksnark的可信设置 5.计算ziksarnk电路信号的见证(witness) 6. 创建z ...

最新文章

  1. Postgresql:删除及查询字段中包含单引号的数据
  2. word如何设置标题编号
  3. 安全设置Windows组策略 有效阻止黑客
  4. Xamarin Essentials教程数据处理传输数据
  5. html表单验证元素必填,AngularJS表单验证:向用户指示必填字段
  6. 第一百零二节,JavaScript函数
  7. 人工智能学习实战之路
  8. Elasticsearch(六) java代码操作Es进行高级查询match、match_all
  9. linux系统如何管理文件
  10. 中英文对照 —— 航空航天航海、交通运输工具
  11. XAMPP端口更改后 httpd-vhosts.conf 文件配置
  12. django下的考勤机管理系统定制实例
  13. java webservice原理_WebService的工作原理
  14. 性能测试---影响性能的因素
  15. 推荐 5 个精选公众号
  16. CAD2017打开图纸点字体替换时没有字体选择框的问题
  17. Android日常开发收集的Tips
  18. 年中总结 | 愿自己更好面对未来 2022/6
  19. spring cloud spring boot mybatis构建java版 分布式微服务 b2b2c o2o电子商务云商平台
  20. 大数据技术原理与应用—第1讲 大数据概述(林子雨老师)课后习题

热门文章

  1. r.js压缩angular项目,Angular+requirejs+rjs实现初始化http请求数的优化
  2. 装win10测试软件,这个系统比较高级:测试告诉你有必要重装一个Win10工作站版吗?...
  3. 在ktv唱歌要注意的技巧
  4. 从回收站删除的文件如何恢复?独门诀窍大放送
  5. 计算机毕业论文java毕业设计成品源码网站基于JavaWeb实现的停车场车位收费管理系统
  6. Ubuntu连上网络上不了网
  7. Python: PS 滤镜--高反差保留 (High pass)
  8. 计算机类-研究生复试面试题之一
  9. 数据结构之二叉搜索树删除节点分析
  10. 关于道德经的一些评论