这个项目展示了如何使用Rust的arkworks框架实现简单的零知识证明系统。零知识证明是一种密码学技术,允许一方(证明者)向另一方(验证者)证明某个陈述是真实的,而不泄露除了该陈述为真这一事实之外的任何信息。
本项目实现了两个零知识证明示例:
- 平方根证明:证明者可以证明自己知道某个数的平方根,而不需要透露这个平方根的值。
- 立方根证明:证明者可以证明自己知道某个数的立方根,而不需要透露这个立方根的值。
- Rust 编程语言
- arkworks 框架:用于构建零知识证明系统,包含以下组件:
ark-ff- 有限域运算ark-ec- 椭圆曲线运算ark-std- 标准库ark-relations- 关系定义ark-r1cs-std- R1CS标准库ark-groth16- Groth16证明系统ark-bls12-381- BLS12-381椭圆曲线
src/main.rs- 主程序,包含:SquareRootCircuit:实现平方根证明的电路,使用R1CS约束系统CubeRootCircuit:实现立方根证明的电路,使用R1CS约束系统run_square_root_example():运行平方根证明示例run_cube_root_example():运行立方根证明示例
- 身份验证:证明你知道密码而不需要发送密码
- 隐私交易:证明交易有效而不泄露交易金额或参与者
- 隐私计算:证明计算结果正确而不泄露输入数据
- 匿名投票:证明你有权投票而不泄露你的身份