翼方健数丨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完成安全多方计算,目前支持以下基础运算:
后续将会开源更多安全多方计算功能组件。 二、 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结构体,主要参数列表如下:
三、 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 |