ubuntu 再make时paxheader文件夹报错_调试电路编译器CBMC-GC以及ABY时遇到的问题及解决办法...

4a51eade3be86834797c9d101f121457.png

参考链接:

  • Projects · Security Engineering / CBMC-GC-2
  • encryptogroup/ABY

前言

CBMC-GC是一个能将符合ANSI-C标准的程序转换成布尔电路的电路编译器,它还包括一个以其他格式输出电路的工具circuit-utils,这个工具对于仅支持部分电路格式的文件框架至关重要,比如EMP-toolkit。

一、ABY框架的搭建:

  1. 首先在Ubuntu系统中完成依赖项的安装和运行环境的配置(使用命令sudo apt-get install),包括g++ (version >= 8)、make、cmake、libgmp-dev 、libssl-dev、libboost-all-dev (version >= 1.66)。这里需要注意的是g++安装完成后一定要删除旧版本的软链接:sudo rm g++,然后创建新的软链接指向g++-8. 这个过程可以执行ls /usr/bin/g++*命令查看有没有删除成功。结果如下:

e614e3134af2e4a5ee764ae085e4e0f2.png

2. 框架搭建的问题可以参考已有文章

02 ABY框架的搭建及踩到的坑​blog.csdn.net
2fd7609c10f5d33c1f392d7b77219895.png

在测试的时候要根据build文件夹里二进制文件的实际名称测试,以百万富翁问题为例,执行命令./millionaire_prob_test -r 0./millionaire_prob_test -r 1后得到以下运行结果:

22f91d4d4ce68f428f44f2dd81fc6e5c.png

测试通过,说明ABY框架已经搭建成功。

二、CBMC-GC的编译和运行

  1. 下载minisat包并编译:make minisat2-download ,提示错误

9ff311edb6dee6cdb3704dd336a471af.png

此时需要在命令前加上sudo

04a27d6f6712d70fdce1551ebb437272.png

然后sudo make进行编译,大概需要几分钟,得到

7c3b4f79e99f75708e30567fedae51ce.png

到这里CBMC-GC就编译完成了。

下面我们运行试试。

以examples文件夹的欧几里德距离为例,在CBMC-GC/examples/euclidean_distance下执行make,我们看到它生成了一个output.gate.txt文件,这就是编译输出的初始电路文件。

bc524a88517dd023bc8be6b730833c7f.png

然后我们验证一下,看两个参与方的输入类型和值以及电路计算的输出

15d61ca498fb9de1529a80932dce56c4.png

结果正确。

但是,这个编译器提供的转换功能我们无法使用,即circuit-utils. S&P 2019上的一篇综述《SoK: General Purpose Frameworks for Secure Multi-Party Computation》也说明了这个问题, 他们给出的MPC-SoK/frameworks也没有解决此问题。

我们的解决办法是对makefile进行改动,定义一个转换命令run-trans,如下图所示:

8884c77bac4487a6ff55cd3ef1ee7a26.png

然后执行make run-trans,此时终端显示

365e5c3bb09243aff7060834883e9979.png

表示转换完成,电路门数由81691变为87835个(计算功能不变)。

此时,目录CBMC-GC/examples/euclidean_distance下已经生成了一个标准的电路文件bristol_circuit.txt(此文件和初始电路文件功能是相同的,只是格式不同)

f9a9d03e92fbdd7f210d453c13439d26.png

这就是计算欧几里德距离的标准电路文件。

对于其他具体问题,我们可以调用编译器将C程序转换为布尔电路,然后执行后续操作,比如两方计算。

二、利用ABY对生成的电路garble

按以下步骤执行:

  1. 将搭建好的ABY框架放到CBMC-GC下的cbmc-gc/文件夹里;
  2. 将aby-cbmc-gc/复制到ABY/src/examples/;
  3. 在ABY的顶级目录里执行make进行编译;
  4. 验证ABY/bin/里是否已经包含名为aby-cbmc-gc.exe的可执行文件;

这里遇到的问题是在第三步没有makefile,因此编译时显示未找到命令,解决办法是:

在CBMC-GC/ABY目录下执行 cmake . 命令,生成makefile后再编译,就可以了。

aa4b8f6b46b2a7443a539086887a4b60.png

此时我们去查看ABY/bin/是否已经包含aby-cbmc-gc.exe的可执行文件,然而并没有~怎么办呢T T

93536c42e9f75b567fe62a4435708c7e.png

注意到原链接里说了这么一句话 API已经过时,所以我推测需要从某些地方做下改动,这一部分未完待续~~

b5988330342297992f81f557ce8e3e2c.png

以上内容如果有错误欢迎指正!

写在最后:因为现在已经可以生成标准的电路文件,目前的问题是如何对其执行两方计算,比如garble。想到一种方法是利用ABY,一种方法是借助emp库的garble算法(至于为什么不直接利用emp-tool生成电路,是因为好难懂,遇到了很多问题。。弱鸡哭泣)目前只实现了后一种。。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值