Groth16论文的下载地址:https://eprint.iacr.org/2016/260.pdf。
Groth16算法的形式化表达由(Setup, Prove, Vfy, Sim)组成:
请注意,在Setup过程中,为关系R生成simulation的trapdoor。Prove和Vfy比较简单,就是生成和验证证明。Sim是只需要trapdoor和statement的情况下,能生成证明。
有关完美零知识(Perfect zero-knowledge)的定义:
通过Prove生成可认可的证明和通过Simulation生成可认可的证明概率一样。简单的说,通过Prove能生成的证明,通过Simulation也能生成同样的证明的话,就认为是具有完美零知识的属性。
当初看了这个表达后,问自己了几个问题:
1/ simulation trapdoor是什么东西?和trapdoor function有什么关系?
simulation trapdoor和trapdoor function没有什么关系。trapdoor function,区别于one-way function(比如hash函数),在提供trapdoor的情况下,能容易地进行反向推导。simulation trapdoor,你可以认为就是随机数,只是个trapdoor(可能学术界喜欢用这个字眼吧)。
2/ 为什么通过Simulation能生成同样的证明就能说明具有Perfect zero-knowledge?
通过Simulation,也就是通过trapdoor和statement,能生成同样的证明。特别注意,通过Simulation生成证明,并不需要witness的信息。也就是说,理论上,存在使用和“witness”完全无关的信息能生成同样的证明。从而证明了,证明本身没有透露任何和“witness”相关的信息。也就是,完美零知识。当然,trapdoor在现实应用中,必须在生成CRS后,“忘记”,因为拥有trapdoor,就拥有“伪造”证明的能力。如上的证明,证明了Groth16算法本身具有“完美零知识”的性质,和是否现实中”忘记“或者”不忘记“trapdoor没有关系。
具体trapdoor以及Simulation的计算过程如何呢?
在已知A,B的情况下,很容易从验证公式推导并计算出C。
最后,借用一个朋友的比方,如果把Simulation和Prove想象成两个平行的宇宙空间。在Simulation这个空间中,只需要知道trapdoor以及statement,就能生成和Prove空间中使用witness生成一样的证明。也就是说,证明和witness无关。
星想法
技术改变世界
长按二维码关注我