PSI的分类/调用架构
隐语PSI功能分层
示例代码:
import spu
import secretflow as sf
# alice
cluster_config ={
'parties':{
'alice':{
'address': '172.26.0.3:52000',
'listen_addr': '0.0.0.0:52000'
},
'bob':{
'address':'172.26.0.2:52000',
'listen_addr': '0.0.0.0:52000'
}
},
'self_party':'alice'
}
sf.shutdown()
sf.init(address='local',cluster_config=cluster_config)
# bob
import spu
import secretflow as sf
cluster_config ={
'parties':{
'alice':{
'address': '172.26.0.3:52000',
'listen_addr': '0.0.0.0:52000'
},
'bob':{
'address':'172.26.0.2:52000',
'listen_addr': '0.0.0.0:52000'
}
},
'self_party':'bob'
}
sf.shutdown()
sf.init(address='local',cluster_config=cluster_config)
# Create SPU
cluster_def={
"nodes":[
{"party": "alice", "address": "172.26.0.3:41805"},
{"party": "bob", "address": "172.26.0.2:52397"}
],
"runtime_config":{
"protocol": spu.spu_pb2.SEMI2K,
"field": spu.spu_pb2.FM128
}
}
spu = sf.SPU(cluster_def,
link_desc={
"connect_retry_times": 60,
"connect_retry_interval_ms":1000,
})
# create data alice
import pandas as pd
alice_df = pd.DataFrame({
"name": ["mike", "tony", "john", "kate"],
"age": [15,13,20,21]})
alice_df.to_csv("/root/psi/data/alice_psi_input.csv", index=False)
# create data bob
import pandas as pd
bob_df = pd.DataFrame({
"name": ["alice", "tony", "john", "kitty"],
"age": ["A","B","C","D"]})
bob_df.to_csv("/root/psi/data/bob_psi_input.csv", index=False)
# create psi
spu.psi_v2(
keys={"alice":["name"],"bob":["name"]},
input_path={"alice":f"/root/psi/data/alice_psi_input.csv", "bob":f"/root/psi/data/bob_psi_input.csv"},
output_path={"alice":f"/root/psi/data/alice_psi_output.csv","bob":f"/root/psi/data/bob_psi_output.csv"},
receiver="alice",
broadcast_result=True,
protocol="PROTOCOL_ECDH",
ecdh_curve="CURVE_25519")