#mpc #crypto

nightly ark-mpc

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

3个版本

0.1.2 2023年11月8日
0.1.1 2023年10月11日
0.1.0 2023年10月10日

加密学中排名1246

MIT/Apache

490KB
10K SLoC

ark-mpc

示例

ark-mpc提供了一种恶意安全的SPDZ风格的双方安全计算框架。电路在运行时动态构建,通过重载MPC类型的算术运算符,以下示例中,各方共享一个值,并共同计算乘积。

use ark_mpc::{
    algebra::scalar::Scalar, beaver::SharedValueSource, network::QuicTwoPartyNet, MpcFabric,
    PARTY0, PARTY1,
};
use ark_curve25519::EdwardsProjective as Curve25519Projective;
use rand::thread_rng;

type Curve = Curve25519Projective;

#[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::<Curve>::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 --all-features

此库的大部分测试最好用真实通信来完成;因此,大多数测试是集成测试。集成测试可以按以下方式运行:

./run_integration.zsh

或更直接地作为

docker compose up

依赖

~20–36MB
~586K SLoC