隐私信息检索开源库XPIR使用


XPIR

XPIR 允许用户从数据库中私下下载元素。这意味着数据库服务器知道它已经向用户发送了一个数据库元素,但不知道是哪一个。底层协议的科学术语是私人信息检索(PIR)。该库在论文中进行了描述和研究:
Carlos Aguilar-Melchor, Joris Barrier, Laurent Fousse, Marc-Olivier Killijian, “XPIR: Private Information Retrieval for Everyone”, Proceedings on Privacy Enhancing Technologies. Volume 2016, Issue 2, Pages 155–174, ISSN (Online) 2299-0984, DOI: 10.1515/popets-2016-0010, December 2015.


安装:

Requirements:
64-bits Linux OS: g++>=4.8, gcc>=4.8
Apple OSX: Xcode, Xcode Command Line Tools and MacPorts.

开源项目地址:
git clone git@github.com:XPIR-team/XPIR.git
or by downloading from https://github.com/XPIR-team/XPIR/archive/master.zip

仅在 OSX 上,执行以下命令(由于 avx 优化问题,必须使用 clang-3.6):

sudo port install gcc48
sudo port select gcc mp-gcc48
sudo port install clang-3.6
sudo port select clang mp-clang-3.6

在所有系统上,执行以下命令:

需要 cmake、GMP(版本 6)Mpfr(版本 3.1.2)和一些 boost 模块(atomic、chrono、date_time、exception、program_options、regex、system、thread,都在版本 1.55.0)来构建 XPIR。可以自己在系统上安装(这将是最快的选择)。还可以使用存储库根目录中的(更慢但更安全的)脚本 helper_script.sh 来检索确切的版本并在本地目录(即 ./local/)中编译它们。如果存在两个版本的所需库(一个是本地版本,一个是系统范围的),则将优先采用本地版本。(即可以使用’sh helper_script.sh’完成依赖安装)

要构建和测试 XPIR,请运行以下命令:

$ mkdir _build
$ cd _build
$ cmake .. -DCMAKE_BUILD_TYPE=Release 
$ make
$ make check

注意:安装的依赖需要对应版本,在Ubuntu20.04中自带的boost版本为1.71.0,运行cmake … -DCMAKE_BUILD_TYPE=Release会报错,需要替换boost版本,步骤参考链接: https://blog.csdn.net/weixin_30278237/article/details/95334230

第一个测试应该很长(构建初始缓存),然后一组测试应该显示正确或“跳过测试…”。如果您收到不正确的测试或核心转储通知,那么就出了问题…

仅在 OSX 上,如果有旧的 OSX 版本和很长的路径,可能会遇到以下错误:

error: install_name_tool: changing install names or rpaths can't be redone for: _build/apps/pir_server 
(for architecture x86_64) because larger updated load commands do not fit

这可以通过将 XPIR 移动到路径较短的目录来解决(以便库的硬路径可以放入可执行文件头中)。

以下 CMake 选项是相关的:

选项描述
-DSEND_CATALOG=OFF不将目录发送给客户端(默认为发送目录,如果
-DMULTI_THREAD=OFF不使用多线程
-DPERF_TIMERS=OFF在执行期间不显示性能测量
-DCMAKE_BUILD_TYPE=Debug添加调试选项并删除优化

XPIR 作为库的使用:

除了可以用作独立应用程序来执行 PIR 协议的客户端和服务器之外,(从 0.2 版开始)创建了一个简单的库,可以访问构建 PIR 协议所需的主要功能(生成查询,生成回复,提取回复和辅助函数)。API 位于 ./pir/libpir.h(来自构建目录),使用此 API 的应用程序必须动态或静态链接库 libpir.so/lippir_static.a(或 OSX 的 libpir.dylib/lipbir_static.a)可以在与 libpir.h 相同的目录中找到。

源代码树的应用程序/simplepir/simple_pir.cpp 中提供了如何使用此 API 构建 PIR 协议的简单演示。它可以从构建树中的 apps/simplepir 运行。

为了使用 API 编译 PIR 协议,例如 simplepir,只需要库(静态或动态)和包含。编译可以通过以下方式完成: g++ -std=c++11 simplePIR.cpp -I i n c l u d e d i r − L include_dir -L includedirLlib_dir -lpir_static -lgmp -lmpfr -fopenmp -lboost_thread -lboost_system

客户端/服务器应用程序的使用:

XPIR 带有一个客户端和一个服务器,允许任何人在简单示例上测试该库。两者都必须在各自的目录上启动。从构建目录,启动服务器执行:

$ cd apps/server
$ ./pir_server

并启动客户端执行(在不同的终端上):

$ cd apps/client
$ ./pir_client

默认情况下,客户端尝试访问本地服务器,但可以指定给定的 IP 地址和端口,使用 --help 获取有关远程连接的不同选项的帮助。

如果在没有选项的情况下运行,PIR 服务器将在服务器目录内的目录 db 中查找文件,并认为每个文件都是一个数据库元素。客户端将显示文件目录并要求用户选择文件。完成此操作后,客户端将运行优化器来决定哪些是检索文件的最佳加密和 PIR 参数。然后他将向服务器发送一个加密的 PIR 查询(即服务器将与数据库混合而不了解它允许检索哪个元素的查询)。然后服务器计算一个加密的 PIR 回复并将其发送给客户端。最后,客户端将解密此回复并将生成的文件存储在客户端目录内的接收目录中。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大连米兰哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值