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 辅助*
标签:可视化界面, 通知系统