SPDZ是一个安全多方计算的开源库。里面包含了各种技术实现的安全多方计算,例如混淆电路、秘密分享、OT、同态。功能比较全,而且是持续维护的开源库。主体语言是python,众所周知,python是世界最好的语言。在此基础上定义了很多新的关于MPC的类和库,具体可查看用户手册。
官方文档是:https://github.com/data61/MP-SPDZ 对spdz库进行了详细介绍,以及一些基础的安装编译命令
官方源代码:https://github.com/data61/MP-SPDZ/releases
官方用户手册:Welcome to MP-SPDZ’s documentation! — MP-SPDZ documentation 详细记录了spdz提供的各种类,函数,变量等。
大家可以参照这三个网址进行学习。
本篇博文想要实现一个简单的三方求和程序,来展示一个SPDZ的多方计算使用流程。
首先要安装所依赖的工具库
apt-get install automake build-essential git libboost-dev libboost-thread-dev libntl-dev libsodium-dev libssl-dev libtool m4 python3 texinfo yasm
这个是官方提供的命令,一次性安装几乎所有需要的工具库。所有的工具库在官方文档也有列出:
在下载好源代码后,切换到源代码文件夹。
下载好基础库后,对spdz库进行编译:
Scripts/tldr.sh
官方提供了一个测试程序,可以跑一跑试一试:这个代码内容就是各种运算的小测试。
./compile.py tutorial
echo 1 2 3 4 > Player-Data/Input-P0-0
echo 1 2 3 4 > Player-Data/Input-P1-0
Scripts/mascot.sh tutorial
实现简单的三方求和:
1.在Programs/Source文件夹内新建一个源代码文件testgp.mpc(后缀名是.mpc):我用的sublime text进行编辑,用vim也行
subl Programs/Source/testgp.mpc
编辑内容:
a = sint.get_input_from(0)
b = sint.get_input_from(1)
c = sint.get_input_from(2)
sum = a + b + c
print_ln('Results =%s',sum.reveal())
保存退出。
2. 编译程序:testgp是你的程序文件名
./compile.py -B 32 testgp
3. 生成证书文件,3代表三方计算。
Scripts/setup-ssl.sh 3
4. 写入三方数据
echo 11 > Player-Data/Input-P0-0
echo 12 > Player-Data/Input-P1-0
echo 13 > Player-Data/Input-P2-0
5.开三个新终端模拟三方计算,进行运算,得到结果:
./shamir-bmr-party.x -N 3 0 testgp
./shamir-bmr-party.x -N 3 1 testgp
./shamir-bmr-party.x -N 3 2 testgp
结束。
这个实例很简单,这个执行程序是基于秘密分享技术进行运算的,实际他还有别技术运算,如混淆电路,HE。对应的不同地执行过程。还在一步一步探索,后续也会更新相关内容。
欢迎大家找我讨论交流各种关于SPDZ开源库的问题。我明白的一定知无不言,我不会的,大家一起讨论讨论说不定就解决啦。
--------------分割线-----------------------------
看到大家有不少问题,评论区有时不能及时回复,可以加微信一起交流哦~~ 在此说明:此微信号仅限交流mpc和spdz开源库的技术或者知识交流,不发推广,没有公众号,你不找我我绝不会找你,也希望大家加了以后不要给我发与之无关的消息。