跳至内容
0%

SNARKs、STARKS 与 Recursive SNARKs 对比

Alchemy team headshot

作者 Alchemy

发布于 2022年5月27日3 分钟阅读

零知识证明是一种机制,允许一方向另一方证明其掌握某些信息,而不透露该信息本身。零知识证明也被称为有效性证明,最初用于在隐私型区块链中隐藏交易细节。

但零知识证明还有另一个重要用途:扩展通用型区块链的性能。借助有效性证明,区块链节点可以在不存储交易细节、不重新执行计算的情况下验证交易。这缩短了确认时间,提升了网络吞吐量。

由于其在扩容方面的优势,零知识证明已成为区块链扩容项目的核心基础设施,尤其是在零知识 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)则负责验证该声明。

声明中所引用的信息被称为证据或称为“秘密”。证明者(Alice)使用 ZK-SNARK 机制生成证明,向验证者(Bob)表明该声明为真……而不透露所引用的信息。

一个涉及 ZK-SNARK 的假设场景是验证用户身份。个人可以证明一项陈述(“我是美国公民”),而不透露个人信息(例如护照或社会安全号码)。

ZK-SNARK 之所以如此命名,是因为它们具备以下特性:

1. 零知识:这意味着验证者除了知道该陈述真假之外,对陈述本身一无所知。

2. 简洁:证明的规模足够小,验证者可以在很短的时间内完成验证。

3. 非交互:SNARK 之所以是非交互式的,是因为证明者和验证者除了最初提交的证明之外,不需要交换任何信息。早期的零知识证明系统要求证明者和验证者交换多条消息才能完成验证。

4. 论证:SNARK 是一种“计算上可靠”的陈述,需满足严格要求,因此很难作弊(即生成虚假证明)。

5. 知识:如果无法获取底层信息(即“证据”),就无法生成基于 SNARK 的证明。

prover 与 verifier 之间 ZK-SNARK 证明流程示意图
来源:Altoros

区块链中的 ZK-SNARK

分布式计算系统,例如公有区块链,需要解决所谓的“计算完整性问题”。计算完整性(CI)指的是某次计算所得输出结果的正确性。

在公有区块链中,计算完整性指的是网络上执行交易的正确性。大多数区块链通过让其他计算机(节点)重新执行每笔交易来实现这一点。

然而,这种方式存在问题。强制每个节点重放每笔交易会拖慢网络速度,限制可扩展性。节点还必须存储交易数据(否则无法重放计算),导致区块链体积呈指数级增长。

但如果节点能够在不重放计算的情况下检查计算的有效性呢?这将提升网络吞吐量,并消除节点存储冗余交易数据的必要性。

这正是 ZK-SNARK 发挥作用的地方。

使用 ZK-SNARK 生成的有效性证明可以在不透露输入的情况下证明交易的有效性。这就是为什么像 Zcash 和 Monero 这类注重隐私的加密货币会使用 SNARK 来隐藏交易信息。

SNARK 还可以在不要求节点重放计算每一步的情况下,证明链下执行的计算的正确性。这正是 ZK-SNARK 在区块链扩容方面发挥作用的地方。

使用 SNARK 验证链下计算是一个复杂的过程,首先需要将计算编码为一个数学表达式。这个数学陈述构成了有效性证明的基础。

随后,验证者对该证明执行一项运算以检查其正确性。如果证明通过所有检查,则认为底层计算有效。这正是 SNARK 被称为“简洁”的原因——有效性证明的规模比其所验证的计算要小得多。

ZK-SNARK 有效性证明验证链下计算的示意图
来源:Finematics

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 Rollup 遵循相同的结构:

  1. L2 链上的用户签署交易,并将其提交给验证者。

  2. 验证者将交易压缩为一个区块,并生成对应的有效性证明(SNARK)。这提供了密码学上的保证,证明新状态是由有效交易添加所产生的。

  3. L1 链上的一个智能合约对该有效性证明执行一次运算。该运算的结果决定了批量交易是否通过验证并被提交至主链。

