这篇文章主要讲解了“zk-SNARKs知识有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“zk-SNARKs知识有哪些”吧!
传统的zk-SNARK,例如Groth26有一个主要的缺点:依赖于一个公共的参考字符串,该字符串使用一次性可信设置创建。该设置创建一个供证明方和验证方同时使用的参考字符串。这里面有三个主要的问题:
可信设置生成的“有毒废料”,如果泄露的话,可以被用于生成无法 检测的伪造证明。多方计算通常会忽略这个问题,但是仪式的协调 异常复杂。
可信设置创建的参考字符串通常绑定到一个电路(基本上就是程序)。 不可能为任何计算创建一个单独的可信设置,这使得很多应用都不可行, 例如智能合约。
可信设置是一次性的,生成的参考字符串不可升级,这意味着如果 Zcash需要修复其zk-SNARK电路中的哪怕一个很小的bug,也需要一个 新的仪式来部署修复。
新的zk-SNARK构建解决了对可信设置的要求,这意味着像智能合约等任意代码可以作为zk-SNARK运行。目前有两个不同的方法:
透明设置
设置创建一个共用的参考字符串,公开并且不会创建有毒废料。这和zk-STARK的机制类似。Fractal、Halo和SuperSonic-CG使用的就是透明设置。这种方法的缺点在于证明数据量会很大。Fractal和zk-STARK证明能达到250KB,这对于区块链应用是不现实的。Fractal团队告诉我,他们正在解决证明数据量过大的问题。Halo和SuperSonic的证明要小一些, 不到10KB。
通用设置
这种设置创建一个结构化参考字符串,也会产生有毒废料,不过设置不再局限于单一电路,一个参考字符串可以用于无限的任意电路中。例如Marlin、SuperSonic-RSA和Plonk。这三种构建生成的参考字符串可以升级,以便提高安全性。如果当前的有毒废料泄露,那么只需要升级设置就可以再次保障系统的安全。
如何比较新出现的zk-SNARK?在证明人侧,为每种zk-SNARK构建生成一个证明需要O(n log n)时间。区别主要在于证明的数据量大小、验证时间以及参考字符串的大小。
所有这些zk-SNARKS使用的编译器可以分为三类:预处理、DARK和传统的SNARK(非通用):
作为参考,我将介绍三种已有的构建。Groth26是非通用的,它依赖于一次性不可升级的设置,Sonic是一个通用的zk-SNARK。
Groth26:Groth26是目前最快、数据量最小的zk-SNARK,被用于Zcash等。Groth26不是通用的,其设置需要绑定到一个特定的电路。由于其速度和证明的小数据量,因此常常被新的zk-SNARK拿来比较性能。
Sonic:Sonic是一个早期的通用zk-SNARK协议。论文发表于2019年1月。Sonic支持通用、可升级的参考字符串。Sonic的证明大小固定,但是验证成本高。理论上可以将多个证明分批验证以获得更好的性能。
Fractal:Fractal 是一种允许递归的zk-SNARK。通过对电路的预处理实现了透明设置。证明最大250KB,这笔其他构建生成的证明都要大的多。
Halo:Halo支持递归证据组织,无需可信设置。与其他新的zk-SNARK构建不同,Halo的验证时间是线性的。
SuperSonic:SuperSonic 是Sonic的改进版,是第一个在验证时间和证明数据量方面实用化的透明zk-SNARK。
Marlin:Marlin 是Sonic的改进版,证明时间缩短10倍,验证时间缩短4倍。
一个大问题是:如何比较这些不同zk-SNARK构建的性能?不幸的是,我不知道zk-SNARK有任何基准测试,不过即使有的话,也不是所有的新构建都有一个参考实现。因此下面表格中的数字请不要过于较真,它们是基于论文中的基准指标,或者基于发明者提供的估算。
通过查看证明的大小、证明运行时间、验证运行时间,有一些方面是值得注意的:
使用透明设置的构建通常由较大的证明数据量
Halo的验证时间不恒定,这和其他新的zk-SNARK构建不同
在证明数据量尺寸和运行速度方面,Groth26仍然是无敌的
感谢各位的阅读,以上就是“zk-SNARKs知识有哪些”的内容了,经过本文的学习后,相信大家对zk-SNARKs知识有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。