littlebot
Published on 2025-04-08 / 1 Visits
0

【源码】基于C++的零知识简洁非交互式知识论证库

项目简介

本项目是一个基于C++的库,主要用于实现零知识简洁非交互式知识论证(zkSNARK)。zkSNARK作为一种加密方法,能在零知识的情况下证明计算的完整性。该库支持多种NP语言的证明和验证,涵盖算术电路、布尔电路、TinyRAM等。

项目的主要特性和功能

  1. 通用证明系统:支持R1CS、BACS、USCS、TBCS的预处理SNARK,R1CS的模拟提取预处理SNARK,ADSNARK以及使用递归组合SNARK的Proof - Carrying Data(PCD)。
  2. 小工具库:提供gadgetlib1和gadgetlib2,便于构建R1CS实例。
  3. 应用示例:有多个玩具示例,支持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

构建项目

  1. 复制项目并初始化子模块: bash cd libsnark git submodule init git submodule update
  2. 创建构建目录并生成Makefile: bash mkdir build cd build cmake ..
  3. 编译库、测试和性能分析工具: bash make
  4. 运行测试: bash make check

使用示例

  1. 将要证明的陈述表达为R1CS或其他支持的语言。
  2. 使用libsnark的生成器算法创建公共参数。
  3. 使用libsnark的证明者算法创建关于R1CS可满足性的证明。
  4. 使用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】