ZK rollup 向 Ethereum L1 链提交 SNARK 有效性证明的示意图
来源:Simon Brown

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 协议需要创建一个通用公共参考字符串(CRS)。CRS 也被称为“公共参数”,用于确保证明者与验证者之间的安全通信。

如果恶意行为者获取了这些公共参数的相关信息,就可能生成虚假的有效性证明。一些项目尝试通过使用多方计算(MPC)来解决这一问题,即由多个不同的个体共同生成公共参数。

然而,这种方式要求用户信任参与者的诚信。这本身就存在问题,因为区块链存在的意义正是减少对权威机构的信任依赖。

2. 易受量子计算攻击

ZK-SNARK 使用椭圆曲线密码学(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-SNARK 特性对比图
来源:Adam Luciano

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 Rollup 使用 ZK-SNARK,基于 SNARK 的零知识证明的开发者生态和工具链也更为完善。

尽管 ZK-STARK 也得到了一些知名支持者的认可,其中包括 Ethereum Foundation,但其采用率仍然较低。因此,开发者在使用 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 将多个区块证明聚合为一个证明的示意图
来源:Matter Labs

递归 ZK-SNARK 解决了什么问题?

递归 ZK-SNARK 通过将多个 L2 证明整合到提交给 L1 链的单一证明中,大幅提升了可通过一次 ZK 证明最终确认的交易数量,而目前这一数量受限于 Ethereum 12-14 秒的区块时间。

区块时间指的是在 Ethereum 上挖出一个新交易区块所需的时间。ZK Rollup 每个区块只能提交一笔链上交易(及对应的有效性证明),这限制了它们能够处理的交易数量。

递归 ZK-SNARK 与普通 ZK-SNARK 有何不同?

递归 ZK-SNARK 与普通 ZK-SNARK 的不同之处在于,递归 ZK-SNARK 可以通过将针对不同 L2 区块生成的 SNARK 合并为提交至 L1 链的单一有效性证明,从而验证多个交易区块。

ZK Rollup 在提交至主区块链之前,会为每批交易创建一个 SNARK 证明,而单个 SNARK 证明只能验证在 L2 Rollup 上进行的一个区块的交易。

ZK-SNARK 可以在不使用原始输入的情况下,验证那些已经被普通 ZK-SNARK 验证过的交易。因此,链上智能合约可以在不将多个 SNARK 作为输入运行的情况下,验证更大规模的链下计算集合。

什么是 plonky2?

Plonky2 是一种新型证明机制,用于 Polygon Zero——一个提议中的Polygon ZK Rollup,该项目使用递归 ZK-SNARK 来提升交易处理能力。

递归 SNARK 通过将多个证明聚合为一个递归证明来扩展证明生成流程,Plonky2 采用了相同的技术,以缩短生成新区块证明所需的时间。

Plonky2 证明机制会并行为数千笔交易生成证明,然后再递归地将这些证明聚合成一个区块证明。这比传统证明机制更高效,传统方式会尝试一次性生成“整个”区块证明。

这种方法的优势显而易见。

Plonky2 可以在 0.17 秒内生成一个递归证明,使其成为目前速度最快的证明机制。此外,Plonky2 可以在消费级设备上生成证明,解决了常规基于 SNARK 的证明系统所存在的硬件集中化问题。

结语

零知识证明已从最初的隐私保护技术,发展为扩容技术的下一个前沿领域。随着 ZK Rollup 的爆发式增长,可以说 ZK-SNARK、ZK-STARK 以及递归 SNARK 将在推动 Ethereum 扩容的过程中扮演重要角色。

Web3 开发者可以通过在 StarkNet 上构建应用来利用零知识技术,StarkNet 是一个由 STARK 驱动、并获得 Alchemy 支持的 Ethereum ZK Rollup。立即开始构建可扩展且无需权衡取舍的应用!

Background gradient

构建区块链应用

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