项目简介
本项目借助C++和libsnark库实现零知识证明系统。libsnark是用于构建和验证零知识证明(zkSNARK)的C++库,支持R1CS、BACS、USCS、TBCS等多种NP语言的证明和验证。项目旨在实现零知识证明系统的生成、验证和性能分析。
项目的主要特性和功能
- 零知识证明系统实现:支持R1CS、BACS、USCS、TBCS等多种NP语言的零知识证明,提供预处理zkSNARK的实现,可进行证明的生成和验证。
- Gadget库:提供gadgetlib1和gadgetlib2两个库来构建R1CS实例,支持通过组合“gadget”类构建复杂的R1CS实例。
- 应用示例:有多个应用示例,展示如何使用libsnark库证明不同类型的NP语句,包括TinyRAM机器代码的执行证明、Proof - Carrying Data的实现等。
- 性能分析:具备性能分析工具,可收集和报告证明系统的性能数据,支持多核并行执行以优化生成和验证过程的性能。
安装使用步骤
依赖安装
确保系统已安装以下依赖: - C++编译环境 - CMake构建工具 - GMP库(用于大整数运算) - libprocps库(用于内存使用报告) - Git子模块(用于获取libff、libfqfft等依赖库)
在Ubuntu系统上,使用以下命令安装依赖:
bash
sudo apt-get install build-essential cmake git libgmp3-dev libprocps4-dev python-markdown libboost-all-dev libssl-dev
构建项目
- 复制项目并初始化子模块:
bash cd libsnark-project git submodule init git submodule update
- 创建构建目录并生成Makefile:
bash mkdir build cd build cmake ..
- 编译项目:
bash make
- 运行测试(可选):
bash make check
使用libsnark库
- 表达NP语句:用C++代码构建R1CS或其他支持的NP语言实例,并将代码与libsnark库链接。
- 生成公共参数:使用libsnark的生成算法为NP语句创建公共参数(证明密钥和验证密钥)。
- 生成证明:使用libsnark的证明算法为满足NP语句的实例生成证明。
- 验证证明:使用libsnark的验证算法检查证明的有效性。
示例运行
以下命令可运行一个简单的R1CS实例的性能分析:
bash
libsnark/zk_proof_systems/ppzksnark/r1cs_ppzksnark/profiling/profile_r1cs_ppzksnark 1000 10 Fr
此命令将运行一个包含1000个方程和10个字段元素输入的R1CS实例的生成、证明和验证过程。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】