零知识证明从0到1,ZK简介

这篇具有很好参考价值的文章主要介绍了零知识证明从0到1,ZK简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ZK简介

最初在1980年提出,由Shafi Goldwasser, Silvio Micali和Charles Rackoff。刚开始叫做交互式证明系统(Interactive proof system)。

Prover和Verifier之间交换信息,让Verifier相信某种statement是真的。

Completeness:诚实的Prover最后会让Verifier相信这个statement。

Soundness:只有statement是真的时候,才能让Verifier相信。

zero knowledge:Prover除了证明这个statement是真的之外,不暴露其他信息。

  • Completeness: If the Prover is honest, then she will eventually convince the Verifier.
  • Soundness: The Prover can only convince the Verifier if the statement is true.
  • Zero-knowledge(ness): The Verifier learns no information beyond the fact that the statement is true.

例子

  1. 服务器上面存储了密码的哈希值,用户相当于Prover,服务器是Verifier,用户传输哈希值来证明自己拥有对应的密码,但是服务器不知道哈希值的原像是什么。
  2. 三色图问题,可以Prover给图一个解,Verifier随机打开一条边,Prover再打乱这个解。多次交互。可以动手试试

承诺协议

在三色图问题里面,用灰色的点盖住了答案,所以Verifier无法看到答案,但Prover也不可以对答案进行更改了。

在实际中,这样的“灰点”是一个承诺协议:里面加密了一个信息,但同时绑定了这个信息。

承诺方案允许一方 "承诺 "一个给定的信息,同时对其进行保密,然后再 "打开 "所产生的承诺,以揭示里面的内容。承诺协议可以直接由加密的哈希函数构造。可以理解成一个信封✉,我将一个信息放进了信封里面,发送给别人,但之后我可以将信封撕掉,显示出里面的信息。在这个过程中其他人无法看到里面的信息,这是信息的保密性,同时我在证明过程中也无法对信封内的东西进行替换,这是绑定性。

如何证明零知识性质

最终我们得到的是以下定理。如果存在任何Verifier计算机程序,通过与一些Prover交互式地运行该协议,成功地提取某些信息,那么我们可以简单地在该程序上使用倒带技巧,重新提交一个随机的解决方案,一旦不能正确回答其挑战,就通过倒带执行来 "欺骗 "Verifier。与我们上面给出的逻辑相同:如果这样的Verifier在运行真实协议后成功地提取了信息,那么它应该能够从模拟的、基于倒带的协议中提取相同数量的信息。但是,由于没有信息进入模拟协议,所以没有信息可以提取。因此,验证人能够提取的信息必须总是零。

如果对于每一个可能的Verifier,你都能证明存在一种叫做 "Simulator "的算法,并证明这种算法对于verifier来说与现实统计上不可区分,那么一个协议就可以被证明为零知识。

从纯粹的机械角度来看,模拟器就像一种特殊的验证者。然而,与真正的验证者不同的是–它从一些特殊的知识开始,使它能够证明一个语句的真实性–模拟器根本没有得到任何特殊的知识。* 尽管如此,模拟器(或模拟器)必须能够 "欺骗 "每个验证者,使其相信该语句是真实的,同时产生一个在统计上与真正的验证者的输出相同(或不可区分)的记录。

如何证明任意的statement

Goldreich, Micali and Wigderson (GMW)协议允许我们证明一个图的三着色问题。首先三着色问题是一个NP完全问题。所以可以将任意的NP问题规约为三着色问题。

  1. 如果存在任何决策问题(即具有是/否答案的问题),其见证(解决方案)可以在多项式时间内得到验证,那么。
  2. 我们可以通过以下方式证明上述解决方案的存在:(1)将问题转化为图三色问题的实例,以及(2)运行GMW协议。

证明和证明某个知识

Statements about “facts”. For example, I might wish to prove that “a specific graph has a three coloring” or “some number N is in the set of composite numbers*“.* Each of these is a statement about some intrinsic property of the universe.

Statements about my personal knowledge. Alternatively, I might wish to prove that I know some piece information. Examples of this kind of statement include: “I know a three coloring for this graph”, or “I know the factorization of N”. These go beyond merely proving that a fact is true, and actually rely on what the Prover knows.

第一种和第二种是不一样的:第一种不需要特定的知识也能证明,比如需要证明一个数 n n n是合数,并不一定说要知道他的因子是什么;但是第二种证明需要特定的知识,比如 n n n的具体的因子有哪些,

