阈值PSI代码
阈值PSI
若交集数量超过某个给定阈值时,允许分布式的各个参与方在自己集合中找到交集,且除了交集外,得不到其他额外信息。
实现论文: Multi-Party Threshold Private Set Intersection with Sublinear Communication
源码地址:https://github.com/ontanj/tpsi
其中\(F_{TPSI-int}\)做出部分修改,因为基于TFHE无法实现自举(bootstrapping)技术。
用到的加密算法:
\(TAHE\):Paillier-https://github.com/niclabs/tcpaillier
\(TFHE\):BFV-https://github.com/ldsec/lattigo
接口:
(1)AHE_Cryptosystem
和FHE_Cryptosystem
实现同态运算
type AHE_Cryptosystem interface {
// 密文+密文
Add(Ciphertext, Ciphertext) (sum Ciphertext, err error)
// 密文^{明文}
Scale(cipher Ciphertext, factor *big.Int) (product Ciphertext, err error)
// 加密
Encrypt(*big.Int) (Ciphertext, error)
// 聚合明文
CombinePartials([]Partial_decryption) (*big.Int, error)
// 计算加密矩阵
EvaluationSpace() gm.Space
// 明文空间大小
N() *big.Int
}
type FHE_Cryptosystem interface {
AHE_Cryptosystem
// 密文*密文
Multiply(Ciphertext, Ciphertext) (Ciphertext, error)
}
(2)AHE_setting
和FHE_setting
包含参与方数量、阈值大小和通信方式
type AHE_setting interface {
// 阈值
Threshold() int
// 参与方
Parties() int
// AHE
AHE_cryptosystem() AHE_Cryptosystem
// central方发布消息给其他方
Distribute(interface{})
// 其他方给central方传递消息
Send(interface{})
// central方给指定方发送消息
SendTo(int, interface{})
// central方等待来其他方的消息,并将其(按顺序)分组
ReceiveAll() []interface{}
// 接手central方的消息
Receive() interface{}
// 判断是否为central方
IsCentral() bool
}
type FHE_setting interface {
AHE_setting
// FHE
FHE_cryptosystem() FHE_Cryptosystem
}
本实验是在一台机器上模拟多方通信,通过goroutine
实现。
goroutine:在go语言中,每一个并发的执行单元叫做goroutine,如果一个程序中包含多个goroutine,对两个函数的调用则可能发生在同一时刻。
运行:
go run main/main.go diff dj 7 main/elements
其中FTPSI-diff
使用的是TAHE,阈值为7。
功能:
(1)TPSIdiffWorker
,在交集测试下求交集和差集
(2)TPSIintWorker
:在差集测试下求交集和差集
测试:
P1:0,3,6,9,13,16
P2:0,3,6,9,14,17
P3:0,3,6,9,14,15
P4:0,3,6,9,12,17
P5:0,3,6,9,13,15
T=7
//交集大时用TFHE求
go run main/main.go int bfv 7 main/elements
//差集小时用TAHE求
go run main/main.go diff dj 7 main/elements
//差集小时用TFHE求
go run main/main.go diff bfv 7 main/elements
s/秒 | int | diff |
---|---|---|
TFHE | 515.532007 | 2391.952714 |
TAHE | / | 26.436323 |
总结:
用FHE实现,效率是显而易见的!
阈值PSI代码的更多相关文章
- 七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
http://blog.csdn.net/xw20084898/article/details/17564957 一.工具:VC+OpenCV 二.语言:C++ 三.原理 otsu法(最大类间方差法, ...
- 【转】七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
http://blog.csdn.net/xw20084898/article/details/17564957 一.工具:VC+OpenCV 二.语言:C++ 三.原理 otsu法(最大类间方差法, ...
- 【图像算法】七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
图像算法:图像阈值分割 SkySeraph Dec 21st 2010 HQU Email:zgzhaobo@gmail.com QQ:452728574 Latest Modified Da ...
- 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)
建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...
- Emgu学习之(四)——图像阈值
http://www.cnblogs.com/CoverCat/p/5043833.html Visual Studio Community 2015 工程和代码:http://pan.baidu.c ...
- 【学习opencv第七篇】图像的阈值化
图像阈值化的基本思想是,给定一个数组和一个阈值,然后根据数组中每个元素是低于还是高于阈值而进行一些处理. cvThreshold()函数如下: double cvThreshold( CvArr* s ...
- 【转】Emgu 图像阈值
原文地址:http://www.cnblogs.com/CoverCat/p/5043833.html 转载,备查 Visual Studio Community 2015 工程和代码:http:// ...
- opencv之图像阈值化处理
一.函数简介 1.threshold-图像简单阈值化处理 函数原型:threshold(src, thresh, maxval, type, dst=None) src:图像矩阵 thresh:阈值 ...
- opencv python 图像二值化/简单阈值化/大津阈值法
pip install matplotlib 1简单的阈值化 cv2.threshold第一个参数是源图像,它应该是灰度图像. 第二个参数是用于对像素值进行分类的阈值, 第三个参数是maxVal,它表 ...
随机推荐
- Bugku CTF练习题---社工---信息查找
Bugku CTF练习题---社工---信息查找 flag:KEY{462713425} 解题步骤: 1.观察题目,思考题目内容,了解答案是群号 2.这里涉及到好多的信息,首先有网址,第二个是今日头条 ...
- CoreWCF 1.0.0 发布,微软正式支持WCF
2022年4月28日,我们达到了一个重要的里程碑,并发布了CoreWCF的1.0.0版本.对Matt Connew (微软WCF团队成员)来说,这是5年前即 2017年1月开始的漫长旅程的结束.Mat ...
- 从 jQuery 到 Vue3 的快捷通道
当初使用 jQuery 做了几个简单的项目,算是有一点点了解,现在学习Vue3,发现了一个可以快速转换思维的通道 -- 使用CDN的方式模拟 Vite 建立的项目! CDN方式 jQuery的使用非常 ...
- 浅谈Java-String到底是值传递还是引用传递?
参数传递 Java 中的参数传递分为 "值传递""引用传递" 如果你学过 C/C++应该很好理解,就是所谓的 "值传递" 和 "指 ...
- .NET混合开发解决方案11 WebView2加载的网页中JS调用C#方法
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- WPF全局异常处理
private void RegisterEvents() { //Task线程内未捕获异常处理事件 TaskScheduler.UnobservedTaskException += TaskSche ...
- 被迫开始学习Typescript —— class
TS 的 class 看起来和 ES6 的 Class 有点像,基本上差别不大,除了 可以继承(实现)接口.私有成员.只读等之外. 参考:https://typescript.bootcss.com/ ...
- nodejs + koa + typescript 集成和自动重启
版本说明 Node.js: 16.13.1 全局安装 TypeScript yarn global add typescript 创建项目 创建如下目录结构 project ├── src │ └── ...
- linux系统下文件误删除该如何恢复?
一.linux误删除数据的场景 在实际的工作中,朋友们可能会将linux服务器上的文件不小心误删除掉了.而且越是资历老的工程师越容易犯这样的错误,敲代码的速度也是够快,啪啪rm -rf一个回车,然后就 ...
- R-CNN学习笔记
R-CNN学习笔记 step1:总览 步骤: 输入图片 先挑选大约2000个感兴趣区域(ROI)使用select search方法:[在输入的图像中寻找blobby regions(可能相同纹理,颜色 ...