翼方健数丨XSCE安全多方计算开源技术介绍

发表时间:2022-10-11 14:31

一、 XSCE安全多方计算开源技术简介

XSCE基础算法基于二次开发后的MP-SPDZ开源库实现,编写、调优基础算法电路文件,XSCE算法框架调用底层计算协议同时执行优化后的电路文件,完成相应计算。


MP-SPDZ主要流程如下:

图片

(MP-SPDZ框架主要流程)


1、用户需要根据需求自行编写电路文件,电路文件包含计算逻辑,目前MP-SPDZ电路编写语法为类python语法,同时可以支持Bristol Fashion(SCALE-MAMBA支持电路语法);


2、所有参与方使用安全多方计算框架提供的电路编译器编译电路文件,并进行编译优化,最终生成二进制字节码,编译过程需要保证电路文件相同并且编译方式也需要保持一致;


3、然后使用安全多方计算协议(可执行程序)运行电路编译出的字节码,同时输入相关数据和部分预处理参数;


4、按照安全多方计算协议执行计算,并最终输出计算结果。


XSCE集成了MP-SPDZ主要功能模块,目前支持MP-SPDZ协议包括诚实-多数诚实协议(shamir)、半诚实-多数恶意协议(semi-mascot)、非诚实-多数恶意协议(mascot),通过在协议上层编写适配层,兼容XSCE输入和输出方式,能够通过参数和接口调用指定协议,进行安全多方计算。


XSCE安全多方计算主要流程如下:


图片


1、输入数据和接口参数,调用XSCE安全多方计算协议;


2、使用安全多方计算协议(可执行程序)运行的字节码,同时输入相关数据和部分预处理参数;


3、按照安全多方计算协议执行计算,并最终输出计算结果。


XSCE提供编译及优化的电路和适配层接口,调用底层MP-SPDZ完成安全多方计算,目前支持以下基础运算:

  • 2方加法(a+b)

  • 2方乘法(a*b)

  • 2方比较(a<b)

  • 2方中位数(给定两个数组,寻找中位数)

  • 2方方差(给定两个数组,计算方差)

  • 3方加法(a+b+c)

  • 3方乘法(a*b*c)

  • 3方中位数(给定三个数组,寻找中位数)

  • 3方方差(给定三个数组,计算方差)

后续将会开源更多安全多方计算功能组件。


二、 XSCE安全多方计算开源技术简易教程


1、构建项目


XSCE在Linux系统上测试通过,当前版本依赖于libOTe库,环境最低配置要求:Ubuntu 20, c++ 17, cmake 3.20, python3, 最少指令集要求: aes sse2 sse3 ssse3 sse4.1 sse4.2 avx avx2 avx256 avx512f pclmul bmi2 adx mmx。


· 源码编译

1) 下载源码

git clone https://github.com/paritybit-ai/XSCE

2) 编译

进入项目根目录,执行命令:

./build.py libote spdz xsce

3) 安装

安装到系统路径:

./build.py install

安装到指定路径:

./build.py install=INSTALL_DIR


· Docker编译

1) 下载源码

git clone https://github.com/paritybit-ai/XSCE

2) Docker编译

进入项目根目录构建算法库镜像:

./build.py docker=images

镜像中的/usr/local目录已包含算法库,运行镜像,登录镜像后,可直接使用该目录下的库进行算法集成。如果要在镜像中运行demo,可以下载源码后,执行./build.py xsce 生成demo程序。


2、运行安全多方计算demo


编译完成后,创建测试目录:

mkdir test_dir

cp -rf XSCE_PATH/build/bin/arithmetic XSCE_PATH/src/arithmetic/Programs test_dir/


运行两方加法运算:

1、party0运行命令: ./arithmetic -c 2 -r 0 -p 127.0.0.1:7878 add2

图片

2、party1运行命令: ./arithmetic -c 2 -r 1 -p 127.0.0.1:7878 add2

图片

0方输入为:88.8731,1方输入为:746.562,计算结果为:835.43509。

图片


运行三方加法运算:

由于使用诚实多数协议(Shamir),为确保安全,还需要设置ssl证书,然后将证书拷贝至测试目录。


cd XSCE_PATH/third_party/MP-SPDZ

./Scripts/setup-ssl.sh [<number of parties> <ssl_dir>]

mkdir test_dir/Player-Data

cp XSCE_PATH/third_party/MP-SPDZ/ssl_dir/* test_dir/Player-Data/

cd test_dir


运行3方加法:

1、party0: ./arithmetic -c 3 -r 0 -p 127.0.0.1:7878 add3

图片

2、party1: ./arithmetic -c 3 -r 1 -p 127.0.0.1:7878 add3

图片

3、party2: ./arithmetic -c 3 -r 2 -p 127.0.0.1:7878 add3

图片

0方输入为:547.081,1方输入为:284.006,2方输入为:20.9303,计算结果为:852.01729。

图片


3、接口调用


也可通过接口方式调用XSCE安全多方计算模块,XSCE对外提供接口如下:


// two-party computation

EXPORT_SYM int runAdd2(SPDZAlg *spdzalg);   //两方加法

EXPORT_SYM int runMul2(SPDZAlg *spdzalg);   //两方乘法

EXPORT_SYM int runCmp2(SPDZAlg *spdzalg);   //两方比较

EXPORT_SYM int runVar2(SPDZAlg *spdzalg);   //两方方差

EXPORT_SYM int runMid2(SPDZAlg *spdzalg);   //两方中位数

// three-party computation

EXPORT_SYM int runAdd3(SPDZAlg *spdzalg);   //三方加法

EXPORT_SYM int runMul3(SPDZAlg *spdzalg);   //三方乘法

EXPORT_SYM int runVar3(SPDZAlg *spdzalg);   //三方方差

EXPORT_SYM int runMid3(SPDZAlg *spdzalg);   //三方中位数


传入参数为SPDZAlg结构体,主要参数列表如下:


  • role:   参与方id,从0开始编号.

  • alg_index_str:   算法名称编号,目前支持add2、mul2、cmp2、var2、mid2、add3、mul3、var3、mid3.

  • endpointlist_spdz: 使用的终端ip、端口.

  • input: 输入值向量,类型为double.

  • output_file: 输出文件.


三、 XSCE安全多方计算开源技术开源计划


1、更多计算类型(逻辑运算、矢量运算等);

2、参数灵活设置(参与方个数、多线程、协议选择);

3、支持更多安全多方计算协议及协议选择。


四、 MP-SPDZ二次开发


XSCE集成了MP-SPDZ开源库,对MP-SPDZ开源库进行二次开发,新增数据以内存的方式调用算法库,与现有的文件方式相比较,减少了数据IO操作,可以更高效传递数据;新增端口复用功能,使MP-SPDZ库可以共用XSCE框架的通信端口,减少端口资源的占用,在多任务情况下,有效避免端口冲突情况;新增计算多方通过网关进行通信的功能,使计算多方在TLS和非TLS非对称网络场景下也能参与计算任务;优化多任务并发的功能,使参与计算的多方可以同时有多个任务并行计算;优化部分配置参数,以便更友好的提供算法服务。更多的功能正在持续开发,并保持与社区的沟通交流,相关功能会逐步开源。


五、 XSCE开源地址


Github地址:https://github.com/paritybit-ai/XSCE

Gitee地址:https://gitee.com/basebit-ai/XSCE



分享到: