虚拟机版本:Ubuntu18.04
下载安装包
下载地址:https://github.com/data61/MP-SPDZ/releases
下载到本地后拖拽至虚拟机(需要使用VMware Tools)
之后,解压缩提取文件
下载安装依赖库
在SPDZ的根目录下打开终端,安装依赖库
sudo apt-get install automake build-essential cmake git libboost-dev libboost-thread-dev libntl-dev libsodium-dev libssl-dev libtool m4 python3 texinfo yasm
执行成功后页面:
执行命令:
Scripts/tldr.sh
执行成功后页面
编译MP-SPDZ库
make -j 8 tldr
执行该命令出现了很多报错,如下图等
出现原因主要是网络等问题造成的相关文件未下载完全,可以手动下载好以下文件,修改文件夹命放入相应目录中
打开根目录下的Makefile文件,找到以下git指令:
git submodule update --init --recursive deps/libOTe || git clone --recurse-submodules https://github.com/mkskeller/softspoken-implementation deps/libOTe
git submodule update --init deps/SimplestOT_C || git clone https://github.com/mkskeller/SimplestOT_C deps/SimplestOT_C
git submodule update --init deps/SimpleOT || git clone https://github.com/mkskeller/SimpleOT deps/SimpleOT
git submodule update --init deps/simde || git clone https://github.com/simd-everywhere/simde deps/simde
git submodule update --init deps/mpir || git clone https://github.com/wbhart/mpir deps/mpir
分别在本地下载对应链接,拖拽至虚拟机MP-SPDZ库根目录下的deps文件夹,根据上面的git指令修改好对应的文件名,如下图:
测试
- 在mp-spdz-0.3.5/Programs/Source文件夹下创建.mpc文件,在这里我命名为test.mpc
使用gedit命令,创建一个文件并打开编辑
gedit test.mpc
编辑内容
# sint是SPDZ定义的安全类型
a = sint.get_input_from(0) #接收第0方的秘密输入
b = sint.get_input_from(1) #接收第1方的秘密输入
c = a + b
print_ln('%s', c.reveal()) #reveal重构得到原数据
保存退出
2. 返回根目录mp-spdz-0.3.5,编译test.mpc
./compile.py -F 64 test.mpc
- 生成证书文件
Scripts/setup-ssl.sh 2 #2代表2方计算
4. 计算
在根目录下打开两个终端,分别执行:
./mascot-party.x -N 2 -I -p 0 test #test是我的文件命名,2表示两方计算,0表示第1方
./mascot-party.x -N 2 -I -p 1 test # 1表示第2方
执行后,在两个终端输入求和的数(在这里,我输入10,100),再次执行后返回计算结果110