SecretFlow 五: psi
1. SPU实现的PSI介绍
定义:安全求交集:Private Set Intersection(PSI)
一种特殊的安全多方计算(MPC)协议 Alice持有集合X,Bob持有集合Y Alice和Bob通过执行PSI协议,得到交集结果XnY 除交集外不会泄漏交集外的其它信息
实现层:bucket psi入口(可以通过该入口忽略掉不同协议的区别) Ecdh、Kkrt16、Bc22等PS引协议实现
基础组件:YACL OT、OPRF、PRG brpc link ECC、AES、HASH
实现的种类:
-
半诚实:
-
-
两方:
-
-
-
-
ecdh、kkrt16、bc22(pcg-psi)
-
ec-oprf PSI (Unbalanced PSI)
-
dp-psi
-
-
多方
-
-
ecdh-3-party(可扩展到多方)
-
-
-
恶意模型
-
-
mini-PSI(适合小数据集)
-
2.SPU PSI调用架构
统一入口 ◆入口函数:bucket_psi 支持分桶求交 ◆通过分桶支持大规模数据(10亿规模) 输入输出处理 ◆检查求交id列是否数据是否完整 ◆检查是否有重复项 输出处理 ◆支持按求交id列排序 ◆输出完整label列
3.隐语PSI引开发指南
下载secrenote
pip install secrenote
安装成功:
设置IP
上传数据
单机模式验证
import secretflow as sf import os import spu sf.shutdown() sf.init(parties=["alice", "bob"], address="local") alice, bob = sf.PYU("alice"), sf.PYU("bob") spu = sf.SPU(sf.utils.testing.cluster_def(["alice", "bob"])) current_dir = os.getcwd() input_path = { alice: f"{current_dir}/test1.csv", bob: f"{current_dir}/test2.csv", } output_path = { alice: f"{current_dir}/res1.csv", bob: f"{current_dir}/res2.csv", } spu.psi_csv("uid", input_path, output_path, "alice")
运算结果