Appearance
SNARKs、STARK、PLONK和Groth
Snark和Strak:两种框架
特性 | zk-SNARKs | zk-STARKs |
---|---|---|
全称 | Zero-Knowledge Succinct Non-Interactive Argument of Knowledge (零知识简洁非交互式知识论证) | Zero-Knowledge Scalable Transparent Argument of Knowledge (零知识可扩展透明知识论证) |
可信设置 | 需要。必须有一个可信的初始设置阶段(生成 SRS),如果“有毒废料”(秘密)未被销毁,任何人都可伪造证明。这引入了信任假设。 | 不需要。使用公开随机性,设置是透明的,无需秘密参数,更去中心化和安全。 |
安全性基础 | 依赖椭圆曲线密码学(ECC),基于离散对数难题。 | 依赖哈希函数(如 SHA-256),基于哈希的抗碰撞性。 |
后量子安全性 | 否。量子计算机可破解椭圆曲线加密。 | 是。哈希函数在量子计算下仍被认为安全。 |
证明大小 | 非常小(通常几百字节),适合链上验证(节省 gas)。 | 较大(通常几 KB 到几十 KB),验证成本更高。 |
验证速度 | 非常快。 | 相对较慢,尤其对于小计算。 |
可扩展性 | 对于小到中等计算高效。 | 对于大型计算更具可扩展性,随着计算复杂度增加,性能优势更明显。 |
典型应用 | Zcash(隐私交易)、zkSync、Scroll、Polygon zkEVM 等。 | StarkWare(StarkNet、StarkEx)、Immutable X 等。 |
Groth16 与 PLONK:zk-SNARKs 的具体实现协议
Groth16 和 PLONK 都是 zk-SNARKs 的具体构造方案,即它们是 SNARKs 这个大类下的具体实现。它们的关系是同属 SNARKs,但技术细节不同。
Groth16
- 特点:
- 是最早、最高效、最广泛使用的 SNARK 协议之一。
- 生成的证明极小,验证速度极快。
- 需要可信设置,且设置是特定于电路的(circuit-specific)。这意味着为一个特定程序(电路)生成的 SRS 不能用于其他程序。
- 缺点:
- 每次更改电路逻辑,都需要重新进行可信设置,这在需要频繁升级的系统中是巨大的负担。
- 被认为不够“通用”。
PLONK
- 全称:Permutations over Lagrange-bases for Oecumenical Noninteractive arguments of Knowledge
- 特点:
- 是一种通用(universal)和可更新(updatable)的 SNARK 协议。
- 只需要一次可信设置,生成的 SRS 可以用于任何电路(只要电路规模在设置时定义的范围内)。
- 支持更灵活的电路设计(如自定义门)。
- 优点:
- 极大减少了可信设置的负担,更适合需要频繁迭代或支持通用智能合约的区块链项目。
- 被认为是 Groth16 的“升级版”或更现代的替代方案。
- 缺点:
- 证明大小和验证时间相比 Groth16 略有增加(但仍远优于 STARKs)。
More
- 可以通过使用Groth对SNARKs进行压缩优化