katastrofh/SNARK_LAB

GitHub: katastrofh/SNARK_LAB

SNARK_LAB 是一个用 Rust 编写的 SNARK 协议构建块研究原型,通过可读代码、测试向量、模糊测试和可视化工具让 Sumcheck、Zerocheck、PermCheck 及 IPA 多项式承诺等零知识证明核心机制变得可检查和可学习。

Stars: 2 | Forks: 0

# SNARK_LAB

status: research prototype release: v0.2.0-rc.2 language: Rust fuzzing: smoke and regressions visualizer: available license: MIT

研究原型。 非经审计的生产级安全软件。

**SNARK_LAB 是一个用于 SNARK 构建块(Sumcheck、Zerocheck、PermCheck 和 IPA 多项式承诺)的 Rust 协议实验室。** 它将交互式证明的数学原理与可执行的 Rust 代码、绑定到 transcript 的证明流程、公共测试向量、模糊测试证据、发布候选产物以及教育性的浏览器可视化工具连接起来。 目标很简单:让 SNARK 协议机制变得可检查。 ## 为什么这个代码库很重要 大多数 SNARK 学习资料只停留在方程式上。大多数生产级库将协议机制隐藏在 API 之后。 SNARK_LAB 介于两者之间: * 核心组件的可读 Rust 实现 * Fiat–Shamir transcript 排序 * Sumcheck、Zerocheck 和 PermCheck 流程 * IPA 多项式承诺研究路径 * 格式错误证明的拒绝测试 * 规范的证明/SRS 解码边界 * Fuzz 目标和 Fuzz 回归追踪 * 公共向量和参考比较 * 发布候选证据 * 用于协议流程的浏览器可视化工具 这个代码库是为希望了解 SNARK 组件如何相互配合的学生、研究人员、审查者和工程师构建的。 ## 当前状态 | 领域 | 状态 | | ---------------------------- | -------------------------------------------- | | Sumcheck | 已实现并测试 | | Zerocheck | 已实现并测试 | | PermCheck | 已实现并测试 | | IPA PCS 路径 | 作为研究原型实现 | | IPA 证明编解码器 | 经过 Fuzz 测试和回归测试 | | SRS 加载器/来源 | 已实现,带有生产级边界检查 | | 浏览器可视化工具 | 已实现 | | 公共测试向量 | 已实现 | | 发布证据 | 已实现 | | 当前发布候选版本 | `v0.2.0-rc.2` | | 外部审计 | 未完成 | | 生产级安全部署 | 不作保证 | ## 这是什么 SNARK_LAB 是: * 面向审查者的研究原型 * 协议学习实验室 * 可复现的 SNARK 组件测试平台 * 证据驱动的发布候选产物 * SNARK 数学与可执行协议代码之间的桥梁 ## 这不是什么 SNARK_LAB 不是: * 经过审计的、可部署的加密软件 * 主网就绪的加密基础设施 * 托管安全软件 * 外部审查的替代品 * 生产级 SRS 仪式 * 用于保护真实资金或共识关键系统的库 **请勿**将此代码库用于生产资金、资产托管、共识关键系统或安全关键型部署。 ## 快速开始 克隆代码库: ``` git clone https://github.com/katastrofh/SNARK_LAB.git cd SNARK_LAB ``` 运行完整的代码库检查门槛: ``` scripts/check-production-ready.sh ``` 运行所有 Rust 测试: ``` cargo test --workspace ``` 运行 IPA commit/open/verify 演示: ``` cargo run -p snark-lab-cli -- ipa-demo ``` 运行可视化工具: ``` cd web/visualizer npm ci npm run dev ``` 打开: ``` http://localhost:5173 ``` 为当前发布候选版本构建发布产物: ``` scripts/build-github-release-artifacts.sh v0.2.0-rc.2 ``` ## 协议图谱 | 协议/组件 | 用途 | | ---------------- | ------------------------------------------------- | | Sumcheck | 证明关于布尔超立方体上求和的声明 | | Zerocheck | 将约束满足归约为多项式零点检查 | | PermCheck | 检查多重集/置换一致性 | | 透明 oracle | 提供简单、可检查的开辟/验证流程 | | IPA PCS | 对多线性多项式进行承诺并证明开辟 | | SRS 工具 | 验证公共参数来源和产物边界 | | 交换格式 | 将教育性可视化工具与确定性示例连接起来 | ## 可视化工具截图 可视化工具展示了协议组件是如何相互配合的。

