4 个版本 (2 个破坏性更新)

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

#670 in 密码学


3 crates 中使用

MIT 许可证

115KB
2.5K SLoC

Tandem

Tandem 是一个 SMPC 引擎,它将 WRK17[^1] 协议作为非阻塞状态机(FSM)实现,具有 OT 扩展和基于 ALSZ13[^2] 的优化,以及基于 ABKLX21[^3] 的基本 OT 实现。

目前,Tandem 只支持 两方 计算。

请注意

当前版本仍为 alpha 版本。因此,在使用时请谨慎。尽管该引擎是安全的,但不应将高度敏感的数据依赖于它。

如果您发现任何错误,遇到意外行为或有改进 Tandem 的建议,请通过打开问题来告知我们。

引擎的高级描述

以下是对 Tandem 引擎工作方式的非常高级的描述。有关更详细的方法,请参阅代码级别的文档,从此处开始。

Tandem 引擎实现的协议基于两个实体之间加密消息的交换: ContributorEvaluatorContributor 为 MPC 协议提供输入,并始终发送第一条消息。 Evaluator 评估电路(及其输入)并解密输出。

ContributorEvaluator 需要三个参数进行初始化:一个 Garbled Circuit,输入门(布尔值的数组)和一个 RNG(在这种情况下为 ChaCha20Rng)。当 Contributor 初始化时,其原始状态被确定并生成一个加密消息。 Evaluator 使用原始状态初始化但没有消息。相反,它等待来自 Contributor 的消息。

协议开始于ContributorEvaluator发送初始消息。根据接收到的消息,EvaluatorContributor发送另一个加密消息并进入新状态。接收到来自Evaluator的消息后,Contributor发送一条新消息并进入新状态。这种来回通信总共发生六次。当Evaluator收到最终消息时,输出被解密,协议结束。

[^1]: Wang, Ranellucci, and Katz (2017). [^2]: Asharov, Lindell, Schneider, and Zohner (2013) [^3]: Abdalla, Barbosa, Katz, Loss, and Xu (2021)

依赖项

~3.5–4.5MB
~108K SLoC