SNARKs 对比 STARKS 对比 Recursive SNARKs
作者 Alchemy
零知识证明是一种机制,允许一方向另一方证明自己掌握某项信息,而无需透露该信息本身。零知识证明也被称为有效性证明,最初用于在注重隐私的区块链中隐藏交易细节。
但零知识证明还有另一个重要用例:扩展通用区块链。借助有效性证明,区块链节点可以在不存储细节或重新执行计算的情况下验证交易。这缩短了确认时间,提升了网络吞吐量。
由于其在可扩展性方面的优势,零知识证明已成为区块链扩容项目的核心基础设施,尤其是零知识 Rollups。本指南将介绍区块链中使用的零知识证明的主要分类:ZK-SNARK、ZK-STARK 和递归 ZK-SNARK。
什么是 ZK-SNARK?
ZK-SNARK 是一种用于生成零知识证明的协议,用于在不暴露底层数据的情况下验证信息的真实性。该缩写代表 Zero-Knowledge Succinct Non-Interactive Argument of Knowledge(零知识简洁非交互式知识论证)。
ZK-SNARK 协议涉及两方:证明者(Alice)和验证者(Bob)。证明者(Alice)是提出主张的一方,验证者(Bob)则负责验证该主张。
主张中引用的信息称为见证(witness)或_秘密_。证明者(Alice)使用 ZK-SNARK 机制生成证明,向验证者(Bob)展示该主张为真……而无需透露所引用的信息。
一个涉及 ZK-SNARK 的假设示例是验证用户身份。个人可以证明一个陈述("我是美国公民"),而无需透露个人信息(例如护照或社会安全号码)。
ZK-SNARK 之所以得名,是因为它们具备以下特性:
1. 零知识(Zero-knowledge):这意味着验证者除了知道陈述的真伪之外,不知道任何其他信息。
2. 简洁(Succinct):证明足够小,验证者可以在短时间内完成验证。
3. 非交互式(Non-interactive):SNARK 之所以是非交互式的,是因为证明者和验证者除了最初提交的证明之外,无需交换其他信息。早期的零知识证明系统需要证明者和验证者交换多条消息才能验证陈述。
4. 论证(Argument):SNARK 是一种"计算可靠"的陈述,满足严格的要求,因此难以作弊(即生成虚假证明)。
5. 知识(Knowledge):基于 SNARK 的证明无法在不掌握底层信息或_见证_的情况下生成。

区块链中的 ZK-SNARK
分布式计算系统,例如公链,需要解决所谓的"计算完整性问题"。计算完整性(CI)指的是特定计算所得输出的正确性。
在公链中,计算完整性指的是网络上执行的交易的正确性。大多数区块链通过让其他计算机(节点)重新执行每笔交易来实现这一点。
然而,这种方法存在问题。强制每个节点重放每笔交易会拖慢网络速度,限制可扩展性。节点还必须存储交易数据(否则无法重放计算),这会导致区块链体积呈指数级增长。
但如果节点可以在不重放计算的情况下检查计算的有效性呢?这将提高网络吞吐量,并消除节点存储过多交易数据的需求。
ZK-SNARK 应运而生。
使用 ZK-SNARK 生成的有效性证明可以在不透露输入的情况下证明交易的有效性。这就是为什么 Zcash 和 Monero 等注重隐私的加密货币使用 SNARK 来混淆交易信息。
SNARK 还可以证明链下执行的计算的正确性,而无需节点重放计算的每一步。这正是 ZK-SNARK 在区块链扩容方面发挥作用的地方。
使用 SNARK 验证链下计算是一个复杂的过程,首先要将计算编码为数学表达式。这个数学陈述构成了有效性证明的基础。
然后,验证者对证明执行一次运算以检查其正确性。如果证明通过所有检查,则认为底层计算有效。这就是为什么 SNARK 被称为_简洁的_——有效性证明的大小比它所验证的计算小得多。

