阈值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实现,效率是显而易见的!

最新文章

  1. Linux搭建Scrapy爬虫集成开发环境
  2. HDU1024Max Sum Plus Plus(M段最大和)
  3. bzoj3489 A simple rmq problem 可持久化树套树
  4. 设计模式知识搜集(c++)
  5. AHOI2009最小割
  6. Jsp中的EL表达式
  7. win7安装iis及web配置教程
  8. Google云平台技术架构
  9. bzoj2151 种树 双向链表+堆
  10. 分别用face++和百度获取人脸属性(python单机版)
  11. 全球排名第一的开源ERP Odoo v12 最新一键安装体验版正式发布
  12. CSL 的魔法
  13. PYTHON SOCKET编程简介
  14. spring4.0.0 源码导入eclipse(sts)
  15. python装饰器概念与应用
  16. Java 16进制转10进制
  17. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网。
  18. Bootstrap3的输入框数字点击修改效果
  19. 利用Node 搭配uglify-js压缩js文件,批量下载图片到本地
  20. Spark修炼之道——Spark学习路线、课程大纲

热门文章

  1. XCTF练习题---WEB---Cookie
  2. mysql内连接查询之自连接
  3. ChCore Lab1 机器启动 实验笔记
  4. CentOS 8配置本地yum源及DNF简介
  5. 4┃音视频直播系统之浏览器中通过 WebRTC 进行桌面共享
  6. 有关状压DP
  7. 原创工具14Finger-全能web指纹识别与分享平台
  8. 图文详解 HDFS 的工作机制及其原理
  9. vue项目引入TinyMCE
  10. 好客租房21-react组件的两种创建方式(函数组件)