zk-SNARK代表了简洁化的非交互式零知识证明,而zk-STARK代表了简洁化的全透明零知识证明。 Zk-SNARK已经在基于区块链的支付系统上如Zcash,JP Morgan Chase项目中使用,并作为一种客户端到服务器的安全验证方式。但是,虽然zk-SNARKs已经很成熟并被很广泛的使用,但zk-STARK现在也被吹捧为该协议的新版本和改进版本,旨在解决zk-SNARKs先前的许多缺点。
阿里巴巴的洞穴寓言
让我们想象有一个环形洞穴,它有一个入口和一个将两条路分开的魔法门。为了打开魔法门,人们需要低声说出正确的秘密。因此,考虑到Alice(黄色)想要向Bob(蓝色)证明她知道密码是什么,但同时也要对密码保密。为此,Bob同意在外面等待,同时Alice进入洞穴并从两条路径中选择一条走到尽头。在该案例中,她决定通过路径1。
过了一会儿,鲍勃走到入口处,喊出他希望爱丽丝从哪一边出现(在该案例中应该是路径2)。
如果Alice确实知道这个密码,她将可以正确地按照Bob所要求的路径中走出来。
这个过程可以重复多次,以确认Alice不是通过运气才选择正确的路径。
阿里巴巴的洞穴寓言说明了零知识证明的概念,它是zk-SNARK和zk-STARK协议的一部分。 零知识证明可用于证明拥有某些知识并且不会泄露任何有关它的信息。
zk-SNARKs
零知识证明允许一个人向另一个人证明其所陈述的是真实的,且不会泄露超出陈述有效性的任何信息。有关各方通常被称为证明者和验证者,他们所持有的秘密被称为证据。这些功能的主要目的是让双方之间尽可能少的进行数据交换。换句话说,人们可以使用零知识证明来证明他们是知晓某些知识但不会泄露有关知识本身的任何信息。
在SNARK首字母缩略词中,首字母“succinct”意味着这些该证明较简单,可以快速验证。 “非交互式”意味着证明者和验证者之间几乎没有交互。较早版本的零知识证明协议通常要求证明者和验证者进行通信,因此被认为是“交互式”零知识证明。但在“非交互式”结构中,证明者和验证者只需交换相关证明。
目前,zk-SNARK证明依赖于证明者和验证者之间的初始化可信设置,这意味着需要一组公共参数来构建零知识证明,从而构建私有交易。这些参数几乎就像游戏规则,它们通过编程写到协议中,并且是证明交易有效的必要因素之一。然而,这会产生潜在的集中化问题,因为参数通常由非常小的群体制定。
最后一个首字母是“Knowledge”,这意味着证明者无法在没有实际知识(或证人)支持其陈述的情况下构建证据。
zk-STARKs
zk-STARKs是作为zk-SNARK协议的替代版本而创建的,被认为是该技术的更快和更便捷的实现方式。但更重要的是,zk-STARK不需要进行初始化可信设置(因此,字母“T”代表了透明性)。
Zk-STARK能够提供更便捷和更快速实现的主要原因之一是因为证明者和验证者之间的通信量相对于计算的任何增量是保持不变的。相反,在zk-SNARK中,所需的计算越多,各方须来回发送消息的次数就越多。因此,zk-SNARK的整体数据量大小远大于zk-STARK证明中的数据量。