由Schnorr身份认证协议来看看ZK的性质,以及如何转为非交互式证明

假设Alice公布了她的公钥 p k A = g a   m o d   p pk_A=g^a \bmod p pkA=gamodp,其中 a ∈ [ 1 , q ] a\in [1,q] a[1,q]是私钥, g g g q q q的生成元, p , q p,q p,q是两个素数。

如果Alice要向Bob证明她拥有这个公钥所对应的私钥。那他们运行如下的交互协议。
A l i c e B o b Pick random  k ∈ [ 1 , q ] →            h = g k ( m o d p )          Pick random  c ∈ [ 1 , q ] ←                        c                      →          s = a c + k ( m o d q )       Check  g s ≡ p k A c ⋅ h   m o d   p \begin{aligned} &\quad\quad\quad\bold{Alice} &&\quad\quad\quad\bold{Bob}\\ &\text{Pick random } k\in [1,q]&\xrightarrow{~~~~~~~~~~h=g^k \pmod p~~~~~~~~}&\quad \text{Pick random } c \in [1,q]\\ &&\xleftarrow{~~~~~~~~~~~~~~~~~~~~~~c~~~~~~~~~~~~~~~~~~~~}\\ &&\xrightarrow{~~~~~~~~s = ac+k \pmod q~~~~~}&\quad \text{Check }g^s \equiv pk_A^c \cdot h \bmod p \end{aligned} AlicePick random k[1,q]          h=gk(modp)                               c                             s=ac+k(modq)      BobPick random c[1,q]Check gspkAchmodp

completeness

If the Prover is honest, then she will eventually convince the Verifier.

首先,我们应该问自己,该协议是否完备。这通常是最容易验证的属性:如果Alice诚实地执行协议,Bob在协议结束时应该感到满意?在这种情况下,只要做一点替换,完整性就很容易看到。
g s ≡ p k A c ⋅ h   m o d   p g a c + k ≡ ( g a ) c ⋅ g k   m o d   p g a c + k ≡ g a c + k   m o d   p \begin{aligned} g^s &\equiv pk_A^c \cdot h &\bmod p\\ g^{ac+k}&\equiv (g^{a})^c \cdot g^k &\bmod p\\ g^{ac+k}&\equiv g^{ac+k} &\bmod p \end{aligned} gsgac+kgac+kpkAch(ga)cgkgac+kmodpmodpmodp

Soundness

The Prover can only convince the Verifier if the statement is true.

说到证明知识证明的合理性,我们有一个非常好的形式化方法。就像我们上面讨论的模拟器一样,我们需要证明一种特殊算法的存在。这种算法被称为知识提取器,它所做的正是它所声称的。知识提取器(Extractor)是一种特殊的验证器,它与Prover进行交互,如果Prover成功地完成了证明,提取器应该能够提取Prover的原始秘密。
A l i c e E x t r a c t o r Pick random  k ∈ [ 1 , q ] →             h = g k ( m o d p )           Pick random  c 1 ∈ [ 1 , q ] ←                         c 1                      →          s 1 = a c 1 + k ( m o d q )       Extractor rewinds Alice to Step 2 ←                         c 2                      →          s 2 = a c 2 + k ( m o d q )       \begin{aligned} &\quad\quad\quad\bold{Alice} &&\quad\quad\quad\bold{Extractor}\\ &\text{Pick random } k\in [1,q]&\xrightarrow{~~~~~~~~~~~h=g^k \pmod p~~~~~~~~~}&\quad \text{Pick random } c_1 \in [1,q]\\ &&\xleftarrow{~~~~~~~~~~~~~~~~~~~~~~~c_1~~~~~~~~~~~~~~~~~~~~}\\ &&\xrightarrow{~~~~~~~~s_1 = ac_1+k \pmod q~~~~~}\\ &&&\text{Extractor rewinds Alice to Step 2}\\ &&\xleftarrow{~~~~~~~~~~~~~~~~~~~~~~~c_2~~~~~~~~~~~~~~~~~~~~}\\ &&\xrightarrow{~~~~~~~~s_2 = ac_2+k \pmod q~~~~~} \end{aligned} AlicePick random k[1,q]           h=gk(modp)                                 c1                             s1=ac1+k(modq)                             c2                             s2=ac2+k(modq)      ExtractorPick random c1[1,q]Extractor rewinds Alice to Step 2
Extractor可以重置Prover的状态,就比如这里,让Prover给出了两个相同的k。

