portal-co/volar
GitHub: portal-co/volar
Volar 是一个用 Rust 编写的程序相关密码学库与编译器工具链,旨在提供可审计的零知识证明、混淆电路与多方安全计算实现,并支持跨语言编译部署。
Stars: 1 | Forks: 1
# volar
一个用于**程序相关密码学**的 Rust 库和编译器工具链——涵盖零知识证明、混淆电路、多方安全计算以及支撑它们的域算术基元。该项目处于早期阶段,目前正在开源环境中积极开发。
## 它是什么
**程序相关密码学**是一系列技术的总称,允许程序在不泄露私有输入的情况下证明有关其自身执行的信息:零知识证明、混淆电路、多方安全计算、Oblivious RAM、见证加密及类似构造。这些技术已存在于研究文献中,但采用率很低,因为缺乏生产级的实现,信任难以建立,且跨语言部署极其痛苦。
Volar 的目标是:
1. **实现** 以可审计的、`no_std` 的 Rust 编写程序相关密码学,从团队最熟悉的构造开始,并逐步向外扩展。
2. **编译** 将这些实现编译到其他目标(动态 Rust、TypeScript、C),以便相同的密码学内核能够在浏览器、服务器和嵌入式系统中运行,而不会出现实现偏差。
3. **公开开发与完善** —— 新的构造首先进入 Experimental 可靠性层级,通过审查后,逐步晋升至 Normal 或 Hazmat。被证明存在缺陷的构造将被保留为 Insecure,并附带解释原因的分析。
本仓库正是试图构建这一基础的努力:提供一个可用的 Rust 密码学库,并配备一个能够将核心 spec 转译为其他目标(动态 Rust 和 TypeScript)的编译器。
## 仓库结构
```
crates/
spec/
volar-primitives/ Field element types: Bit, Galois (GF(2^8)), Galois64, Galois128, Galois256, etc.
volar-common/ Shared primitives: hash commitments, length-doubling PRG
volar-spec/ Core protocol specifications (VOLE ZK, garbled circuits, MPC types)
volar-dyn/ Dynamic (heap-allocated, runtime-sized) mirror of volar-spec
volar-spec-dyn/ Auto-generated dynamic types from volar-compiler; also a manual reference
ir/
volar-ir/ Two IRs: Volar IR (SSA, field-aware) and Boolar IR (AND/XOR/NOT boolean circuits)
vaffle/ Stub crate; placeholder for WAFFLE→VAFFLE translation (not implemented)
compiler/
volar-compiler/ Parses volar-spec Rust source via syn, emits dynamic Rust or TypeScript
volar-weaver/ BIrBlocks → garbled-circuit and VOLE ZK proof code generation
```
## 已实现的功能
**volar-common**:`hash_commitment`(通过 `H(message || nonce)` 进行承诺-打开)。`length_doubling`(一种基于 digest 的 PRG,每一步输出长度翻倍,用作 ABO 生成的 PRF 主干)。
**volar-spec**:主要的密码学内核,目前实现了两种构造。
*基于 VOLE 的零知识证明(Quicksilver 风格):*
- `Delta` 和 `Q`:验证者侧的 VOLE 类型。`Delta` 是验证者的全局秘密;`Q` 是验证者的份额。
- `Vope`:在长度为 N 的向量上对 Δ 求值的 K 次多项式。这是承诺在证明者一侧的体现。
- `BitVole`:基于 GF(2) 的子域 VOLE,其中 `u` 是比特向量,`v` 是扩展域向量。
- `field_rotate`:对 `BitsInBytes`/`BitsInBytes64` 数组进行位级别的旋转和提取操作,用于 Galois 扩展提升技术(将位承诺映射到 GF(2^k) 以进行类 AES 操作)。
- `byte_gen`(ABO 协议):“几乎为位 OT”生成协议的证明者和验证者侧。实现了 2-party 和 N-party(`multi_party` 特性)两种变体,但 N-party 协议存在已知的可靠性警告。
- `prove`:Quicksilver 风格的 VOLE AND 门基元(`vole_and_prover_step`、`vole_and_verifier_check`)。使用全 Rust 子集编写,可由编译器解析。weaver 从这些基元中生成证明者和验证者电路函数。
*混淆电路:*
- `garble`:一种基于 VOLE 类型的半门混淆电路方案 (Zahur-Rosulek-Evans 2015)。weaver 从布尔电路生成 evaluator、garbler、GarbledCircuit 和 EvalSetup 代码。
*MPC:*
- `mpc`:仅为桩代码——包含 `AllParties` 和 `OtherParties` 类型骨架,尚无协议语义。
**volar-dyn**:`volar-spec` 类型的动态(堆分配)重新实现,使用 `Vec` 加上运行时长度见证者来替代 `GenericArray`。为手工编写;旨在作为参考。
**volar-spec-dyn**:一个可以包含自动生成的动态类型(由 `volar-compiler` 生成)的 crate,受 `generated` 特性控制。还包含手工编写的 `core_types` 作为参考。
**volar-ir**:两种中间表示。
**vaffle**:空的 `no_std` crate;作为计划中的 WAFFLE 到 VAFFLE 转换层的占位符。
- 通过 `print_module_rust_dyn` 生成的动态 Rust(使用 `Vec` + 运行时见证者替换 typenum 长度数组)
- 通过 `print_module_typescript` 生成的 TypeScript
- 类型清单文件(`.volar.d`),用于跨 crate 编译,以 `0xFF` 前缀存储,以防止它们被解析为普通 Rust。
`volar-codegen` 二进制程序驱动此流水线。清单系统捕获 struct/trait/impl 签名(带有 `todo!()` 函数体),以便在不重新解析实现细节的情况下对依赖项进行类型检查。
## 尚未实现的功能
- 从 witness/secret 数据构建 VOLE 承诺
- 一致性检查(Hypercube 技术的替代/补充方案)
- 多轮交互式证明
- WAFFLE 到 VAFFLE 的转换
- Volar IR movfuscation 过程
- 简洁证明
- MPC 协议(仅存在类型桩)
- 嵌套证明/验证
- VOLE 设置(基于 OT 的相关性生成)
- 批量 Quicksilver 验证(随机挑战版本)
- 其他 ZK 证明系统(STARKs、SNARKs、sigma 协议)
- Oblivious RAM
- 见证加密(一个失败的尝试保留在 `xsat.rs.insecure` 中)
## 技术说明
- VOLE 关系在二进制扩展域上表示为 `u·Δ + v = q`。加法为 XOR;乘法为无进位乘法。
- Hypercube 技术用于从单次 ABO 生成中导出独立的 VOLE 承诺。
- 所有 `volar-spec` crate 均为 `#![no_std]`,且仅依赖于 RustCrypto 生态系统中的 `cipher`、`rand`、`digest` 以及 `typenum`/`generic-array`。
- `volar-spec` 上的 `multi_party` 特性将 2-party 协议扩展为 N-party;N-party ABO 协议存在已知的可靠性警告。
- 代码使用 `@reliability` 标签(`normal`、`experimental`、`hazmat`)和 `@ai` 标签进行注释,后者指示了 AI 在编写过程中的参与情况。
## 许可证
CC0-1.0 AND MIT AND Apache-2.0
*AI 辅助*
标签:可视化界面, 通知系统