一个好用的多方隐私求交算法库JasonCeng/MultipartyPSI-Pro
Github链接传送:JasonCeng/MultipartyPSI-Pro
大家好,我是阿创,这是我的第29篇原创文章。
今天是一篇纯技术性文章,希望对工程狮们有所帮助。
向大家推荐一个我最近改造的算法库(JasonCeng/MultipartyPSI-Pro)
主要涉及隐私计算、联邦学习领域,是一个支持多方的隐私求交算法库,主要是是基于osu-crypto/MultipartyPSI****的增强实现。
详细介绍就是下方的README啦~
基于可编程不经意伪随机数的多方隐私求交算法库
Programmable Oblivious PRF & multi-party PSI
简介
本算法库是基于osu-crypto/MultipartyPSI的增强实现。
该算法的原论文来自 CCS 2017 : Practical Multi-party Private Set Intersection from Symmetric-Key Techniques[ePrint]
特性
- 简洁的 API 设计,使用如丝滑般流畅
- 支持多方隐私求交
- 支持读取文件数据
- 支持多机通信
- 在增强半诚实模型和标准半诚实模型中实现了多方PSI(nPSI),安全性有保障
- 核心算法可编程OPRF(Programmable Oblivious PRF),包含以下多种实现:
- Table-based OPPRF
- Polynomial-based OPPRF
- BloomFilter-based OPPRF
- 详细的文档和示例,帮助开发者更快的上手项目
️ 验证情况
- 机器配置: 1C 2G (Intel(R) Core(TM) i7-8665U CPU @ 1.90GHz)
- 数量:3台(3方)
- 数据集大小:8条
- 数据长度:128bit
- 3方求交耗时:1.035 s
使用
依赖库
注:对于libOTe,它需要支持PCLMUL、AES-NI和SSE4.1的CPU。 可选:nasm 用于改进 SHA1 性能。
1. 克隆代码
git clone https://github.com/JasonCeng/MultipartyPSI-Pro.git
2. 安装依赖
代码已经在 Windows (Microsoft Visual Studio) 和 Linux 上进行了测试。安装所需的库:
- windows:
- 打开 PowerShell
cd ./thirdparty.\all_win.ps1(该脚本适用于 Visual Studio 2015。对于其他版本,您应该修改MSBuild脚本中的几个地方。)
- linux:
cd ./thirdpartybash .\all_linux.get.
注意:如果您遇到构建 boost、miracl 和 libOTe 的 all_win.ps1 或 all_linux.get 的问题,请按照 libOTe 上的更多手动说明进行操作)
3. 编译
- Windows:
- 按顺序构建
cryptoTools、libOTe和libOPRF项目。 - 为
bOPRFmain项目添加参数(例如:-u) - 运行
bOPRFmain
- Linux:
- make (依赖:
CMake,Make,g++) - 单元测试:
./bin/frontend.exe -u
4. 运行
输出包括online/offline/total平均运行时长。
参数列表:
-u 单元测试:computes PSI of 5 paries, 2 dishonestly colluding, each with set size 2^12 in semihonest setting
-n 参与方数量
-p 参与方ID,ID最大的参与方为结果接收方
-m set size
-t 恶意参与方数量(在不诚实模型设置中生效)
-a 以增强半诚实模型模式运行。默认使用Table-based OPPRF算法。
0: Table-based; 1: POLY-seperated; 2-POLY-combined; 3-BloomFilter
-r 当 r = 1 时使用优化的3方PSI算法
-f 输入数据的文本文件(绝对路径或相对路径均可以)
-ip 其他参与方ip,且相对顺序需与-p的编号保持一致。比如-p 0所带的-ip的顺序需为<-p 1 ip>,<-p 2 ip>
示例:
1. 单元测试
./bin/frontend.exe -u
2. nPSI
在半诚实模型设置中,计算3方的PSI,其中包含2个不诚实方,数据存储在data.bin中。
三台机器的ip分别是:192.168.1.10,192.168.1.11,192.168.1.12
# 机器1-192.168.1.10:
./bin/frontend.exe -n 3 -t 2 -m 12 -p 0 -f ./data.bin -ip 192.168.1.11,192.168.1.12 > log01.log
# 机器2-192.168.1.11:
./bin/frontend.exe -n 3 -t 2 -m 12 -p 1 -f ./data.bin -ip 192.168.1.10,192.168.1.12 > log02.log
# 机器3-192.168.1.12:
./bin/frontend.exe -n 3 -t 2 -m 12 -p 2 -f ./data.bin -ip 192.168.1.10,192.168.1.11 > log03.log
注意:-ip后所带的ip为其他参与方ip,且相对顺序需与-p的编号保持一致。比如-p 0所带的-ip的顺序需为<-p 1 ip>,<-p 2 ip>
5. 总结
1. git clone https://github.com/JasonCeng/MultipartyPSI-Pro.git
2. cd thirdparty/
3. bash all_linux.get
4. cd ..
5. cmake .
6. make -j
7. 在三台机器上执行:
# 机器1:
./bin/frontend.exe -n 3 -t 2 -m 12 -p 0 -f ./data.bin -ip 192.168.1.11,192.168.1.12 > log01.log
# 机器2:
./bin/frontend.exe -n 3 -t 2 -m 12 -p 1 -f ./data.bin -ip 192.168.1.10,192.168.1.12 > log02.log
# 机器3:
./bin/frontend.exe -n 3 -t 2 -m 12 -p 2 -f ./data.bin -ip 192.168.1.10,192.168.1.11 > log03.log
后续工作
- [ ] 移除运行时非必要参数,如
-m - [ ] 所有分支均支持
-f传入文本文件数据 - [ ] 所有分支均支持
-ip进行多机通信 - [ ] 输出求交结果到指定路径,由leader传入指定路径
- [ ] 对小样本、大样本数据进行测试
帮助
有关构建或运行该算法库的任何问题,请联系 JasonCeng by email: zengzhaochuangx@qq.com
如果你觉得写得不错
麻烦给个赞~
关注我,带你了解区块链行业
推荐阅读:
4、区块链产业发展五大趋势:数据安全、科技监管、自主可控、双碳战略、数字经济
提前看到未来的人,
和花一辈子都看不清的人,
注定是截然不同的命运。
点击下方卡片关注101链视界,和1000+读者**一起**
洞察技术本质