ZK-SNARK 与 ZK Rollups
Rollup 是一种用于 Ethereum 的 Layer 2 扩容方案,通过链下执行来提升 Layer 1(L1)区块链的吞吐量。Rollups 在 L2 链上处理交易,将多笔链下交易聚合成区块,再提交到 L1 链。
通过将计算从基础层移出,Rollups 减少了网络拥堵,并实现了交易的扩容。
然而,L1 链需要知道链下执行的交易是否有效(即计算完整性问题)。否则,恶意行为者可能劫持该 Rollup,并向主链提交错误的交易。
一种类型的 Rollup(零知识 Rollup)使用 ZK-SNARK 向 L1 链证明链下交易的真实性。SNARK 证明可以由任何人验证,这为 L1 链提供了交易有效性的保证。
大多数使用 ZK-SNARK 的 ZK rollups 遵循相同的结构:
-
L2 链上的用户签署交易并将其提交给验证者。
-
验证者将交易压缩成一个区块,并生成相应的有效性证明(SNARK)。这提供了密码学上的保证,证明新状态是由添加有效交易而产生的。
-
L1 链上的智能合约对有效性证明执行一次运算。该运算的结果决定了批量交易是否得到验证并提交到主链。

ZK-SNARK 有哪些优势?
使用 ZK-SNARK 有三大主要优势:高吞吐量、较小的有效性证明尺寸,以及安全性。
1. 高吞吐量
ZK-SNARK 通过缩减 Ethereum 基础层上的计算量来扩展吞吐量。借助 ZK-SNARK,Rollups 可以将 TPS 提升至数千级别。
一个 ZK-SNARK 通常比它所验证的交易数据小很多倍。这减少了基础区块链上的拥堵,实现了更低的 Gas 费用和更快的交易速度。
2. 较小的证明尺寸
SNARK 证明的小尺寸使其易于在主链上验证。在 Ethereum 上,这意味着验证链下交易所需的 Gas 费更低,从而降低了终端用户使用 Rollup 的成本。
3. 安全性
ZK rollups 之所以被认为比其他扩容方案更安全,主要是因为 ZK-SNARK 采用了前沿的密码学安全机制。
ZK-SNARK 证明具有计算可靠性,难以欺骗验证者进行恶意行为。ZK-SNARK 的非交互性也意味着任何人都可以以无需信任的方式验证证明。
ZK-SNARK 有哪些缺点?
使用 ZK-SNARK 有三大主要缺点:需要可信设置、容易受到量子计算攻击,以及依赖特殊硬件。
1. 可信设置
搭建 ZK-SNARK 协议需要创建一个通用公共参考串(Universal Common Reference String,CRS)。CRS 也被称为_公共参数_,它使证明者和验证者之间能够进行安全通信。
如果恶意行为者获知了这些公共参数,就可以生成虚假的有效性证明。一些项目试图通过使用多方计算(MPC)来解决这一问题,即由多个不同的个人来生成公共参数。
不过,这种方法仍然要求用户信任参与者的诚信。这存在相当大的问题,因为区块链的目的正是要减少对权威机构的信任需求。
2. 易受量子计算攻击
ZK-SNARK 使用椭圆曲线密码学(Elliptic Curve Cryptography,ECC)来加密用于生成有效性证明的信息。目前 ECC 相对安全,但量子计算的进步可能会破坏其安全模型。
3. 依赖特殊硬件
使用 ZK-SNARK 生成有效性证明是一个计算密集型过程,这意味着证明者必须投资专用硬件。由于能够购买这些设备的人非常少,许多人认为 ZK-SNARK 的证明生成过程高度中心化。
哪些项目使用了 ZK-SNARK?
使用 ZK-SNARK 的五个知名项目是 ZKSync、Loopring、Aztec、Polygon Hermez 和 ZKSpace。
zkSync
由 Matter Labs 创建的、运行在 Ethereum 主网上的 EVM 兼容 ZK rollup。ZKSync支持智能合约、代币兑换、支付和 NFT 铸造。
Loopring
由基于 SNARK 的 ZK rollup 技术驱动的 Ethereum Layer 2(L2)项目。Loopring 还充当去中心化交易所,用于交易 ETH 和其他 ERC-20 代币,费用仅为 Ethereum 主网上 DEX 收费的一小部分。
Aztec
构建在 Ethereum 网络上的开源 L2 网络。Aztec 利用 ZK-SNARK 来扩展交易并提升用户的财务隐私。
Polygon hermez
运行在 Ethereum 区块链之上的 ZK rollup。Polygon Hermez 使用 ZK-SNARK 支持安全、低成本的代币转账和支付。
Zkspace
基于 ZK-SNARK 的 ZK rollup 项目。ZKSpace 为 Ethereum 用户提供更低的 Gas 费和更快的交易速度,包含一个 AMM 式 DEX(ZKSwap v3)、支付网络(ZKSquare)和NFT 交易市场(ZKSea)。
什么是 ZK-STARK?
ZK-STARK 是 Zero-Knowledge Scalable Transparent Argument of Knowledge(零知识可扩展透明知识论证)的缩写。和 ZK-SNARK 一样,ZK-STARK 可以在不透露陈述本身任何信息的情况下证明该陈述有效。
除了少数差异外,STARK 具有和 SNARK 相同的特性。基于 STARK 的有效性证明是使用一段信息生成的,该信息对验证者是隐藏的。STARK 也可以在不透露输入的情况下验证交易的正确性。
ZK-STARK 与 ZK-SNARK 的比较
ZK-STARK 的主要区别在于其可扩展性和透明性:
ZK-STARK 之所以被认为是透明的,是因为它无需通用公共参考串(CRS)的可信设置即可工作。相反,STARK 协议使用可公开验证的随机性来建立证明者和验证者之间的交互。
ZK-STARK 是_可扩展的_,因为其证明和验证的复杂度相对于计算复杂度呈_拟线性_增长。而在 ZK-SNARK 中,证明和验证的复杂度相对于底层计算呈_线性_增长。
这意味着,当需要验证的计算规模变大时,ZK-SNARK 协议生成和验证证明所需的时间会比 ZK-STARK 更长。这也是为什么 STARK 更适合处理大量交易的应用场景。

