Files
2025-09-25 04:06:55 +08:00

35 lines
2.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### libsnark 核心是什么
**libsnark** 是一个 C++ 库,它提供了一套用于构建和验证**简洁非交互式知识论证**Succinct Non-Interactive Arguments of Knowledge,简称 **SNARKs**)的算法和工具。
简单来说,SNARKs 是一种强大的加密技术,它允许**证明者**(prover)向**验证者**(verifier)证明某个陈述是真实的,而无需向验证者透露任何敏感信息。这个证明过程非常高效:**证明本身很小**,**验证速度极快**,而且**验证者不需要与证明者进行交互**
**libsnark 的核心功能**
libsnark 的核心在于它实现了多种**零知识证明**方案。这些方案可以分为几个主要部分:
**1. 算术化**
这是将一个计算问题转换为一个数学可证明形式的第一步。libsnark 主要使用了两种方法:
- **QAP (Quadratic Arithmetic Programs)**:将一个计算问题(如一个程序或电路)转换为一个二次算术程序。这是最经典的 SNARK 方案之一,被用于 Zcash 的第一代版本
- **R1CS (Rank-1 Constraint Systems)**:这是一种更基础的算术化形式,它将问题表示为一系列线性方程组。libsnark 支持将 QAP 转换为 R1CS,并提供了相应的工具
**2. 多项式承诺**
在 SNARKs 中,证明者需要证明一个多项式满足某些性质,而无需透露整个多项式。libsnark 提供了多种多项式承诺方案,例如基于**配对曲线(Pairing-based Elliptic Curves**的方案,这些方案是高效且安全的
**3. zk-SNARK 协议实现**
libsnark 实现了完整的 zk-SNARK 协议,包括:
- **可信设置(Trusted Setup**:这是 SNARKs 的一个重要步骤,需要生成一个公共的参数集合。libsnark 提供了生成和验证这些参数的工具
- **证明生成(Proof Generation)**:通过这个过程,证明者可以生成一个简洁的零知识证明
- **证明验证(Proof Verification)**:验证者可以使用公共参数和证明,快速验证陈述的真实性
**4. 密码学原语**
libsnark 依赖于强大的密码学原语,例如:
- **配对友好的椭圆曲线(Pairing-friendly Elliptic Curves**:例如 BN254、BLS12-381 等。这些曲线是实现高效零知识证明的基础
- **哈希函数**:用于数据完整性检查