574
社区成员
发帖
与我相关
我的任务
分享 🔐 隐私集合求交(PSI)学习笔记
笔记内容来自隐语Mooc,欢迎一起来学习。Mooc课程地址:https://www.secretflow.org.cn/community/bootcamp/2narwgw4ub8rabq/course/vhii941jitkl122?tab=outline

| 分类维度 | 类型 | 说明 |
|---|---|---|
| 参与方数量 | 两方PSI、多方PSI | 参与方数量不同 |
| 数据规模 | 平衡PSI、非平衡PSI | 数据集大小是否相当 |
| 安全模型 | 半诚实、恶意 | 对抗模型不同 |
| 功能扩展 | PSI-CA、PSI-Payload、Circuit PSI | 支持计算功能 |
应用层 (MVP、Kuscia、白屏、OpenAPI)
↓
协议封装层 (SecretFlow: psi_csv、psi_df)
↓
协议实现层 (SPU: bucket_psi入口,多种PSI协议)
↓
基础组件层 (YACL: OT、OPRF、PRG、密码学基础)
| 安全模型 | 参与方 | 协议 | 特点 |
|---|---|---|---|
| 半诚实 | 两方 | ECDH、KKRT16、BC22 | 基础协议 |
| 半诚实 | 两方 | EC-OPRF PSI | 非平衡PSI |
| 半诚实 | 两方 | DP-PSI | 差分隐私 |
| 半诚实 | 多方 | ECDH-3PC | 可扩展到多方 |
| 恶意 | 两方 | Mini-PSI | 适合小数据集 |
| 组件 | 功能 | 适用场景 |
|---|---|---|
bucket_psi | 高级API,支持海量数据 | 生产环境 |
mem_psi | 低级API,算法内核 | 性能测试 |
Operator | 算法接入层 | 协议扩展 |
BatchProvider | 批量数据读取 | 数据预处理 |
message BucketPsiConfig {
PsiType psi_type = 1; // PSI协议类型
uint32 receiver_rank = 2; // 接收方rank
bool broadcast_result = 3; // 是否广播结果
InputParams input_params = 4; // 输入参数
OutputParams output_params = 5; // 输出参数
CurveType curve_type = 6; // 椭圆曲线类型
uint32 bucket_size = 7; // 分桶大小
}
# Alice节点
ray start --head --node-ip-address="ip" --port="port" --include-dashboard=False --disable-usage-stats
# Bob节点
ray start --head --node-ip-address="ip" --port="port" --include-dashboard=False --disable-usage-stats
sf_cluster_config = {
'parties': {
'alice': {'address': 'ip:port of alice', 'listen_addr': '0.0.0.0:port'},
'bob': {'address': 'ip:port of bob', 'listen_addr': '0.0.0.0:port'}
},
'self_party': 'bob' # 当前参与方
}
sf.init(address='ray_head_node_address', cluster_config=sf_cluster_config)
spu_cluster_def = {
'nodes': [
{'party': 'alice', 'address': '192.168.0.1:12945', 'listen_address': '0.0.0.0:12945'},
{'party': 'bob', 'address': '192.168.0.2:12946', 'listen_address': '0.0.0.0:12946'}
],
'runtime_config': {
'protocol': spu.spu_pb2.SEMI2K,
'field': spu.spu_pb2.FM128,
}
}
spu = sf.SPU(spu_cluster_def)
reports = spu.psi.csv(
key=select_keys, # 求交键
input_path=input_path, # 输入路径
output_path=output_path, # 输出路径
receiver='alice', # 结果接收方
protocol='ECDH_PSI_2PC', # PSI协议
curve_type='CURVE_25519', # 曲线类型
precheck_input=False, # 输入预检查
sort=False, # 结果排序
broadcast_result=False # 结果广播
)
# reports结构包含:
# - original_count: 输入数据总量
# - intersection_count: 交集数量