Add files via upload
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
### 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 等。这些曲线是实现高效零知识证明的基础
|
||||
- **哈希函数**:用于数据完整性检查
|
||||
Reference in New Issue
Block a user