零知识证明丨zk-SNARK和zk-STARK的区别是什么?

 2023-09-30 20:50:08发布 2023-09-30 20:50:16更新

SNARK 和 STARK 是零知识证明技术,允许一方在不透露任何进一步信息的情况下向另一方证明陈述是真实的,二者在复杂程度、透明度、可扩展性有不同之处。

什么是零知识证明

零知识证明 (ZKP) 引起了广泛关注,因其在增强安全性、保护用户隐私和支持第 2 层网络扩展方面都有很大的潜力。

ZKP 使一方能够向另一方证明声明是真实的,而无需透露任何其他信息。ZKP 既有利于增加隐私——因为它们减少了各方之间共享的信息量——也有利于可扩展性,因为它只需要证明而非整个数据集被验证,这样验证速度会更快。

两个最受关注的零知识证明系统是 SNARK 和 STARK。

zk-SNARK:简洁+非交互性

Alessandro Chiesa 等人在 2012 年开发了 zk-SNARK 协议,这是一种简洁化、非交互式的零知识证明技术,全称是 Zero-Knowledge Succinct Non-interractive Argument of Knowledge(零知识简洁非交互式知识论证),可以拆解成三部分来理解:

  • zero-knowledge:零知识证明,在不暴露隐私情况下向对方证明一件事情,让数据“可用而不可知”。
  • succinct:简洁性,要证明的东西占用的空间很小,而且可以快速验证(几毫秒)。
  • non-interactive:非交互性,意味着证明者和验证者之间不需要有交集即可快速地得到验证结果。

zk-SNARK 的简洁性和非交互性,是相对于传统的零知识证明方案而言的。

简单来说,传统方案是交互式证明,即示证者(宣称某一命题为真)和验证者(确认该命题确实为真)之间反复确认,你可以理解为示证者不断向验证者询问「是或不是?」,然后验证者不断给出回答,直到最后碰出一个正确答案来,所以效率很低。

zk-SNARK 的解决方案则不需要双方反复确认「是或不是」,而是提前先搞一个「可信初始化」,从而生成公共参考字符串(CRS),然后所有的示证者都可以直接访问它。

打一个通俗的比方。交互式证明相当于老师要批改每一个考生的每一道考题,效率很低,但正确答案只掌握在老师这边,基本不存在有人偷答案的情况。

但 zk-SNARK 直接上传了正确答案,然后让考生自己对答案(把自己解的某道题发送给后台系统,就会直接得到正确与否的最终结果),非常高效,代价是答案有可能被泄露,虽然这个答案系统是经过加密的。

因此针对 zk-SNARK 容易被泄露的问题,有很多围绕着提高「答案系统」安全性的解决方案,不同采用 zk-SNARK 的项目方的方案各有不同。

如 zCloak 钱包是直接把算法以纯文本的形式发给用户,用户下载到本地去做计算(所以即使断网也依旧能完成工作)。

zk-STARK:概率证明+缓冲时间

zk-STARK 是成立于 2017 年 12 月的 StarkWare 团队开发的,它是针对 zk-SNARK 的替代解决方案。全称是 Zero-Knowledge Scalable Transparent Argument of Knowledge(零知识可扩展透明知识论证)。

zk-SNARK 是提前生成公共参考字符串,用非交互式证明的方式提高了证明效率,但也留下了隐患。zk-STARK 虽然是交互式证明,但它是一种巧妙的交互式证明,即通过哈希函数碰撞(一种概率证明的方式)来保证安全性,因此也实现了高效证明。

这个思路直接借鉴自 2015 年推出的交互式预言机证明(IOP)技术,简单来说是先把问题用密码学的方式打碎,然后验证者随机向示证者提出几个的问题,如果几轮下来,示证者都给出准确的回答,那么验证就通过了。

所以 zk-STARK 同样也只需要极少的计算资源就可以完成证明,但是它更安全,不存在答案泄露的风险。并且为了进一步确保安全性,还设置了争议时间延迟(DTD)来作为缓冲。

zk-SNARK和zk-STARK的区别

复杂程度

zk-SNARK 需要一个可信的设置,这意味着一组人必须共同生成一组秘密密钥。如果任何参与者被攻击,这个过程就会变得容易受到攻击。另一方面,zk-STARK 则不需要可信的设置,使其更安全和更抵抗攻击。

透明度

zk-SNARK 不透明,这意味着没有任何秘密钥的情况下,任何人都很难验证证明。 zk-STARK 则是透明的,这意味着任何人都可以在不需要任何秘密信息的情况下验证证明。

可扩展性

在可扩展性方面,zk-STARK 设计为比 zk-SNARK 更可扩展。这是因为 zk-STARK 基于一个更简单的数学框架,这使得它们可以更有效地在更大的规模上实现。

ZKP 中使用的数学框架是比较重要的一个方面,当比较 zk-SNARK 和 zk-STARK 时需要考虑到这点。

zk-SNARK 基于椭圆曲线加密,涉及复杂的数学方程式,很难解决。由 zk-SNARK 产生的证明是一个短的数据字符串,可以被任何有秘密钥访问权限的人验证。然而,生成证明的过程需要可信的设置,如果任何参与者被攻击,这个过程就会变得容易受到攻击。

另一方面,zk-STARK 则基于一种不同的数学框架称为多项式承诺方案。这个框架基于更简单的数学方程式,更容易解决。由 zk-STARK 产生的证明比 zk-SNARK 证明更大,但任何人都可以在不需要秘密钥的情况下验证。此外,zk-STARK 不需要可信的设置,使其更安全和更抵抗攻击。

zk-SNARK 和 zk-STARK 之间的数学框架差异也影响了它们的可扩展性。 zk-STARK 设计为比 zk-SNARK 更可扩展,因为它们的数学框架更简单,可以更有效地在更大的规模上实现。这对于区块链技术来说非常重要,因为可扩展性是许多用例的关键问题。

抗量子计算机攻击

zk-SNARK 未来会轻易被量子计算机暴力破解(通过分解计算从公钥中提取私钥)。当然,量子计算何时到来还是个问题。

zk-STARK 采用的是哈希函数碰撞的方法来证明,理论上量子计算机的暴力破解是无效的。

总之,zk-SNARK 和 zk-STARK 都是区块链技术中重要的工具。虽然 zk-SNARK 已经存在了很长时间并且被广泛使用,但 zk-STARK 提供了一种更安全、更透明和更具可扩展性的有前途的替代方案。

推荐阅读