安全多方计算之PICCO实例初探

PICCO是一个安全多方计算的开源项目,主体语言是C语言,但是对C语言进行了扩展,定义了一些新的安全变量形式,如private(public) int<32>,  smcinput(), smcout()等等。这个开源项目是基于门限秘密共享的,提供了一个编译器将用户编写的C代码转换为安全多方计算的代码。他支持多方计算。分了三个角色:数据输入方,数据接收方,计算方。

这是github的源代码:https://github.com/PICCO-Team/picco 大家可以自行下载,里面也包含了官方文档。这里也主要根据官方文档的一步步操作。

使用体验:不怎么样。一些论文综述对它的评价还可以,但是我用起来感觉不怎么样。主要原因还是依赖库过时。这个项目没有更新维护,但是他所需要的底层库文件却在更新,导致编译时会出现很多错误(编译不通过),所以如果有人想试用它一定安装当时版本的依赖库。

官方文档指出项目依赖的两大库:GMP和Openssl。但是还有其他一些小工具,如果你是新机的话(比如我,新开的ubuntu20版的虚拟机)。大体记得有flex、bison这两个印象深刻,其他可能还有,已经忘了。

特别提醒,现在openssl已经更新到3.0了,千万不要用最新版,我是下的1.0.2u版本。具体安装方法,就百度下吧。另外百度的安装可能会让你安装在home下,一定要安装在/usr/local下。

项目一共有两个文件夹:compile 和 compute

包含一个编译一个计算的源代码。

进入文件夹后首先要编译所有的源代码:

# 进入compiler文件夹
$ cd compiler
# 运行compiler.sh
$ ./compiler.sh

运行可能会报错:/bin文件夹找不到。这时你需要手动创建:

$ mkdir bin

编译成功后,在bin文件夹内会生成三个主要编译器(picco, picco-utility, picco-seed),利用他们可以运行整个程序。

接下来创建一个项目:

1. 我创建了项目文件夹test1,进入后,首先要创建一个配置文件smc_config:

#我用的是sublime text3 进行文本编辑,用vim都行。
$ subl smc_config

打开文件编辑内容:

这个配置文件格式固定,第一行指定比特数,你可以空着他会自动选择合适的比特数。第二行代表计算节点的数量,第三行代表门限值(门限秘密共享的阈值)第四五行分别代表数据输入方和数据接收方的数量(也可以是同一个人)。

2. 编辑你的C语言代码,它在compute/sample里提供很多样例,你可以选取里面的进行测试。

我创建了一个muladd.c的文件:

3. 创建一个配置文件utility_config用来做多方数据数据输入。这里只需要创建一个空文本即可,执行下面的命令后会自动写入数据。如果没有这个文件他会报错。

4. 转换你的C语言程序:

../picco muladd.c smc_config muladd_gen utility_config

注意执行picco的路径,原来编译后是在compiler/bin里的,这里我是把他拿到主文件夹里了。muladd.c是你要转换的程序,muladd_gen是转换后的C程序。

执行后就多了一个C语言程序,这时utility_config也有内容了。

5. 将隐私数据变成秘密值

首先要确定数据,数据是放在一文本文件里的。

这里我创建一个data.dat文件在里面定义了我的数据。

执行命令进行秘密分享:

../picco-utility -I 1 data.dat utility_config sharefile

这时会生成三个分享值,因为我设置的计算节点是三个。

6. 编译转换的C语言程序:

将转换后的程序移动到compute文件夹下:

$ mv muladd_gen.cpp ../compute

打开makefile文件,将每一个有test-code的地方改成你的C文件的名字:

保存退出。

编译你的c语言程序:

$ make muladd_gen

第一次编译内容会很多,之后就没有那么多了。

编译好之后会生成你的可执行文件

将这个文件移动到你的项目文件夹里:

$ mv muladd_gen ../test1

7. 为每一个计算节点生成RSA公私钥对,这是因为在计算节点进行数据传输时,都是用rsa进行了加密传输。

#使用openssl生成私钥
$ openssl genrsa -out sk1.pem 1024
#使用sk1生成对应公钥
$ openssl rsa -in sk1.pem -pubout -out pk1.pem

有几个计算节点就要生成几对,我这里生成三对

 

8.  创建计算节点的配置文件runtime_config,内容如下:

1,127.0.0.1,9647,pk1.pem
2,127.0.0.1,9646,pk2.pem
3,127.0.0.1,9645,pk3.pem

格式是固定的,第一个代表计算节点的编号,后面是ip地址以及端口号,在后面是分配的RSA公钥

9. 运行计算节点:

打开三个终端,切换到项目文件夹。分别运行如下命令三次开启节点:

./muladd_gen 3 runtime_config sk3.pem 1 1 sharefile3 output

第一个“3”是计算节点的ID,sk3.pem是它的私钥;1代表输入方的数量,如果输入方数量是m,后面要输入m个对应的秘密分享文件(sharefile);后一个1代表接收方的数量,如果接收方数量是n,后面要输入n个对应的输出文件(output)。注意顺序,先运行节点3,再2再1。 

10. 计算结果:

../picco-seed runtime_config utility_config

 到这里只是计算节点结算的结果的分享值,还要进一步重构出最终结果。

11. 计算最终结果:

../picco-utility -O 1 sharefile utility_config result

最终结果储存在result中。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值