ZK-STARK 有哪些优势?
使用 ZK-STARK 有四大主要优势:无需可信设置、具备可扩展性、为用户提供最大吞吐量,以及具有较高的安全保证。
1. 无需可信设置
ZK-STARK 无需可信设置即可运行,而是依赖公共随机性。这减少了用户方面的信任假设,提升了基于 STARK 协议的安全性。
2. 可扩展特性
与 SNARK 相比,STARK 在规模化场景下可以更快地完成计算和验证。更重要的是,即使底层计算的复杂度呈指数级增长,ZK-STARK 也能保持较低的证明和验证时间。
3. 最大吞吐量
与 SNARK 一样,STARK 通过实现安全且可验证的链下计算来扩展区块链。
提交到 L1 链的一个 STARK 证明可以验证主链之外进行的数千笔交易。因此,一些知名的 ZK rollup 项目使用 ZK-SNARK 来证明链下计算的完整性。
4. 更高的安全保证
ZK-STARK 使用抗碰撞哈希进行加密,而不是 ZK-SNARK 中使用的椭圆曲线方案。这被认为能够抵御量子计算攻击,因此比 SNARK 中使用的椭圆曲线更安全。
ZK-STARK 有哪些缺点?
使用 ZK-STARK 的两大主要缺点是证明尺寸较大,以及该技术在区块链领域的采用度较低。
1. 较大的证明尺寸
虽然 STARK 能够更快地生成证明,但其缺点是这些证明比基于 SNARK 的证明更大。这使得在 Ethereum 上验证 STARK 证明的成本更高,因为计算更大的证明会产生更高的 Gas 费用。
2. 较低的采用度
SNARK 是区块链中零知识技术的首个实际应用,这也是它比 STARK 拥有更大市场份额的原因。大多数 ZK rollups 使用 ZK-SNARK,基于 SNARK 的零知识证明的开发者生态和工具链也更为成熟。
尽管 ZK-STARK 也拥有一些知名支持者,包括 Ethereum 基金会,但其采用度仍然较低。因此,开发者在使用 STARK 构建 ZK 项目时可能会发现支持和工具较少。
哪些项目使用了 ZK-STARK?
StarkNet
作为 Ethereum 上 L2 网络运行的通用型 ZK rollup。StarkNet 使去中心化应用能够在不损害 Ethereum 去中心化和安全性的前提下实现无限的可扩展性。
dYdX
基于 Ethereum 的 ZK rollup 项目(同时也是一个去中心化交易所),为加密用户和交易者提供快速、低成本的交易、借贷服务。dYdX将 STARK 证明作为其安全机制的一部分,保障用户资金安全。
Polygon miden
具有 EVM 兼容性的基于 STARK 的 ZK rollup。虽然仍处于开发阶段,但 Polygon Miden 将成为首个在推出时即兼容 EVM 的 ZK-STARK 协议,使开发者能够将 Ethereum 原生应用迁移过来,在 L2 网络上享受可扩展性。
什么是递归 ZK-SNARK?
递归 SNARK 系统为不同的交易区块并行生成证明,并将这些证明聚合为一个单一的区块证明提交到主区块链,这意味着一个 SNARK 可以验证其他 SNARK。
L2 rollup 仍然只在 Ethereum 上提交一个有效性证明。但这个"递归证明"验证了多个 L2 区块中的交易,一旦链上合约接受了提交的证明,所有这些交易都将变为有效。

