ZK-Snarks

DeeLMind大约 7 分钟

ZK-Snarks

zk-SNARKs(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)是一种零知识证明(ZKP)协议,用于证明某个声明在不透露任何附加信息的情况下是正确的。zk-SNARKs 被广泛应用于区块链和隐私保护中,尤其是在提高效率和隐私的场景下。

zk-SNARKs 的核心特性

  1. 零知识性(Zero-Knowledge)
    证明者能够证明某个事实正确,但不会透露任何除了该事实正确性的额外信息。

  2. 简洁性(Succinctness)
    证明的大小和验证的计算量是固定的,与证明的计算量大小无关,因此能够快速验证。

  3. 非交互性(Non-Interactive)
    证明者和验证者之间不需要任何交互。传统的零知识证明需要多个交互回合,而 zk-SNARKs 只需要一个证明和一个验证过程。

  4. 知识性(Argument of Knowledge)
    证明者不仅要证明某个声明是正确的,而且要证明自己确实拥有相关的知识来证明该声明。

zk-SNARKs 的工作原理

  1. 声明:证明者有一个秘密,想要证明这个秘密能满足某个特定条件。

  2. 生成证明:证明者使用一个生成证明的算法(通常使用加密学方法)来生成一个简洁的证明。

  3. 验证证明:验证者通过验证算法检查该证明是否正确,而无需知道秘密本身。

zk-SNARKs 的应用

  1. 隐私保护的加密货币
    在隐私币如 Zcash 中,zk-SNARKs 被用来隐藏交易金额和交易方的身份,同时验证交易的合法性。

  2. 身份验证
    zk-SNARKs 可用于无服务器的身份验证系统,在验证身份时,用户无需透露更多的个人信息。

  3. 区块链扩展
    zk-SNARKs 可用于提高区块链的扩展性,例如通过 zk-rollups 将大量交易汇总为一个证明,减少链上的计算负担。

zk-SNARKs 的实现步骤

  1. 设置
    zk-SNARKs 的生成过程通常涉及到一个可信的设置步骤(trusted setup),其中包括生成一对公私钥。

  2. 证明生成
    证明者根据私有数据和公钥生成证明。

  3. 证明验证
    验证者使用公钥和证明来验证声明的正确性。

优缺点

优点

  • 高效性:证明的大小和验证的复杂度独立于数据大小,适合大规模的应用。
  • 隐私性:能有效保护用户的隐私数据。

缺点

  • 可信设置: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高效,优化了证明生成和验证快速验证和生成证明,隐私保护无需
上次编辑于:
贡献者: DeeLMind