通过得到了 c 1 , c 2 , s 1 , s 2 c_1,c_2,s_1,s_2 c1,c2,s1,s2,Extractor可以用如下方式恢复Prover的原始秘密。
( s 1 − s 2 ) / ( c 1 − c 2 )   m o d   q = ( ( a c 1 + k ) − ( a c 2 + k ) ) / ( c 1 − c 2 )   m o d   q = a ( c 1 − c 2 ) / ( c 1 − c 2 )   m o d   q = a \begin{aligned} (s_1-s_2)/(c_1-c_2) \bmod q&\\ =((ac_1+k)-(ac_2+k))/(c_1-c_2) \bmod q&\\ =a(c_1-c_2)/(c_1-c_2) \bmod q&\\ =a& \end{aligned} (s1s2)/(c1c2)modq=((ac1+k)(ac2+k))/(c1c2)modq=a(c1c2)/(c1c2)modq=a

Zero-knowledgeness

The Verifier learns no information beyond the fact that the statement is true.

证明零知识性需要用到模拟器(SImulator),模拟器与Verifier交互,拥有rewind verifier的能力。标准的Schnorr协议是没有这种模拟器的。要证明零知识性,我们要基于一个假设,那就是Verifier是诚实的,也就是他的输入不会随着我们的输入而改变,也就是他会用随机发生器来生成 c c c,而不是更具我们发送的值来选。只要有这个假设,就可以构造一个Simulator。

Simulator做如下事情:

  1. 首先,输出随便 g k 1 g^{k_1} gk1作为第一个消息。然后得到Verifier发送的 c c c
  2. 重置Verifier的状态,选一个随机数 z ∈ [ 1 , q ] z\in[1,q] z[1,q]
  3. 计算 g k 2 = g z ∗ p k A − c g^{k_2}=g^{z} * pk_A^{-c} gk2=gzpkAc,并输出 g k 2 g^{k_2} gk2作为Prover的初始消息。
  4. 当Verifier输出 c c c作为挑战时,输出 z z z

总结来说,这里Simulator输出的 g k , c , z g^k,c,z gk,c,z与原始的Prover和Verifier交互是统计上不可区分的。Simulator在不知道 a a a的情况下,使得Verifier相信了他的证明,因此Verifier无法从这个证明中提取出 a a a的信息。

从交互式证明到非交互式

Fiat和Shamir在1980年发现,只要用一个有效的哈希函数,就可以把一个交互式的证明变为一个非交互式的。

特别地,非交互式证明看起来如下:

  1. Prover随机选取 g k   m o d   p g^k \bmod p gkmodp
  2. Prover计算一个挑战 c = H ( g k ∣ ∣ M ) c=H(g^k||M) c=H(gkM),其中 H ( ) H() H()是一个哈希函数, M M M是任意消息串。
  3. 计算 a c + k   m o d   q ac+k \bmod q ac+kmodq

这里一个有意思的点在于,如果 M M M是作为一个消息传入的,那么这个方案就可以作为一个Signature方案使用。

三种基础ZK:SNARKS,STARKs,Bulletproofs

零知识证明从0到1,ZK简介

零知识证明从0到1,ZK简介

三种协议的开销如上,

从技术上来说:SNARKs1和STARKs2都是对某种计算的证明, f ( x ) = y f(x)=y f(x)=y,不暴露 x x x的情况下证明 y y y是由 x x x计算出来的。而BulletProof是一种范围证明,用于证明某个数字在 [ 0 , 2 n ) [0,2^n) [0,2n)中。

在应用中来说:SNARKs是用在Zcash之中的技术,STARKs用在0x上。bulletproof用在门罗币当中,但不是用于保护隐私,门罗币中使用RingCT来保护隐私。

BulletProofs

BulletProofs的思想是一个数字可以表示成二进制形式,如果一个数字的二进制形式有 n n n位,那么就可以证明这个数字在 [ 0 , 2 n ) [0,2^n) [0,2n)中。

在实际使用过程中,令这个数字为 v v v,二进制表示为 a \mathbf{a} a,则 v = ⟨ a , 2 i ⟩ v = \langle \mathbf{a},2^i \rangle v=a,2i

要证明的是:

  1. a \mathbf{a} a的大小是正确的。
  2. 证明我们知道这个值,可以用pedersen承诺加Fiat-Shamir类似的技术来证明。

