littlebot
Published on 2025-04-02 / 0 Visits
0

【源码】基于C++和libsnark库的零知识证明系统

项目简介

本项目借助C++和libsnark库实现零知识证明系统。libsnark是用于构建和验证零知识证明(zkSNARK)的C++库,支持R1CS、BACS、USCS、TBCS等多种NP语言的证明和验证。项目旨在实现零知识证明系统的生成、验证和性能分析。

项目的主要特性和功能

  1. 零知识证明系统实现:支持R1CS、BACS、USCS、TBCS等多种NP语言的零知识证明,提供预处理zkSNARK的实现,可进行证明的生成和验证。
  2. Gadget库:提供gadgetlib1和gadgetlib2两个库来构建R1CS实例,支持通过组合“gadget”类构建复杂的R1CS实例。
  3. 应用示例:有多个应用示例,展示如何使用libsnark库证明不同类型的NP语句,包括TinyRAM机器代码的执行证明、Proof - Carrying Data的实现等。
  4. 性能分析:具备性能分析工具,可收集和报告证明系统的性能数据,支持多核并行执行以优化生成和验证过程的性能。

安装使用步骤

依赖安装

确保系统已安装以下依赖: - 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

构建项目

  1. 复制项目并初始化子模块: bash cd libsnark-project git submodule init git submodule update
  2. 创建构建目录并生成Makefile: bash mkdir build cd build cmake ..
  3. 编译项目: bash make
  4. 运行测试(可选): bash make check

使用libsnark库

  1. 表达NP语句:用C++代码构建R1CS或其他支持的NP语言实例,并将代码与libsnark库链接。
  2. 生成公共参数:使用libsnark的生成算法为NP语句创建公共参数(证明密钥和验证密钥)。
  3. 生成证明:使用libsnark的证明算法为满足NP语句的实例生成证明。
  4. 验证证明:使用libsnark的验证算法检查证明的有效性。

示例运行

以下命令可运行一个简单的R1CS实例的性能分析: bash libsnark/zk_proof_systems/ppzksnark/r1cs_ppzksnark/profiling/profile_r1cs_ppzksnark 1000 10 Fr 此命令将运行一个包含1000个方程和10个字段元素输入的R1CS实例的生成、证明和验证过程。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】