零知识ZKP
大约 4 分钟
零知识ZKP
零知识证明(Zero-Knowledge Proof, ZKP)是一种加密协议,允许一个方(证明者)向另一个方(验证者)证明某个声明是正确的,而无需透露任何除声明本身是否正确之外的信息。
ZKP的核心概念
- 完整性:如果声明是真的,诚实的证明者能够说服验证者接受其证明。
- 可靠性:如果声明是假的,恶意的证明者无法说服验证者相信其证明。
- 零知识性:证明者向验证者证明声明的真实性时,不泄露任何关于声明的额外信息,除了声明的真假。
ZKP的类型
交互式零知识证明 (Interactive ZKPs)
在这种类型的证明中,证明者和验证者进行一系列的交互步骤,通常是一个挑战-响应的过程,直到验证者确信证明者的声明正确。
非交互式零知识证明 (Non-Interactive ZKPs, NIZKPs)
这种类型的证明不需要证明者和验证者之间的多次交互。验证者可以单独检查证明的有效性。通常通过使用公共的参考字符串来完成。
ZKP的应用
- 身份验证:在不暴露密码的情况下验证用户身份。
- 区块链和加密货币:如Zcash等加密货币利用ZKP实现隐私交易。
- 匿名证明:允许用户证明他们符合某些条件(例如,年龄大于18岁)而无需透露其他个人信息。
常见的ZKP构建方式
ZK-SNARKs
- 零知识简洁非交互式论证(ZK-SNARKs)是一种高效、非交互式的零知识证明。
- 它依赖于预先生成的公共参考字符串(CRS),这使得证明过程非常简洁且快速。
- 被广泛应用于区块链(如Zcash、Ethereum 2.0的Plonk协议)。
ZK-STARKs
- 零知识可扩展透明论证(ZK-STARKs)不依赖于可信的设置,相比ZK-SNARKs,ZK-STARKs不需要公共参考字符串。
- 它在计算和存储上更加高效,尤其在处理大规模计算时,ZK-STARKs能提供更强的可扩展性。
1. ZK-SNARKs(Zero-Knowledge Succinct Non-Interactive Arguments of Knowledge)
ZK-SNARKs 是一种简洁的非交互式零知识证明协议,它通过生成非常小的证明和高效的验证过程来证明一个计算的正确性,且无需泄露任何关于计算输入的额外信息。ZK-SNARKs 在区块链隐私、智能合约和数据验证等领域得到广泛应用。
具体协议算法:
Groth16
- Groth16 是 ZK-SNARKs 的一种实现,是目前最常用的 ZK-SNARK 算法之一。它具有高效的证明生成和验证过程,特别适用于带宽有限的环境。
- 特点:
- 需要信任设置。
- 证明非常小(通常是几百字节)。
- 性能良好,生成证明和验证都非常高效。
- 应用:广泛用于加密货币(如 Zcash)和其他隐私保护应用。
Plonk
- Plonk 是一种新的 ZK-SNARK 构造方法,旨在提高灵活性,支持通用电路而不需要为每个电路单独生成证明系统。
- 特点:
- 无需信任设置。
- 高效且支持通用电路。
- 用于 Ethereum 2.0 的一些扩展和 zkRollups。
- 应用:适用于需要灵活电路设计的应用,支持跨链操作。
Marlin
- Marlin 是一种优化的 ZK-SNARK 协议,能够在更广泛的设置下提供高效的性能。
- 特点:
- 无需信任设置。
- 高效且可扩展,适用于大规模数据处理。
- 应用:适用于需要大规模计算的去中心化应用。
2. ZK-STARKs(Zero-Knowledge Scalable Transparent Arguments of Knowledge)
ZK-STARKs 是一种不依赖信任设置的零知识证明协议,通常比 ZK-SNARKs 更加透明和可扩展。它依赖于哈希函数和其他公正的数学构造,而不需要生成公共参考字符串(CRS)。ZK-STARKs 主要关注可扩展性和透明度。
具体协议算法:
STARKs (Scalable Transparent Arguments of Knowledge)
- STARKs 是 ZK-STARKs 的基本形式,设计时以可扩展性和透明度为主要目标。
- 特点:
- 完全不依赖信任设置。
- 支持大规模计算(可扩展性强)。
- 需要大量计算资源生成证明,但验证非常高效。
- 应用:适用于处理大量数据的场景,特别是需要高可扩展性的区块链应用。
Fawkes
- Fawkes 是一种基于 STARK 的协议,旨在提高大规模数据验证的效率,尤其是在隐私保护方面。
- 特点:
- 结合了 STARKs 的高可扩展性和额外的隐私保护。
- 应用:适用于隐私保护和安全验证的需求,
区块链平台 | 使用的零知识证明技术 | 具体协议算法 |
---|---|---|
Zcash | ZK-SNARKs | Groth16 |
Ethereum | ZK-SNARKs, ZK-STARKs | Groth16, PLONK (部分扩展解决方案) |
Filecoin | ZK-SNARKs | Groth16 |
Polkadot | ZK-SNARKs | PLONK |
StarkWare | ZK-STARKs | FRI (Fast Reed-Solomon Interactive Oracle Proofs) |
Immutable X | ZK-STARKs | FRI |
dYdX | ZK-STARKs (StarkEx) | FRI |