SNARKs

SNARKs1有非常多的变种(50+),SNARKs的基本思路是Computation → \to Arithmetic Circuit → \to R1CS3 → \to QAP4 → \to SNARKs

由一个算式,比如 x ∗ y + 4 = 10 x*y+4=10 xy+4=10,要不暴露 x , y x,y x,y的情况下证明这个算式是成立的。


先把他转换为算数电路:

零知识证明从0到1,ZK简介


再由算数电路变为R1CS:

R1CS3是一种描述电路的语言。具体来说,一条R1CS由四个向量组成,分别为三个描述向量 ( L , R , O ) \left(L,R,O\right) (L,R,O),以及一个解向量 v v v,要满足
⟨ L , v ⟩ ∗ ⟨ R , v ⟩ = ⟨ O , v ⟩ \langle L, v\rangle *\langle R, v\rangle=\langle O, v\rangle L,vR,v=O,v

首先这个算数电路中的Constraint有3个,分别是:

  1. output 1 = x ∗ y \text{output}_1=x*y output1=xy
  2. output 1 + 4 = 10 \text{output}_1+4=10 output1+4=10

将其转换为R1CS,则令 v = [ 1 , x , y , o u t p u t 1 ] v=[1,x,y,output_1] v=[1,x,y,output1],对于两个Constraint,分别取:

  1. L = [ 0 , 1 , 0 , 0 ] , R = [ 0 , 0 , 1 , 0 ] , O = [ 0 , 0 , 0 , 1 ] L=[0,1,0,0],R=[0,0,1,0],O=[0,0,0,1] L=[0,1,0,0],R=[0,0,1,0],O=[0,0,0,1]

⟨ L , v ⟩ = x , ⟨ R , v ⟩ = y , ⟨ O , v ⟩ = o u t p u t 1 \langle L, v\rangle=x,\langle R, v\rangle=y,\langle O, v\rangle=output_1 L,v=x,R,v=y,O,v=output1

⟨ L , v ⟩ ∗ ⟨ R , v ⟩ = ⟨ O , v ⟩ ⟺ x ∗ y = o u t p u t 1 \langle L, v\rangle *\langle R, v\rangle=\langle O, v\rangle \Longleftrightarrow x*y = output_1 L,vR,v=O,vxy=output1

  1. L = [ 4 , 0 , 0 , 1 ] , R = [ 1 , 0 , 0 , 0 ] , O = [ 10 , 0 , 0 , 0 ] L=[4,0,0,1],R=[1,0,0,0],O=[10,0,0,0] L=[4,0,0,1],R=[1,0,0,0],O=[10,0,0,0]

⟨ L , v ⟩ = o u t p u t 1 + 4 , ⟨ R , v ⟩ = 1 , ⟨ O , v ⟩ = 10 \langle L, v\rangle=output_1 +4,\langle R, v\rangle=1,\langle O, v\rangle=10 L,v=output1+4,R,v=1,O,v=10

⟨ L , v ⟩ ∗ ⟨ R , v ⟩ = ⟨ O , v ⟩ ⟺ ( o u t p u t 1 + 4 ) ∗ 1 = 10 \langle L, v\rangle *\langle R, v\rangle=\langle O, v\rangle \Longleftrightarrow (output_1+4) * 1 = 10 L,vR,v=O,v(output1+4)1=10


从算数电路得到QAP4:

QAP的构造方式如下,L,R,O都是长度为4的向量,我们构造3*4个多项式 L i ( X ) , R i ( X ) , O i ( X ) , i ∈ [ 1 , 4 ] L_i(X),R_i(X),O_i(X), i\in[1,4] Li(X),Ri(X),Oi(X),i[1,4]

L i ( X ) L_i(X) Li(X)举例,他代表着 L L L向量的第 i i i个元素,在不同的Constraint下的多项式,也就是说 L 1 ( 1 ) = 0 , L 1 ( 2 ) = 4 L_1(1)=0,L_1(2)=4 L1(1)=0,L1(2)=4,通过多项式插值可以得到 L 1 ( X ) = 4 X − 4 L_1(X)=4X-4 L1(X)=4X4