SNARK_LAB system flow visualizer SNARK_LAB IPA flow visualizer

SNARK_LAB sumcheck flow visualizer

## 证据和强化 | 证据层 | 位置 | | ------------------ | --------------------------------------------- | | 生产就绪检查门槛 | `scripts/check-production-ready.sh` | | GitHub 工作流 | `.github/workflows/` | | 发布候选证据 | `release-candidates/LATEST.md` | | 当前发布说明 | `release/v0.2.0-rc.2.md` | | GitHub 发布页面草稿| `release/GITHUB_RELEASE_PAGE_v0.2.0-rc.2.md` | | 公共向量 | `test-vectors/` | | 参考比较 | `docs/reference-implementation-comparison.md` | | Fuzz 目标 | `fuzz/fuzz_targets/` | | Fuzz 冒烟测试证据 | `fuzz/smoke-evidence/` | | Fuzz 崩溃回归 | `fuzz/regressions/` | | SRS 策略 | `srs/PRODUCTION_SRS_POLICY.md` | | 部署指南 | `docs/production-deployment-guide.md` | | 审计资料包 | `audits/packet/README.md` | ## 代码库布局 ``` SNARK_LAB/ ├── crates/ │ ├── field/ # default BLS12-381 scalar field helpers │ ├── multilinear/ # dense multilinear extensions and equality basis │ ├── transcript/ # Merlin Fiat–Shamir abstraction │ ├── sumcheck/ # generic transcript-bound Sumcheck │ ├── zerocheck/ # transcript-ordered equality reduction │ ├── permcheck/ # product/rational permutation fingerprints │ ├── oracle/ # transparent oracle + IPA PCS infrastructure │ ├── interchange/ # educational browser JSON verifier │ ├── cli/ # transcript verifier, IPA demo, SRS validator │ └── benches/ # runtime and logical I/O benchmarks ├── web/visualizer/ # React + TypeScript protocol workbench ├── examples/ # guided examples and transcripts ├── test-vectors/ # deterministic public regression vectors ├── fuzz/ # fuzz targets, smoke evidence, regressions ├── docs/ # protocol notes and evidence documentation ├── release/ # release notes and GitHub release pages ├── release-candidates/ # release-candidate evidence ├── scripts/ # local gates and artifact tooling └── .github/workflows/ # CI, audit, and release workflows ``` ## 已实现的协议领域 ### Sumcheck * 绑定到 Fiat–Shamir transcript 的轮次挑战 * 多线性表支持 * 确定性证明序列化 * 格式错误轮次拒绝测试 * 透明 oracle 集成路径 ### Zerocheck * 在引入混合挑战之前的约束表绑定 * 归约到 Sumcheck * 拒绝非零约束表 * 教育性可视化工具流程 ### PermCheck * 乘积/有理数指纹 * 绑定到 transcript 的 β 和 γ 挑战 * 显式的分母极点错误 * 置换/变异拒绝测试 ### IPA 多项式承诺路径 目前 IPA 路径包括: * 类型化曲线点封装 * 规范的压缩点序列化 * 生成元基验证 * 承诺等式 * 证明者承诺路径 * 求值基构造 * 开启声明绑定 * 归约轮次状态 * L/R 轮次承诺计算 * 向量折叠 * 生成元折叠 * 证明者开启循环 * 验证者归约循环 * 最终承诺关系检查 * 证明结构验证 * 证明编解码器 * 盲化开启扩展 * 集成的 commit/open/verify API * SRS 来源验证 * SRS 文件加载器 * SRS 验证 CLI * 负面证明夹具 * 随机化往返测试 * Fuzz 回归测试 受支持的研究路径是类型化的集成 IPA 后端。不受支持的加密配置会显式失败,而不会假装通过验证。 ## SRS 来源边界 生产级 SRS 材料必须具备来源。 接受的源类型: ``` ExternalTrustedSetup HashToCurveDerivation ``` 拒绝的源类型: ``` KnownDiscreteLogTestFixture ``` 规范的 SRS 摘要绑定: ``` digest domain version variable count polynomial generators evaluation generators blinding generator ``` 加载器在验证后仅返回已验证的 SRS 材料。 该代码库**不**保证测试夹具生成器是生产级 SRS 材料。 ## 设计原则 1. **挑战之前先发消息。** Fiat–Shamir 挑战仅在绑定相关声明和先前的证明者消息之后才会导出。 2. **没有虚假的成功路径。** 不受支持的加密路径会返回显式错误。 3. **检查过的曲线材料。** IPA 曲线点拒绝单位点,并使用规范的压缩序列化。 4. **SRS 来源是强制性的。** 生产级 SRS 材料必须由外部提供,或通过可审计的来源推导。 5. **教育性组件保持明确标记。** 浏览器和交换格式示例不会与 Rust 加密路径混淆。 6. **格式错误的输入会直接失败。** 解码器、证明检查和 CLI 验证器会拒绝损坏的数据。 7. **没有不安全的 Rust。** 生产就绪检查门槛会拒绝不安全的 Rust。 8. **测量结果和模型结果保持独立。** 运行时测量和逻辑 I/O 模型不会被混为一谈。 ## 测试和 CI 当前的检查包括: * 单元测试 * 负面的格式错误证明测试 * 随机化的 IPA 往返测试 * CLI 集成测试 * 规范的编解码器测试 * 公共测试向量检查 * 独立的参考比较 * Fuzz 目标编译检查 * Fuzz 冒烟测试证据检查 * Fuzz 崩溃回归测试 * 可视化工具生产构建 * GitHub 生产就绪工作流 * Linux/macOS CI 矩阵 * RustSec cargo-audit 工作流 * 针对可视化工具的 npm audit * 拒绝不安全的 Rust * 拒绝可视化工具的 `Number.isNaN` 隐患 运行本地检查门槛: ``` scripts/check-production-ready.sh ``` ## 建议的阅读顺序 快速审查路径: 1. `README.md` 2. `REVIEWERS.md` 3. `docs/project-positioning.md` 4. `docs/final-repo-health-report.md` 5. `docs/production-readiness-index.md` 6. `docs/security-review-checklist.md` 7. `docs/paper-style-technical-overview.md` 8. `release/v0.2.0-rc.2.md` 9. `web/visualizer/` 协议内部细节: 1. `crates/sumcheck/` 2. `crates/zerocheck/` 3. `crates/permcheck/` 4. `crates/oracle/` 5. `crates/cli/` 6. `test-vectors/` 7. `fuzz/` ## 基准测试 运行基准测试驱动程序: ``` cargo run --release -p snark-lab-benches -- 18 8 3 ``` 基准测试二进制文件包含 PermCheck、Sumcheck 和 IPA commit/open/verify 的计时。基准测试输出区分了测量到的运行时和建模的逻辑 I/O。 ## 发布候选版本 当前发布候选版本: ``` v0.2.0-rc.2 ``` 参见: ``` release/v0.2.0-rc.2.md release/GITHUB_RELEASE_PAGE_v0.2.0-rc.2.md release/publication/v0.2.0-rc.2/README.md ``` 发布候选版本用于协议审查、产物审查、可复现性检查和审计准备。它们不是生产级安全的部署版本。 ## 安全策略 参见: ``` SECURITY.md docs/threat-model-and-security-notes.md docs/security-review-checklist.md docs/security-proof-sketch.md ``` 此代码库未经过审计。请勿将其用于生产资金、主网系统、托管、共识关键型基础设施或安全关键型部署。 ## 路线图 参见: ``` ROADMAP.md docs/project-positioning.md docs/final-repo-health-report.md ``` 近期工作: * 外部审查 * 更长时间的 Fuzz 活动 * 基准测试报告 * 内存分析 * 侧信道审查笔记 * 协议组合实验 * 更清晰的 HyperPlonk/Scribe 风格流水线集成 ## 许可证 MIT
标签:Rust, SNARK, 交互式证明, 可视化工具, 可视化界面, 多项式承诺, 密码学, 手动系统调用, 暗色界面, 网络流量审计, 通知系统, 零知识证明