ZK-Snarks
ZK-Snarks
zk-SNARKs(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)是一种零知识证明(ZKP)协议,用于证明某个声明在不透露任何附加信息的情况下是正确的。zk-SNARKs 被广泛应用于区块链和隐私保护中,尤其是在提高效率和隐私的场景下。
zk-SNARKs 的核心特性
零知识性(Zero-Knowledge)
证明者能够证明某个事实正确,但不会透露任何除了该事实正确性的额外信息。简洁性(Succinctness)
证明的大小和验证的计算量是固定的,与证明的计算量大小无关,因此能够快速验证。非交互性(Non-Interactive)
证明者和验证者之间不需要任何交互。传统的零知识证明需要多个交互回合,而 zk-SNARKs 只需要一个证明和一个验证过程。知识性(Argument of Knowledge)
证明者不仅要证明某个声明是正确的,而且要证明自己确实拥有相关的知识来证明该声明。
zk-SNARKs 的工作原理
声明:证明者有一个秘密,想要证明这个秘密能满足某个特定条件。
生成证明:证明者使用一个生成证明的算法(通常使用加密学方法)来生成一个简洁的证明。
验证证明:验证者通过验证算法检查该证明是否正确,而无需知道秘密本身。
zk-SNARKs 的应用
隐私保护的加密货币
在隐私币如 Zcash 中,zk-SNARKs 被用来隐藏交易金额和交易方的身份,同时验证交易的合法性。身份验证
zk-SNARKs 可用于无服务器的身份验证系统,在验证身份时,用户无需透露更多的个人信息。区块链扩展
zk-SNARKs 可用于提高区块链的扩展性,例如通过 zk-rollups 将大量交易汇总为一个证明,减少链上的计算负担。
zk-SNARKs 的实现步骤
设置
zk-SNARKs 的生成过程通常涉及到一个可信的设置步骤(trusted setup),其中包括生成一对公私钥。证明生成
证明者根据私有数据和公钥生成证明。证明验证
验证者使用公钥和证明来验证声明的正确性。
优缺点
优点
- 高效性:证明的大小和验证的复杂度独立于数据大小,适合大规模的应用。
- 隐私性:能有效保护用户的隐私数据。
缺点
- 可信设置:zk-SNARKs 的生成依赖于可信的设置,必须确保设置过程不被攻击者篡改。
- 复杂性:zk-SNARKs 的数学原理和实现较为复杂,对实现者有较高的技术要求。
zk-SNARKs 具体算法
zk-SNARKs 的实现依赖于一些核心的加密算法和数学原理,下面介绍几种常见的 zk-SNARKs 算法:
1. Groth16
Groth16 是目前最为广泛使用的 zk-SNARK 架构之一。它是由 Jens Groth 在 2016 年提出的,它基于 elliptic curve pairings(椭圆曲线配对)和具有对数规模的证明生成和验证过程。
Groth16 的主要特点:
- 高效性:它在空间和时间复杂度上都非常高效,能够生成较小的证明并快速验证。
- 公私钥:它采用可信设置(trusted setup),需要在初始化时生成公私钥对,生成证明和验证都依赖于这个公私钥对。
- 用途:Groth16 已被用于 Zcash 和许多区块链项目中,作为加密货币的隐私保护技术。
Groth16 关键算法步骤:
- 证明生成:证明者用输入数据和某些秘密数据生成证明。
- 证明验证:验证者使用公钥和证明来验证某个计算是否正确,而无需获取原始数据。
Groth16 的安全性基于椭圆曲线离散对数问题(ECDLP)和双线性映射。
2. Pinocchio
Pinocchio 是一个 zk-SNARK 实现,旨在提供通用的证明系统,支持通用的计算模型,而不仅仅是特定的电路。
Pinocchio 的特点:
- 通用性:它比 Groth16 更加通用,可以用于多种类型的计算任务。
- 优化:通过将非交互式证明与多项式承诺(polynomial commitment)技术相结合,提高了性能。
Pinocchio 关键步骤:
- 生成证明:与其他 zk-SNARK 系统一样,证明者根据某个计算生成证明。
- 验证:验证者使用公钥和证明来验证计算是否正确。
Pinocchio 采用了一些新颖的优化技术,使其适用于更复杂的计算问题。
3. PLONK
PLONK 是一种新的 zk-SNARK 架构,它旨在提供更高效的非交互式零知识证明。PLONK 通过设计一种高效的多项式承诺方案来替代传统的 Groth16 或 Pinocchio 架构,提供了更高的通用性和优化。
PLONK 的特点:
- 无需可信设置:PLONK 允许在不同的环境中无缝使用,特别是在无需可信设置的情况下。
- 通用性:它支持所有类型的计算,而不仅仅是特定的电路。
- 优化:PLONK 提供比其他系统更高的效率和简洁性。
PLONK 的关键步骤:
- 证明生成:类似于其他 zk-SNARK 系统,证明者根据输入生成证明。
- 验证:通过使用一个公共多项式承诺来验证证明。
PLONK 比 Groth16 和 Pinocchio 更加高效且具有更好的扩展性,尤其适用于需要广泛适应不同计算模型的场景。
4. Fractal
Fractal 是一种基于同态加密的 zk-SNARK 架构,旨在通过分解计算任务来提高证明生成和验证的效率。
Fractal 的特点:
- 分解性:Fractal 架构允许将计算任务分解为更小的部分,针对每一部分生成单独的证明,然后将这些部分组合起来,从而减少了证明生成的复杂性。
- 灵活性:适用于许多类型的计算任务,尤其是那些非常复杂且需要分解的大规模计算。
Fractal 关键步骤:
- 分解计算:将计算分解为多个部分,针对每一部分生成证明。
- 组合证明:将所有部分的证明结合起来生成最终的证明,并进行验证。
Fractal 是一种非常灵活的框架,适用于更为复杂的计算场景,特别是在需要大规模分布式计算时。
5. Sonic
Sonic 是另一个针对 zk-SNARKs 的协议,旨在改进现有 zk-SNARK 系统的效率,特别是提高证明生成速度,并在验证过程中消除可信设置的需求。
Sonic 的特点:
- 高效性:相比于传统的 zk-SNARK 系统,Sonic 在证明生成和验证上更高效。
- 无需可信设置:与 PLONK 相似,Sonic 在生成和验证证明时不需要可信设置。
- 性能优化:Sonic 优化了多项式承诺技术,能够显著提高证明生成速度。
Sonic 的关键步骤:
- 生成证明:通过优化的多项式承诺和新颖的证明生成策略,生成简洁高效的证明。
- 验证:验证者使用公钥和优化后的多项式承诺来验证证明。
Sonic 在无可信设置的情况下提供了非常高效的 zk-SNARK 实现。
总结:常见 zk-SNARK 算法
算法名称 | 特点 | 应用场景 | 是否需要可信设置 |
---|---|---|---|
Groth16 | 高效,广泛应用于隐私保护 | Zcash 等隐私币 | 需要 |
Pinocchio | 支持通用计算,较为灵活 | 大规模计算任务 | 需要 |
PLONK | 无需可信设置,通用性强 | 区块链应用,智能合约 | 无需 |
Fractal | 支持分解计算,提高效率 | 大规模分布式计算 | 需要 |
Sonic | 高效,优化了证明生成和验证 | 快速验证和生成证明,隐私保护 | 无需 |