罗列一下所有 L i ( X ) L_i(X) Li(X)的可得:
C o n s t r a i n t   1 : L ( 1 ) = [ 0 , 1 , 0 , 0 ] C o n s t r a i n t   2 : L ( 2 ) = [ 4 , 0 , 0 , 1 ] L 1 ( 1 ) = 0 , L 1 ( 2 ) = 4 , L 1 ( X ) = 4 X − 4 L 2 ( 1 ) = 1 , L 2 ( 2 ) = 0 , L 2 ( X ) = − X + 2 L 3 ( 1 ) = 0 , L 3 ( 2 ) = 0 , L 3 ( X ) = 0 L 3 ( 1 ) = 0 , L 3 ( 2 ) = 1 , L 4 ( X ) = X − 1 Constraint~1:L^{(1)}=[0,1,0,0]\\ Constraint~2:L^{(2)}=[4,0,0,1]\\ \begin{aligned} L_1(1)&=0,&&L_1(2)=4,&&L_1(X)=4X-4\\ L_2(1)&=1,&&L_2(2)=0,&&L_2(X)=-X+2\\ L_3(1)&=0,&&L_3(2)=0,&&L_3(X)=0\\ L_3(1)&=0,&&L_3(2)=1,&&L_4(X)=X-1\\ \end{aligned} Constraint 1:L(1)=[0,1,0,0]Constraint 2:L(2)=[4,0,0,1]L1(1)L2(1)L3(1)L3(1)=0,=1,=0,=0,L1(2)=4,L2(2)=0,L3(2)=0,L3(2)=1,L1(X)=4X4L2(X)=X+2L3(X)=0L4(X)=X1
可以看出 L i ( n ) = L ( n ) [ i ] L_i(n)=L^{(n)}[i] Li(n)=L(n)[i]

L ( X ) → = ( L 1 ( X ) , L 2 ( X ) , L 3 ( X ) , L 4 ( X ) ) \overrightarrow{L(X)}=(L_1(X),L_2(X),L_3(X),L_4(X)) L(X) =(L1(X),L2(X),L3(X),L4(X))

R ( X ) → = ( R 1 ( X ) , R 2 ( X ) , R 3 ( X ) , R 4 ( X ) ) \overrightarrow{R(X)}=(R_1(X),R_2(X),R_3(X),R_4(X)) R(X) =(R1(X),R2(X),R3(X),R4(X))

O ( X ) → = ( O 1 ( X ) , O 2 ( X ) , O 3 ( X ) , O 4 ( X ) ) \overrightarrow{O(X)}=(O_1(X),O_2(X),O_3(X),O_4(X)) O(X) =(O1(X),O2(X),O3(X),O4(X))

很容易验证 L ( 1 ) → = L ( 1 ) , L ( 2 ) → = L ( 2 ) \overrightarrow{L(1)}=L^{(1)},\overrightarrow{L(2)}=L^{(2)} L(1) =L(1),L(2) =L(2)

L ( X ) = ⟨ L ( X ) → , v ⟩ L(X)=\langle \overrightarrow{L(X)},v \rangle L(X)=L(X) ,v

R ( X ) = ⟨ R ( X ) → , v ⟩ R(X)=\langle \overrightarrow{R(X)},v \rangle R(X)=R(X) ,v

O ( X ) = ⟨ O ( X ) → , v ⟩ O(X)=\langle \overrightarrow{O(X)},v \rangle O(X)=O(X) ,v

由此可以得到 L ( X ) ∗ R ( X ) − O ( X ) = 0   f o r   X ∈ { 1 , 2 } L(X)*R(X) - O(X)=0~for~X\in\{1,2\} L(X)R(X)O(X)=0 for X{1,2}

P ( X ) = L ( X ) ∗ R ( X ) − O ( X ) P(X)=L(X)*R(X)-O(X) P(X)=L(X)R(X)O(X),将 P ( X ) P(X) P(X)拆为两个因子多项式 P ( X ) = T ( X ) ∗ H ( X ) P(X)=T(X)*H(X) P(X)=T(X)H(X)

其中 T ( X ) T(X) T(X)公开。

这样的 T ( X ) T(X) T(X)其实很容易找,因为 X = 1 , X = 2 X=1,X=2 X=1,X=2 P ( X ) = 0 P(X)=0 P(X)=0的两个根,所以可以令 T ( X ) = ( X − 1 ) ( X − 2 ) T(X)=(X-1)(X-2) T(X)=(X1)(X2),用多项式的除法得到 H ( X ) H(X) H(X)即可。


现在要向外部证明的其实是:

P ( X ) = L ( X ) ∗ R ( X ) − O ( X ) = T ( X ) ∗ H ( X ) P(X)=L(X)*R(X)-O(X)=T(X)*H(X) P(X)=L(X)R(X)O(X)=T(X)H(X)这样一个式子在所有 X X X上成立。

但是公开的多项式只有 T ( X ) T(X) T(X),也就是说,如果取一个数 X = s X=s X=s,那么其他人最多能知道 T ( s ) T(s) T(s)的值。那如何在不暴露 L ( s ) , R ( s ) , O ( s ) , H ( s ) L(s),R(s),O(s),H(s) L(s),R(s),O(s),H(s)的情况下证明 L ( s ) ∗ R ( s ) − O ( s ) = T ( s ) ∗ H ( s ) L(s)*R(s)-O(s)=T(s)*H(s) L(s)R(s)O(s)=T(s)H(s)成了现在要考虑的问题。

那这里就用到了基于椭圆曲线的一种加密:

E ( s ) = s G E(s)=sG E(s)=sG,其中 G G G是椭圆曲线的一个生成元。

这样的加密如下性质:

  1. 单项性:给定 x x x,很容易计算 y = E ( x ) y=E(x) y=E(x),但给定 y y y,很难找到一个 x x x满足 y = E ( x ) y=E(x) y=E(x)
  2. 线性: E ( α x + β y ) = α E ( x ) + β E ( y ) E(\alpha x+\beta y)=\alpha E(x) + \beta E(y) E(αx+βy)=αE(x)+βE(y)
  3. 单射: x ≠ y ⟶ E ( x ) ≠ E ( y ) x\neq y \longrightarrow E(x) \neq E(y) x=yE(x)=E(y)

所以Prover可以直接计算出 P ( E ( s ) ) = E ( P ( s ) ) P(E(s))=E(P(s)) P(E(s))=E(P(s))的值。

SNARKs的协议如下:
1. Setup: 将 E ( s ) E(s) E(s)公开, T ( s ) T(s) T(s)公开, s s s本身丢弃
2. Prover自己有 L , R , O , H L,R,O,H L,R,O,H四个多项式
3. Prover发送 E ( L ( s ) ) , E ( R ( s ) ) , E ( O ( s ) ) , E ( H ( s ) ) E(L(s)),E(R(s)),E(O(s)),E(H(s)) E(L(s)),E(R(s)),E(O(s)),E(H(s))
4. 任何人都可以验证:
E ( L ( s ) ) ∗ E ( R ( s ) ) − E ( O ( s ) ) = E ( H ( s ) ) ∗ E ( T ( s ) ) E(L(s))*E(R(s)) - E(O(s)) = E(H(s)) * E(T(s)) E(L(s))E(R(s))E(O(s))=E(H(s))E(T(s))

小结:

这里省略了很多的细节,只讲了大概的框框,包括SNARKs是否满足ZK的三个性质是没证明的,所以看到这里应该还没被说服,为啥只要给出了这个证明就得相信这个计算是正确的?其实就是Completeness和Soundness没有证明嘛。
省略的细节包括椭圆曲线, s s s其实还要做盲化,要不然不是Zero-knowledge,以及一些配对相关的东西。

区块链扩容

区块链扩容包括了两层

  1. 对区块链本身进行扩容,让他能存更多的交易。这类扩容的例子有Ethereum,Eth2x,DFinity, Polkadot,Cosmos,用到的技术有Sharding, Pruning, State rent, WASM, PoS, Casper, Light clients, ZKPs.
  2. 在分布式应用中尽量少的依赖区块链。比如Dapps,代表性的有Plasma Cash, Ignis,Rollup。

ZKP如何做扩容?

ZKP是解决了这样一个问题: F ( X , Y ) = Z F(X,Y)=Z F(X,Y)=Z,其中 F F F是任意函数, X X X是公开的输入, Y Y Y是私有的输入, Z Z Z是公开的输出。

这里 Y Y Y除了可以当做一个隐私信息,还可以作为一个批量的信息源,比如 X X X Z Z Z都是几十byte,而 Y Y Y是几MB的消息。比如在区块链中, F F F可以是验证交易以及更新账本, X X X是先前值的Merkle root, Z Z Z是当前值的Merkle root, Y Y Y是一整个Merkle tree。

