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:
  1. 打开 PowerShell
  2. cd ./thirdparty
  3. .\all_win.ps1 (该脚本适用于 Visual Studio 2015。对于其他版本,您应该修改 MSBuild 脚本中的几个地方。)
  • linux:
  1. cd ./thirdparty
  2. bash .\all_linux.get.

注意:如果您遇到构建 boost、miracl 和 libOTe 的 all_win.ps1 或 all_linux.get 的问题,请按照 libOTe 上的更多手动说明进行操作)

3. 编译

  • Windows:
  1. 按顺序构建 cryptoTools、libOTe 和libOPRF项目。
  2. 为bOPRFmain项目添加参数(例如:-u)
  3. 运行bOPRFmain
  • Linux:
  1. make (依赖: CMake, Make, g++)
  2. 单元测试: ./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

如果你觉得写得不错

麻烦给个赞~

关注我,带你了解区块链行业

推荐阅读:

1、《区块链是构建产业互联网的可信基础设施》

2、《隐私计算布局思考》

3、读书 |《数据资产论》:数据如何资产化?

4、区块链产业发展五大趋势:数据安全、科技监管、自主可控、双碳战略、数字经济

5、揭秘北京冬奥会开幕式“数字雪花”背后的区块链技术

6、Web3对于我们普通人意味着什么?

7、最近火爆的数字藏品究竟是什么?


提前看到未来的人,

和花一辈子都看不清的人,

注定是截然不同的命运。

点击下方卡片关注101链视界,和1000+读者**一起**

洞察技术本质

101链视界

区块链、隐私计算与金融科技领域的专业知识分享者。

29篇原创内容

公众号

▲ 点击上方卡片关注101链视界,洞察技术本质

技术交流 | 行业研报 | 前沿洞察 | 转载开白 | 加入社群

请在公众号后台回复 合作

欢迎把文章分享到朋友圈

点击JasonCeng/MultipartyPSI-Pro直达Github****链接

一个好用的多方隐私求交算法库JasonCeng/MultipartyPSI-Pro的更多相关文章

  1. 一步一步实现基于GPU的pathtracer(二):求交算法

    不管是哪种全局光照算法,最根本的都要落实到光线与物体的求交.主要分为光线与参数曲面和非参数曲面的求交,典型的参数曲面有球.盒.圆柱等基本体及基本体的组合体,以及一些更为复杂的参数曲面.非参数曲面就是所 ...

  2. ray与triangle/quad求交二三事

    引擎中,ray与quad求交,算法未细看,但有求解二次方程,不解.ray与triangle求交,使用的是97年经典算法,仔细看过论文,多谢小武同学指点,用到了克拉默法则求解线性方程组.想模仿该方法,做 ...

  3. 光线求交-面、三角形、球 (Ray intersection)

    光线求交 光线定义:position \(a(t)\) = \(o\) + \(t\vec{d}\); 球定义: center p, radius r; 平面定义:normal \(\vec{n}\) ...

  4. OpenCASCADE直线与平面求交

    OpenCASCADE直线与平面求交 在<解析几何>相关的书中都给出了直线和平面的一般方程和参数方程.其中直线的一般方程有点向式形式的. 由于过空间一点可作且只能作一条直线平行于已知直线, ...

  5. OpenCASCADE 平面与球面求交

    OpenCASCADE 平面与球面求交 eryar@163.com OpenCASCADE提供了类IntAna_QuadQuadGeo用来计算两个二次曲面quadric(球面.圆柱面.圆锥面及平面,平 ...

  6. OpenCASCADE 平面求交

    OpenCASCADE 平面求交 eryar@163.com OpenCASCADE提供了类IntAna_QuadQuadGeo用来计算两个二次曲面quadric(球面.圆柱面.圆锥面及平面,平面是二 ...

  7. OpenCASCADE圆与平面求交

    OpenCASCADE圆与平面求交 eryar@163.com 在 解析几何求交之圆与二次曲面中分析了OpenCASCADE提供的类IntAna_IntConicQuad可以用来计算圆与二次曲面之间的 ...

  8. 【Weiss】【第03章】练习3.4、3.5:有序链表求交、并

    [练习3.4] 给定两个已排序的表L1和L2,只使用基本的表操作编写计算L1∩L2的过程. [练习3.5] 给定两个已排序的表L1和L2,只使用基本的表操作编写计算L1∪L2的过程. 思路比较简单,测 ...

  9. [NetTopologySuite](2)任意多边形求交

    任意多边形求交: private void btnPolygon_Click(object sender, EventArgs e) { , , , , , , , , , , , , , }; , ...

随机推荐

  1. rabbimq集群搭建报错:Error: unable TO perform an operation ON node 'rabbit@test3'. Please see diagnostics information AND suggestions below.

    在搭建rabbitmq集群的时候,添加内存节点时,抛出异常:Error: unable TO perform an operation ON node 'rabbit@test3'. Please s ...

  2. Go语言系列之单元测试

    go test工具 Go语言中的测试依赖go test命令.编写测试代码和编写普通的Go代码过程是类似的,并不需要学习新的语法.规则或工具. go test命令是一个按照一定约定和组织的测试代码的驱动 ...

  3. netty系列之:一口多用,使用同一端口运行不同协议

    目录 简介 SocksPortUnificationServerHandler 自定义PortUnificationServerHandler 总结 简介 在之前的文章中,我们介绍了在同一个netty ...

  4. python2.7发送邮件失败之——邮箱安全问题

    使用python2.7发送邮件,通过脚本调试,脚本运行通过成功发出了邮件,但是目标邮箱qq没有收到. 刚开始怀疑脚本问题,上网查找资料后,发现邮箱发送成功后目标邮件没有收到有可能有以下几种原因: 1. ...

  5. 达索CATIA许可证(License)管理使用和优化

    现下主流的V6版本CATIA,是由达索公司提供授权的浮动型License,其客户端通过企业内网从许可证服务器获得许可证,最少要有一个服务器端DS License Server提供一定数量的Licens ...

  6. 【刷题-LeetCode】211. Add and Search Word - Data structure design

    Add and Search Word - Data structure design Design a data structure that supports the following two ...

  7. C++初始化列表各情况分析

    今天回顾了下C++初始化列表的知识,接下来我对这一知识作一总结. 我们在定义了一个类的时候,需要对类的成员进行初始化.关于初始化,有两种方法,一种在初始化列表中进行,另一种就是在构造函数中进行,对于这 ...

  8. python中的rpc库

    基于xml的rpc调用 rpcserver.py from xmlrpc.server import SimpleXMLRPCServer # python中类的命名方式遵循驼峰命名法 # 1. 没有 ...

  9. golang中的标准库template

    html/template包实现了数据驱动的模板,用于生成可对抗代码注入的安全HTML输出.它提供了和text/template包相同的接口,Go语言中输出HTML的场景都应使用text/templa ...

  10. docker四种模式

    1 host模式众所周知,Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,MountNamespace隔离文件系统,Network Name ...