101链视界
区块链、隐私计算与金融科技领域的专业知识分享者。
29篇原创内容
公众号
▲ 点击上方卡片关注101链视界,洞察技术本质
技术交流 | 行业研报 | 前沿洞察 | 转载开白 | 加入社群
请在公众号后台回复 合作
欢迎把文章分享到朋友圈
点击JasonCeng/MultipartyPSI-Pro直达Github****链接
一个好用的多方隐私求交算法库JasonCeng/MultipartyPSI-Pro的更多相关文章
- 一步一步实现基于GPU的pathtracer(二):求交算法
不管是哪种全局光照算法,最根本的都要落实到光线与物体的求交.主要分为光线与参数曲面和非参数曲面的求交,典型的参数曲面有球.盒.圆柱等基本体及基本体的组合体,以及一些更为复杂的参数曲面.非参数曲面就是所 ...
- ray与triangle/quad求交二三事
引擎中,ray与quad求交,算法未细看,但有求解二次方程,不解.ray与triangle求交,使用的是97年经典算法,仔细看过论文,多谢小武同学指点,用到了克拉默法则求解线性方程组.想模仿该方法,做 ...
- 光线求交-面、三角形、球 (Ray intersection)
光线求交 光线定义:position \(a(t)\) = \(o\) + \(t\vec{d}\); 球定义: center p, radius r; 平面定义:normal \(\vec{n}\) ...
- OpenCASCADE直线与平面求交
OpenCASCADE直线与平面求交 在<解析几何>相关的书中都给出了直线和平面的一般方程和参数方程.其中直线的一般方程有点向式形式的. 由于过空间一点可作且只能作一条直线平行于已知直线, ...
- OpenCASCADE 平面与球面求交
OpenCASCADE 平面与球面求交 eryar@163.com OpenCASCADE提供了类IntAna_QuadQuadGeo用来计算两个二次曲面quadric(球面.圆柱面.圆锥面及平面,平 ...
- OpenCASCADE 平面求交
OpenCASCADE 平面求交 eryar@163.com OpenCASCADE提供了类IntAna_QuadQuadGeo用来计算两个二次曲面quadric(球面.圆柱面.圆锥面及平面,平面是二 ...
- OpenCASCADE圆与平面求交
OpenCASCADE圆与平面求交 eryar@163.com 在 解析几何求交之圆与二次曲面中分析了OpenCASCADE提供的类IntAna_IntConicQuad可以用来计算圆与二次曲面之间的 ...
- 【Weiss】【第03章】练习3.4、3.5:有序链表求交、并
[练习3.4] 给定两个已排序的表L1和L2,只使用基本的表操作编写计算L1∩L2的过程. [练习3.5] 给定两个已排序的表L1和L2,只使用基本的表操作编写计算L1∪L2的过程. 思路比较简单,测 ...
- [NetTopologySuite](2)任意多边形求交
任意多边形求交: private void btnPolygon_Click(object sender, EventArgs e) { , , , , , , , , , , , , , }; , ...
随机推荐
- .net core集成使用consul
快速启动一个consul集群可以参考:使用docker快速部署一个consul集群 .net core集成使用consul是通过consul提供出来api接口来实现的,可以分成两个部分来说明:配置集成 ...
- 表达式树扩展 动态生成表达式树插件 Sy.ExpressionBuilder。
CURD中,基础查询我感觉还是很烦人的一个浪费时间的工作,我经历过远古时代的GetAll(string name,int age),这种方式写服务的时候真的是心中一万个草泥马飞过,后面逐渐的变成了传一 ...
- 安装uiautomator2 + python 自动化环境
搭建环境: 1.Python版本 37 2.已经搭建到adb (之前试过在python版本几,一直都装不上UIautomator2,报这个错) 安装步骤: 1.到python的安装路径 > 一直 ...
- centos7 查看卸载软件
rpm -e xxx查不到就用下面的 # 查询软件列表# rpm -qa | grep 软件名rpm -qa | grep maxscale # 卸载软件# sudo yum remove 软件名su ...
- centos7 单用户模式修改root密码
1. 在虚拟机重启客户机后.会出现下面进入界面.按e键 2.按了e键后,会出现下面的界面.此时按↓键.找到linux16 3.将光标移动到UTF-8后面,添加init=/bin/sh,并按 ctrl ...
- Python网络编程之网络基础
Python网络编程之网络基础 目录 Python网络编程之网络基础 1. 计算机网络发展 1.1. OSI七层模型 1.2. 七层模型传输数据过程 2. TCP/IP协议栈 2.1 TCP/IP和O ...
- PHP代码审计之create_function()函数
0x00 create_function()简介 适用范围:PHP 4> = 4.0.1,PHP 5,PHP 7 功能:根据传递的参数创建匿名函数,并为其返回唯一名称. 语法: 1 create ...
- Android官方文档翻译 十 2.3Styling the Action Bar
Styling the Action Bar 设计菜单栏的样式 This lesson teaches you to 这节课教给你 Use an Android Theme 使用一个Android主题 ...
- Visaul Studio 2015 MFC控件使用之--按钮(Button)
在MFC开发当中,比较常用的控件之一便是Button控件了,该控件的除了可以通过点击产生的开关量当作开关来使用,还可以设置其颜色变化当作显示灯,按钮控件的使用相对来比较简单. 打开工程解决方案的资源视 ...
- 【失败的经验】在linux下编译opencv for android
cd /home/ahfu#选择opencv 3.4.6版本来编译wget https://github.com/opencv/opencv/archive/3.4.6.tar.gztar -zxvf ...