参考文章:隐语PIR介绍及开发实践
参考视频教程:PIR视频教程
根据上面文章测试PIR的步骤和问题list
第一步:建立secretflow集群,alice和bob互相通信(pir和psi通用)
注意:alice和bob同时运行!
sf.shutdown():强制回收之前可能存在的sf集群。
sf.init():sf是ray拉起的,address="local"是不复用之前的ray,重新拉一个。
1、连接不可用
status = StatusCode.UNAVAILABLE
details = “failed to connect to all addresses; last error: INTERNAL: ipv4:ip:port: Trying to connect an http1.x server”
原因:端口不能用alice、bob后端secretflow的端口,用空闲的新的
获取空闲端口的代码(其它的上面参考文章有):
import socket
from contextlib import closing
from typing import cast
def unused_tcp_port() -> int:
"""Return an unused port"""
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(unused_tcp_port())
2、alice和bob互相ping不通
原因:我启动secretflow用的docker 桥接网络类型,ray集群是在alice和bob容器里面启动的,配置的address等应该如图中写容器虚拟化的地址(也可以直接写alice:port,bob:port),而不是实际的物理机地址。
第二步:建立SPU(pir和psi通用)
SPU是Secretflow Processing Unit 的简称,是隐语平台的密态计算单元,在SecretFlow中负责执行MPC计算。
第三步:造数据:被查询方数据和查询条件
使用Pandas库将DataFrame保存到CSV文件。
执行成功后,可以查看文件,alice是数据源,bob是查询条件。
物理机地址:进入alice容器,在 /root/workspace/alice_pir_input.csv路径
第四步:配置被查询方SPU
需要事先在alice的docker container内执行openssl rand 32 >/root/workspace/alice_oprf_key创建秘钥
第五步:执行查询
下一步:这里现在是输入名字,返回年龄,那怎么查年龄是26的所有人呢?