项目简介
本项目是一个基于C++的库,主要用于实现零知识简洁非交互式知识论证(zkSNARK)。zkSNARK作为一种加密方法,能在零知识的情况下证明计算的完整性。该库支持多种NP语言的证明和验证,涵盖算术电路、布尔电路、TinyRAM等。
项目的主要特性和功能
- 通用证明系统:支持R1CS、BACS、USCS、TBCS的预处理SNARK,R1CS的模拟提取预处理SNARK,ADSNARK以及使用递归组合SNARK的Proof - Carrying Data(PCD)。
- 小工具库:提供gadgetlib1和gadgetlib2,便于构建R1CS实例。
- 应用示例:有多个玩具示例,支持TinyRAM机器代码的执行证明、使用Proof - Carrying Data的TinyRAM的可扩展性以及零知识集群MapReduce。
安装使用步骤
依赖安装
确保系统已安装以下依赖: - C++编译环境 - CMake构建工具 - GMP库(用于大整数运算) - libprocps库(用于内存使用报告) - 其他通过Git子模块获取的依赖(如libff、libfqfft、Google Test等)
在Linux系统上,使用以下命令安装依赖:
bash
sudo apt install build-essential cmake git libgmp3-dev libprocps-dev python3-markdown libboost-program-options-dev libssl-dev python3 pkg-config
构建项目
- 复制项目并初始化子模块:
bash cd libsnark git submodule init git submodule update
- 创建构建目录并生成Makefile:
bash mkdir build cd build cmake ..
- 编译库、测试和性能分析工具:
bash make
- 运行测试:
bash make check
使用示例
- 将要证明的陈述表达为R1CS或其他支持的语言。
- 使用libsnark的生成器算法创建公共参数。
- 使用libsnark的证明者算法创建关于R1CS可满足性的证明。
- 使用libsnark的验证者算法检查证明。
例如,运行一个简单的R1CS示例:
bash
libsnark/zk_proof_systems/ppzksnark/r1cs_ppzksnark/profiling/profile_r1cs_ppzksnark 1000 10 Fr
高级选项
可通过CMake设置以下选项定制构建:
- -DCURVE=choice
:选择椭圆曲线(如ALT_BN128, BN128, EDWARDS等)。
- -DLOWMEM=ON
:限制多指数表的大小,适用于低内存平台。
- -DWITH_PROCPS=OFF
:不链接libprocps,禁用内存分析。
- -DWITH_SUPERCOP=OFF
:不链接SUPERCOP,禁用ADSNARK。
- -DMULTICORE=ON
:启用多核并行执行。
更多选项参考CMakeLists.txt文件。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】