#mpc #crypto #random

nightly mpc-stark

恶意安全 SPDZ 风格的两方安全计算

5 个版本

0.2.4 2023年8月25日
0.2.3 2023年8月25日
0.1.0 2023年7月22日

1404密码学

Download history 32/week @ 2024-04-02

每月下载量 293

MIT/Apache

395KB
8K SLoC

MPC-Stark

示例

mpc-stark 提供了一个恶意安全的 SPDZ 风格的两方安全计算框架。电路是即时构建的,通过重载 MPC 类型的算术运算符,以下示例中,每一方共享一个值,然后他们一起计算乘积。

use mpc_stark::{
    algebra::scalar::Scalar, beaver::SharedValueSource, network::QuicTwoPartyNet, MpcFabric,
    PARTY0, PARTY1,
};
use rand::thread_rng;

#[tokio::main]
async fn main() {
    // Beaver source should be defined outside of the crate and rely on separate infrastructure
    let beaver = BeaverSource::new();

    let local_addr = "127.0.0.1:8000".parse().unwrap();
    let peer_addr = "127.0.0.1:9000".parse().unwrap();
    let network = QuicTwoPartyNet::new(PARTY0, local_addr, peer_addr);

    // MPC circuit
    let mut rng = thread_rng();
    let my_val = Scalar::random(&mut rng);
    let fabric = MpcFabric::new(network, beaver);

    let a = fabric.share_scalar(my_val, PARTY0 /* sender */); // party0 value
    let b = fabric.share_scalar(my_val, PARTY1 /* sender */); // party1 value
    let c = a * b;

    let res = c.open_authenticated().await.expect("authentication error");
    println!("a * b = {res}");
}

测试

通过以下方式提供库的独立部分的单元测试:

cargo test --lib

本库的大部分测试最好与实际通信结合进行;因此,大多数测试都是集成测试。集成测试可以运行如下:

./run_integration.zsh

或者更直接地作为:

docker compose up

依赖项

~20–35MB
~575K SLoC