3 个版本 (破坏性更改)

0.3.0 2022 年 11 月 30 日
0.2.1 2022 年 11 月 30 日
0.1.0 2022 年 11 月 28 日

#1495 in 密码学

MIT 许可证

170KB
3K SLoC

Tandem HTTP 客户端

这个包提供了一个充当评估器并运行 Tandem 引擎 的 HTTP 客户端。它连接到一个 HTTP 服务器,该服务器应充当贡献者的角色。

评估器始终触发 SMPC 会话,同时发送 metadata 和评估器的输入来影响服务器对贡献者输入的选择。

概述

这个包包括

CLI 客户端

CLI 客户端提供了一个快速简便的方式来运行 Tandem 引擎。为了使用它,必须已经运行一个 Tandem HTTP 服务器。如果没有指定服务器,它将默认为 SINE 的示例服务器,位于 https://echo-server.sine.dev/

使用以下命令安装 CLI 客户端

cd tandem_http_client
cargo install --features="bin" --path .

安装 CLI 后,可以使用以下结构的命令运行 Tandem

tandem_http_client \
# Path to a Garble program file
<PROGRAM> \
# Options, including --url <URL> to set the URL of a Tandem http server.
[OPTIONS] \
# Name of the Garble function to be executed
--function <FUNCTION> \
# Garble input literal for this (local) party
--input <INPUT> \
# Metadata to send to the server (as plaintext) to influence the contributor's input
--metadata <METADATA>

有关更多信息,请运行 tandem_http_client --help

假设一个 Tandem HTTP 服务器正在端口 8000 上监听,以下是 CLI 客户端的示例用法

tandem_http_client tests/.add.garble.rs \
--function main \
--url https://127.0.0.1:8000/ \
--input 110u8 \
--metadata 57u8

针对 WebAssembly 的函数

这个包包含两个针对 WebAssembly 的函数,允许轻松地将 Tandem 引擎与 JavaScript 集成。有关从 Rust 编译到 WebAssembly 的详细信息,请参阅 WebAssembly 的官方文档

这些函数包括

from_object

解析并检查 Garble 字面量在 JSON 表示形式中作为 Tandem 数据(MpcData)的类型。

to_literal

将 Tandem 数据(MpcData)作为 Garble 字面量在 JSON 表示形式中返回。

沙盒

这个包还提供了一个简单的 Web 应用程序,用于在开发过程中运行和测试 Garble 程序。

游乐场可用,运行在简单的“echo服务器”上。这里可以访问。

它也可以在本地运行,此时服务器可以基于配置的处理程序。有关如何在本地运行游乐场应用的说明,请见下文。下面

playground sceenshot

游乐场有两个主要组件,共同提供运行Tandem引擎所需的数据。这里

代码编辑器
Code editor screenshot

在这里,您可以编写要测试的Garble函数。例如,代码编辑器中有一个预写的函数,它接受两个32位有符号数字并返回它们的和。要了解更多关于Garble及其语法的信息,请参阅语言之旅

数据表单
Screenshot 2022-11-03 at 09 23 24

在第一个字段中,写入MPC程序(在代码编辑器中编写)中要执行的函数的名称。在提供的示例中,这应该是main

在第二个字段中,写入客户端传递给服务器的作为明文以影响服务器选择贡献者输入的元数据。如果使用简单的“echo服务器”,则此元数据应该是贡献者的输入。

在第三个字段中,写入评估者的输入,即来自客户端并保持私密的输入。这应该是一个Garble文字。在提供的示例中,它应该是一个有符号的32位32数字,例如-2i32请注意,在Garble中数字的类型后缀必须始终指定

点击Compute将启动Tandem会话并返回计算值。在提供的示例中,它将是一个有符号的32位32数字,例如-1i32。如果出现问题,将在Compute按钮右侧显示红色错误消息。

本地运行

在本地运行游乐场允许用户在简单的“echo服务器”和基于配置的处理程序的服务器之间进行选择。有关如何配置后者的说明,请见这里。以下是如何在本地运行游乐场的说明。

1. 启动服务器

使用以下命令构建和安装由tandem_http_server提供的示例服务器。

cd tandem_http_server
cargo install --features="bin" --path .

如果您想运行基于处理程序的服务器,请确保在Tandem.toml文件中包含它们。在同一目录中,您还必须包含一个包含要运行的Garble程序的program.garble.rs文件。在继续之前,请切换到该目录。

使用以下命令在https://127.0.0.1:8000上运行示例服务器。

tandem_http_server

2. 服务本地index.html

为了便于使用,这个包包括一个包含构建wasm blob和本地服务index.html文件所需命令的build.sh文件。这里

cd tandem_http_client
sh build.sh

游乐场客户端将在https://127.0.0.1:9000上提供服务。

在重新构建wasm模块后,可能需要清除浏览器缓存。

使用基于处理程序的服务器使用游乐场

当使用基于处理器的服务器时,请确保将元数据传递,而不是贡献者的输入,而是与该输入相关联的 key,如 Tandem.toml 文件中指定(例如,_)。

此外,请确保 program.garble.rs 中的 Garble 程序与代码编辑器中的完全相同。 请注意,空格足以使这些被视为不同。

依赖关系

~8–22MB
~374K SLoC