零知识证明(八)——zk-SNARK基本构造(续)

444 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第21天,点击查看活动详情

有帮助的话请点个赞吧~

接着昨天写完基本构造的最后一步。

基本构造

经过前面的步骤构建出了一个可证明算术电路C,那基于这个电路就可以开始搭建一个zk-SNARK系统了~

zk-SNARK

  • 构成(核心算法)
    • Setup(C)(Sp,Sv)Setup(C)\rightarrow(S_p,S_v)
      • 由一个可信第三方基于电路C分别生成两组的参数,其中SpS_p发给证明者P用于生成证明,SvS_v发给验证者V用于验证。
      • 这些参数会与一个些随机值有关,这些随机值中包含挑战,非交互式也就是基于此实现的(原本由V生成的随机挑战交给可信第三方)。
      • 具体的参数内容将在后面将原理之类内容的章节详细叙述,是一堆形如gbalabalag^{balabala}的数值。
    • Prove(Sp,r,u)πProve(S_p,r,u)\rightarrow\pi
      • P基于参数生成一个证明其拥有私密内容rr的证明π\pi,将其发送给V。
      • 这个证明内容中其实不仅包含对知识的证明,还有P正确使用了参数与电路等内容的证明.
    • Verify(Sv,x,π)PASS?Verify(S_v,x,\pi)\rightarrow PASS?
      • V基于参数计算一系列结果,验证P是否真的拥有私密内容rr
      • 验证的内容也包括很多,要每一步计算都正确才算通过验证,也就是说P严格履行了协议的每一步且拥有私密知识rr
  • 总结就是:P通过π\pi向V证明ta拥有一个私密内容rr,使得C(r,u)=0C(r,u)=0成立。

至此介绍完了zk-SNARK的基本结构内容。

算法概览

从论文里截了一张图,大概概括一下协议内容: image.png 可以看到其实基本构成就是上面的三个步骤,然后可以看到生成了超级多的参数用来辅助验证。但其实只是看着复杂,实际生成的证明π\pi的空间复杂度其实只有O(logC)O(\log C)。验证可以看到要验证三个部分,首先是知识(私密内容)的拥有,后面两个用来验证P有诚实地使用各项参数并遵守协议规定,看似复杂,但实际验证复杂度只有O(x+logC)O(|x|+\log |C|)

后面先介绍私密交易的例子,和ZCash中的应用的例子,然后开始数学基础知识和各种证明。

参考

[1] 浅谈零知识证明之二:简短无交互证明(SNARK)_安比实验室SECBIT的博客-CSDN博客
[2] Anon. n.d. ‘Succinct Non-Interactive Zero Knowledge for a von Neumann Architecture | USENIX’. Retrieved 28 April 2022 (www.usenix.org/conference/…).

【四月更文挑战艰难完成第三关,赶紧写论文了】


欢迎指正与讨论!