基础知识
1.PSI(Private Set Intersection)安全求交集
2.PSI功能图
3.SPU实现PSI的种类
·半诚实模型(两方or多方)
·恶意模型
4.SPU PSI调用框架(分桶调度)
bucket_psi、memory_psi 、operator、batch_provder
5.secretflow两种模式:集群仿真模式、生产模式
6.隐语PSI流程
·启动ray集群
·初始化secretflow
·启动SPU设备
·执行PSI
代码实现
1.连接alice与bob
"""寻找未使用的节点"""
import socket
from contextlib import closing
from typing import cast
def tcp_port()->int:
with closing(socket.socket(socket.AF_INET,socket.SOCK_STREAM)) as sock:
sock.bind(("",0))
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
return cast(int,sock.getsockname()[1])
print(tcp_port())
"""Alice的节点"""
import secretflow as sf
cluster_config = {
'parties':{
'alice':{
'address':'172.18.0.2:40935',
'listen_addr':'0.0.0.0:40935'
},
'bob':{
'address':'172.18.0.3:46599',
'listen_addr':'0.0.0.0:46599'
},
},
'self_party':'alice'
}
sf.shutdown()
sf.init(address='local',cluster_config=cluster_config)
"""Bob的节点"""
import secretflow as sf
cluster_config = {
'parties':{
'alice':{
'address':'172.18.0.2:40935',
'listen_addr':'0.0.0.0:40935'
},
'bob':{
'address':'172.18.0.3:46599',
'listen_addr':'0.0.0.0:46599'
},
},
'self_party':'bob'
}
sf.shutdown()
sf.init(address='local',cluster_config=cluster_config)
其中alice和bob的IP地址如下所示查找
2.导入数据
"""alice的数据"""
import pandas as pd
alice_df = pd.DataFrame({
'name':[2,3,100,101],
'age':[15,13,20,21],
})
import os
alice_df.to_csv(f"{str(os.getcwd())}/alice_input.csv",index=False)
"""bob的数据"""
import pandas as pd
bob_df = pd.DataFrame({
'name':[2,3,4,5],
'sex':[1,0,0,1],
})
import os
bob_df.to_csv(f"{str(os.getcwd())}/bob_input.csv",index=False)