目前ZKP的技术可以一次操作处理500个交易。Prover的时间是25分钟,目标是降到10分钟(2019年的演讲)。


  1. Succinct Non-interactive ARguments of Knowledge ↩︎ ↩︎

  2. Succinct (Scalable) Transparent ARguments of Knowledge ↩︎

  3. Rank-1 Constraint Satisfaction ↩︎ ↩︎

  4. Quadratic arithmetic program ↩︎ ↩︎文章来源地址https://www.toymoban.com/news/detail-400484.html

到了这里,关于零知识证明从0到1,ZK简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 区块链|零知识证明

    零知识证明 就是指如何在不暴露关键信息的前提下,向别人证明你掌握的关键信息大概率是正确的。 分为 交互式 和 非交互式 两种。 交互式 :如通过证明方和验证方双方进行一系列问答来验证,缺点是双方可能提前串通好。 非交互式 :证明方和验证方双方不直接接触,但

    2024年02月03日
    浏览(45)
  • 零知识证明详解

    我们在提到区块链的隐私计算和数据加密交互时,总会提到零知识证明,那么,这个究竟是什么呢? 从“零知识”一词中,我们便可以看出,它对于信息的需求度是“零”,即证明方可以不用透露任何具体的信息便可以向验证方证明加密转态下的数据是真实可信的。 传统互

    2023年04月16日
    浏览(39)
  • 【 BlockChain 】零知识证明

    一、零知识证明起源 “零知识”的概念最早在80年代由麻省理工学院的研究人员 Shafi Goldwasser,Silvio Micali 和 Charles Rackoff 所提出。当时这些人正在研究与交互证明系统相关的问题——即一种理论系统,使得甲方(证明者)可以和乙方(验证者)交换信息,并借此说服乙方接受

    2024年02月02日
    浏览(54)
  • 零知识密钥声明证明

    nChain 白皮书 #0488 题为“零知识密钥声明证明”,介绍了一种零知识证明 (ZKP),可证明与给定公钥对应的私钥满足特定要求,同时保持私钥机密。我们已经实现了它,并将其应用于无需信任地购买比特币荣耀地址。它可以推广到广泛的应用程序,其中可以在相互不信任的各方

    2024年01月22日
    浏览(58)
  • 技术分析|零知识证明研究综述

    声明:本文仅分享个人见解,不构成投资建议。 本文转载自公众号【GenesiSee】,原文发布时间:2023年01月18日 原文链接:ZK|零知识证明研究综述 近10年来,区块链技术快速发展,隐私和扩容成为了区块链领域极其受关注的两个方向。零知识证明技术因其在区块链领域的隐私

    2024年02月06日
    浏览(47)
  • 不讨论颜色的前提下,如何证明自己不是色盲?神奇的零知识证明

    《阿里巴巴与四十大盗》中有这样一段小故事: 阿里巴巴会芝麻开门的咒语,强盗向他拷问打开山洞石门的咒语,他不想让人听到咒语,又要向强盗证明他知道这个咒语。 那应该怎么办呢? 便对强盗说:「你们离我一箭之地,用弓箭指着我,你们举起右手,我念咒语打开石

    2024年02月02日
    浏览(38)
  • 【非交互式零知识证明】(下)

    继续上一节的内容,我们首先再回顾一下经典交互式零知识证明。 交互式零知识证明的一般模型如下: (1)证明者和验证者共享一个公共输入,证明者可能拥有某个秘密输入; (2)如果验证者认可证明者的响应,则输出Accept,否则输出Reject。 经典交互式零知识证明除了应

    2024年02月04日
    浏览(47)
  • 零知识证明的最新发展和应用

    PrimiHub一款由密码学专家团队打造的开源隐私计算平台,专注于分享数据安全、密码学、联邦学习、同态加密等隐私计算领域的技术和内容。 当企业收集大量客户数据去审查、改进产品和服务以及将数据资产货币化时,他们容易受到网络攻击威胁,造成数据泄露。数据泄露的

    2024年02月03日
    浏览(43)
  • 零知识证明:应用和具体用例

    零知识证明(Zero-Knowledge Proofs,ZKPs)是应用密码学中令人兴奋的突破,将在各个行业中解锁新的用例,从 Web3 到供应链再到物联网。通过在不揭示信息的情况下验证其真实性,ZKPs 可以增强数字系统的隐私、安全性和效率。本文将探讨 ZKPs 的基础知识和正在出现的潜在用例。

    2024年02月07日
    浏览(39)
  • 零知识证明经典文献大汇总(可收藏)

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

    2024年02月06日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包