递归 ZK-SNARK 解决了什么问题?
递归 ZK-SNARK 通过将多个 L2 证明合并进提交给 L1 链的单一证明中,大幅提高了可以通过一次 ZK 证明完成最终确认的交易数量,而这一数量目前受限于 Ethereum 12-14 秒的出块时间。
出块时间指的是在 Ethereum 上挖出一个新交易区块所需的时间。ZK rollups 每个区块只能提交一笔链上交易(以及相应的有效性证明),这限制了它们能够处理的交易数量。
递归 ZK-SNARK 与普通 ZK-SNARK 有何不同?
递归 ZK-SNARK 与普通 ZK-SNARK 的不同之处在于,递归 ZK-SNARK 可以通过将针对不同 L2 区块生成的 SNARK 合并为一个提交给 L1 链的单一有效性证明,从而验证多个交易区块。
ZK rollups 会在提交给主区块链之前为每批交易生成一个 SNARK 证明,而单个 SNARK 证明只能验证在 L2 rollup 上进行的一个交易区块。
ZK-SNARK 可以在不使用原始输入的情况下,验证已由普通 ZK-SNARK 验证过的交易。因此,链上智能合约可以验证更大规模的链下计算集合,而无需将多个 SNARK 作为输入运行。
什么是 plonky2?
Plonky2 是一种用于 Polygon Zero 的新型证明机制,Polygon Zero 是一个拟议中的Polygon ZK rollup,使用递归 ZK-SNARK 来提升交易能力。
递归 SNARK 通过将多个证明聚合为一个递归证明来扩展证明生成过程,Plonky2 使用相同的技术来缩短生成新区块证明所需的时间。
Plonky2 证明机制并行为数千笔交易生成证明,然后再递归地将它们聚合为一个区块证明。这比试图一次性生成_整个_区块证明的传统证明机制更为高效。
这种方法的优势是显而易见的。
Plonky2 可以在 0.17 秒内生成一个递归证明,使其成为目前最快的证明机制。此外,Plonky2 可以在消费级设备上生成证明,解决了普通基于 SNARK 的证明系统所存在的硬件中心化问题。
结论
零知识证明已经从一种保护隐私的技术,发展成为下一代扩容技术的前沿。随着 ZK rollups 的爆发式增长,可以肯定的是,ZK-SNARK、ZK-STARK 和递归 SNARK 将在推动 Ethereum 扩容的过程中占据重要地位。
Web3 开发者可以通过在StarkNet上构建应用来利用零知识技术,StarkNet 是一个由 Alchemy 支持的基于 STARK 的 Ethereum ZK rollup。立即开始构建可扩展且无需权衡取舍的应用!
相关概览

构建区块链应用
Alchemy 将最强大的 Web3 开发者产品和工具与资源、社区及专业支持结合在一起。


