阈值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_CryptosystemFHE_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_settingFHE_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代码的更多相关文章

  1. 七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)

    http://blog.csdn.net/xw20084898/article/details/17564957 一.工具:VC+OpenCV 二.语言:C++ 三.原理 otsu法(最大类间方差法, ...

  2. 【转】七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)

    http://blog.csdn.net/xw20084898/article/details/17564957 一.工具:VC+OpenCV 二.语言:C++ 三.原理 otsu法(最大类间方差法, ...

  3. 【图像算法】七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)

    图像算法:图像阈值分割 SkySeraph Dec 21st 2010  HQU Email:zgzhaobo@gmail.com    QQ:452728574 Latest Modified Da ...

  4. 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)

    建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...

  5. Emgu学习之(四)——图像阈值

    http://www.cnblogs.com/CoverCat/p/5043833.html Visual Studio Community 2015 工程和代码:http://pan.baidu.c ...

  6. 【学习opencv第七篇】图像的阈值化

    图像阈值化的基本思想是,给定一个数组和一个阈值,然后根据数组中每个元素是低于还是高于阈值而进行一些处理. cvThreshold()函数如下: double cvThreshold( CvArr* s ...

  7. 【转】Emgu 图像阈值

    原文地址:http://www.cnblogs.com/CoverCat/p/5043833.html 转载,备查 Visual Studio Community 2015 工程和代码:http:// ...

  8. opencv之图像阈值化处理

    一.函数简介 1.threshold-图像简单阈值化处理 函数原型:threshold(src, thresh, maxval, type, dst=None) src:图像矩阵 thresh:阈值 ...

  9. opencv python 图像二值化/简单阈值化/大津阈值法

    pip install matplotlib 1简单的阈值化 cv2.threshold第一个参数是源图像,它应该是灰度图像. 第二个参数是用于对像素值进行分类的阈值, 第三个参数是maxVal,它表 ...

随机推荐

  1. Bugku CTF练习题---社工---信息查找

    Bugku CTF练习题---社工---信息查找 flag:KEY{462713425} 解题步骤: 1.观察题目,思考题目内容,了解答案是群号 2.这里涉及到好多的信息,首先有网址,第二个是今日头条 ...

  2. CoreWCF 1.0.0 发布,微软正式支持WCF

    2022年4月28日,我们达到了一个重要的里程碑,并发布了CoreWCF的1.0.0版本.对Matt Connew (微软WCF团队成员)来说,这是5年前即 2017年1月开始的漫长旅程的结束.Mat ...

  3. 从 jQuery 到 Vue3 的快捷通道

    当初使用 jQuery 做了几个简单的项目,算是有一点点了解,现在学习Vue3,发现了一个可以快速转换思维的通道 -- 使用CDN的方式模拟 Vite 建立的项目! CDN方式 jQuery的使用非常 ...

  4. 浅谈Java-String到底是值传递还是引用传递?

    参数传递 Java 中的参数传递分为 "值传递""引用传递" 如果你学过 C/C++应该很好理解,就是所谓的 "值传递" 和 "指 ...

  5. .NET混合开发解决方案11 WebView2加载的网页中JS调用C#方法

    系列目录     [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...

  6. WPF全局异常处理

    private void RegisterEvents() { //Task线程内未捕获异常处理事件 TaskScheduler.UnobservedTaskException += TaskSche ...

  7. 被迫开始学习Typescript —— class

    TS 的 class 看起来和 ES6 的 Class 有点像,基本上差别不大,除了 可以继承(实现)接口.私有成员.只读等之外. 参考:https://typescript.bootcss.com/ ...

  8. nodejs + koa + typescript 集成和自动重启

    版本说明 Node.js: 16.13.1 全局安装 TypeScript yarn global add typescript 创建项目 创建如下目录结构 project ├── src │ └── ...

  9. linux系统下文件误删除该如何恢复?

    一.linux误删除数据的场景 在实际的工作中,朋友们可能会将linux服务器上的文件不小心误删除掉了.而且越是资历老的工程师越容易犯这样的错误,敲代码的速度也是够快,啪啪rm -rf一个回车,然后就 ...

  10. R-CNN学习笔记

    R-CNN学习笔记 step1:总览 步骤: 输入图片 先挑选大约2000个感兴趣区域(ROI)使用select search方法:[在输入的图像中寻找blobby regions(可能相同纹理,颜色 ...