#mpc #crypto #integration-tests

mpc-ristretto

一个使用Ristretto群的库,用于执行安全的多方计算

1个不稳定版本

0.1.0 2023年6月25日

#1682 in 密码学

MIT/Apache

300KB
6.5K SLoC

MPC-Ristretto

此库在curve25519-dalek算术实现之上提供了一个抽象(仓库),允许在代数上基于秘密共享进行MPC计算。此外,此库还包括SPDZ风格的共享认证,以进行恶意安全的计算。

组织

库的核心位于src/,集成测试位于integration/。源文件夹的组织结构如下

  • network.rsnetwork/定义了基于QUIC(使用quinn)的P2P传输,其中两个对等点打开双向流来通信关于ScalarRistrettoPoint类型。
  • mpc_scalar.rsmpc_ristretto.rs分别定义了Dalek的ScalarRistrettoPoint的未认证(半诚实安全)包装器。这些实现覆盖了算术操作,使得这些操作的结果是底层结果的合法秘密共享。这包括使用Beaver Trick进行乘法。
  • authenticated_scalar.rsauthenticated_ristretto.rs定义了围绕MpcScalarMpcRistrettoPoint的认证包装器,在整个计算过程中维护SPDZ风格的MACs。这些包装器可以在认证提交/揭示交互中打开,确保其结果未被篡改。
  • commitment.rs定义了Scalar值(Pedersen)和RistrettoPoint值(SHA3_512哈希承诺)的承诺实现。
  • macros.rs定义了一系列宏,用于帮助实现借用值、包装值等算术。
  • beaver.rs定义了库期望通过其接收Beaver三元组的接口。由于预处理功能在很大程度上是一个基础设施负担,因此只提供了模拟实现。此库的使用者应实现适当的预处理功能。
  • fabric.rs定义了一个“MPC织物”,它实际上在网络上充当依赖注入层。也就是说,MpcFabric持有网络引用、beaver源实现和MAC密钥;允许库的使用者在不传递这些依赖的情况下分配秘密共享值。

测试

通过以下方式可以获取库中孤立部分的单元测试

cargo test --lib

此库的大部分测试最好使用真实通信来完成;因此,大多数测试都是集成测试。集成测试可以运行为

./run_integration.zsh

或者更直接地作为

docker compose up

依赖

~21–37MB
~639K SLoC