#编程语言 #混淆电路 #安全多方计算 #安全计算 #电路描述 #函数式编程

bin+lib garble_lang

基于混淆电路的安全多方计算图灵不完备编程语言

11 个不稳定版本 (3 个破坏性更新)

0.4.0 2024年7月29日
0.3.0 2024年6月5日
0.2.0 2024年1月23日
0.1.8 2023年2月8日
0.1.2 2022年7月27日

56编程语言 中排名

Download history 141/week @ 2024-06-02 12/week @ 2024-06-09 4/week @ 2024-06-16 1/week @ 2024-06-23 198/week @ 2024-07-28 2/week @ 2024-08-04

每月下载量 200 次
3 个crate中使用(通过 tandem_garble_interop

MIT 许可证

390KB
9K SLoC

Garble 语言

Garble 是一种简单的编程语言,用于使用 安全多方计算混淆电路。Garble 生成的电路指定了一个 函数,每个输入来自不同的参与者,所有参与者协同计算输出,这样没有任何参与者能够学习到其他参与者的输入。Garble 是静态类型的、低级别的、纯函数式,并使用大量受Rust启发的语法。

所有用Garble编写的程序都是故意图灵不完备的(只支持有限递归),保证它们只能使用 ANDXORNOT 门电路(不使用任何类型的具有状态的触发器或寄存器)编译成电路。以下是使用Garble解决 百万富翁问题 的示例

// A function for solving Yao's Millionaires' problem:

enum Richest {
    IsA,
    IsB,
    Tie,
}

pub fn main(a: u64, b: u64) -> Richest {
    if a > b {
        Richest::IsA
    } else if b > a {
        Richest::IsB
    } else {
        Richest::Tie
    }
}

有关更多示例,请参阅 语言之旅

如何使用 Garble

Garble 生成的电路旨在使用一个加密安全的MPC引擎执行,该引擎不是由这个crate提供的。Garble 对MPC引擎的细节一无所知,只假设引擎支持使用 ANDXORNOT 门的混淆电路。对于本地开发和测试,Garble 支持直接和不加密地评估生成的电路,所有输入均由本地用户提供。

要执行百万富翁问题示例,首先安装 garble 工具,检出存储库以获取示例程序,然后在存储库目录中运行函数

$ cargo install garble_lang
$ git clone [email protected]:sine-fdn/garble-lang.git
$ cd garble-lang
$ garble run garble_examples/millionaires.garble.rs --function=main 10000000u64 10000u64
Richest::IsA
$ garble run garble_examples/millionaires.garble.rs --function=main 100u64 5000000u64
Richest::IsB
$ garble run garble_examples/millionaires.garble.rs --function=main 1000u64 1000u64
Richest::Tie

您也可以使用 garble check 后跟文件名来在不运行程序的情况下进行类型检查。

如果输入或元数据包含空格,您可能需要用单引号将其包裹起来。

此存储库的架构

Garble 编译器相对简单直接,可以将程序 &str 转换为 circuit::Circuit(或者在扫描/解析/类型错误时中断)。以下是其不同步骤及其模块(步骤 1-4 在编译时发生,步骤 5 在运行时发生):

  1. scan.rs 将程序 &str 划分为 token::Token 序列。
  2. parse.rs 解析 token::Token 序列,生成无类型的 ast::Program
  3. check.rs 对无类型的 ast::Program 进行类型检查,返回有类型的 ast::Program
  4. compile.rs 将有类型的 ast::Program 转换为 circuit::Circuit
  5. eval.rs 使用本地提供的输入执行 circuit::Circuit

依赖

~0–330KB