讲师:冯宇扬(浙江大学)
核心主题:基于PIR技术的跨企业数据隐私查询(隐语Secret Note平台实操)
分享结构:案例背景 → 数据集准备 → 实验流程(含平台实操)
一、核心技术与场景解析
1. 业务背景
参与方设定:
- 企业A:一家专注于研发新型生物降解材料的高科技公司,其研究成果尚未公开或申请专利。
- 企业B:拥有历史技术资料数据库的企业,掌握大量过往研发记录。
核心诉求:企业A希望确认其正在研发的材料是否已被企业B收录于数据库中。然而,在查询过程中必须确保自身研发信息不被泄露。
潜在风险控制:避免企业B通过查询内容推测出企业A的技术方向,防止出现技术泄密、恶意抢注专利或倒卖情报等行为。
2. 关键技术:PIR(Private Information Retrieval,隐私信息检索)
定义说明:PIR是一种允许用户从远程数据库中获取数据,而数据库持有者无法得知具体查询项的技术机制,实现“查询可执行,目标不可见”。
PIR主要分类如下:
| 分类维度 | 类型 | 核心说明 |
|---|---|---|
| 按服务器数量 | 单服务器PIR | 仅需一个数据库节点即可完成隐私保护查询 |
| 按服务器数量 | 多服务器PIR | 依赖多个服务器协作,通过数据分片方式保障隐私安全 |
| 按查询类型 | Index PIR | 适用于数组型数据库,用户指定索引i获取对应值,服务器不知晓i的具体数值 |
| 按查询类型 | Keyword PIR | 适用于键值对结构数据库,用户根据关键词(Key)查询对应值(Value),服务器无法获知关键词内容 |
本次实验采用方案:单服务器 + Keyword PIR 模式
二、数据集构建与分配
实验涉及两个角色:企业A作为查询方(Client节点),企业B作为数据库提供方(Server节点)。各自持有特定数据文件。
| 持有方 | 文件名称 | 内容描述与功能 |
|---|---|---|
| 企业B(Server节点) | db.csv | 模拟数据库文件,包含两列:“k”(键)和“value”(值),存储若干键值对示例(如 k=fr 对应 value=rm) |
| 企业B(Server节点) | serversecretkey.bin | 用于PIR加密过程中的私钥文件,由企业B独立保管 |
| 企业A(Client节点) | pirquery.csv | 待查询关键词列表,仅含“k”一列,本案例中包含一条记录:k=fr |
unused_tcp_port
三、实验操作流程(基于隐语Secret Note平台)
前置条件
已成功启动Client(企业A)与Server(企业B)两个计算节点,并将上述数据文件分别上传至对应节点的工作目录。
实验目标:企业A在不暴露查询关键词“fr”的前提下,从企业B的加密数据库中准确获取对应的返回值“rm”。
1. 整体流程概览
- 获取可用通信端口,配置瑞(Ray)集群(支撑节点间通信);
- 再次获取独立端口,部署SPU安全计算组件(PIR运算依托于此);
- 执行PIR Setup阶段:由Server将明文数据库加密转换为密文数据库;
- 进入PIR Online阶段:Client发起隐私查询请求,双方协同完成结果获取。
2. 具体操作步骤
步骤1:导入必要依赖库
操作说明:Client与Server节点均需运行相同代码块,加载隐私计算核心库(如 secretflow、spu 等)。
平台提示:代码区域右上角标注“client和server”,点击运行后双端同步执行。
步骤2:配置瑞(Ray)集群
获取可用端口:
调用自定义函数以获取当前系统未被占用的端口号,Client与Server分别执行,确保各自获得唯一端口(每次运行结果可能不同)。
sf.init()
记录所获端口号,后续用于节点通信配置。
初始化Ray集群:
调用初始化函数,关键参数包括:
:Ray集群访问地址;address
:配置对象,内含以下子项:cluster_config
:所有参与方的IP地址与端口组合(IP信息可通过平台右上角“节点信息”查看);parties
:标识当前运行节点身份(Client 或 Server)。selfparty
selfparty
执行要求:Client与Server分别填写对应的身份参数并执行代码,建议使用“执行上方所有”功能保证同步性,确保集群连接正常建立。
步骤3:配置SPU安全计算环境
重新获取端口:再次调用端口获取函数(同前),为SPU组件分配独立通信端口。
unused_tcp_port
创建SPU实例:
调用创建函数,主要配置项定义于以下参数中:
:填入当前节点的IP地址及新获取的端口;nodes
:选择多方安全计算协议,本实验采用3pc2k协议;protocol
:设定计算使用的有限域大小为128位;field
:设置签名函数的进位模式为signModeRail。sign_mode
sf.spu()
执行完成后生成SPU运行实例,为后续PIR操作提供加密计算支持。
spu.conf
步骤4:PIR Setup阶段(由Server单独执行)
核心任务:利用企业B本地密钥对原始数据库(db.csv)进行加密处理,生成密文数据库(sdb)。
获取工作路径:
执行函数获取Server端的工作空间绝对路径,并存入变量中以便引用。
os.getcwd()
current_dir
调用PIR加密接口:
执行加密函数,传入以下关键参数:
:指定服务方节点名称(server);server
:明文数据库文件路径(db.csv);input_path
:数据库中表示“键”的字段名(k);k_columns
:数据库中表示“值”的字段名(value);label_columns
:其他扩展参数(如有)oprf_key_path
spu.pir_setup()Server密钥路径(serversecretkey.bin)。
setup_path
加密后数据库的输出路径(位于工作目录下的sdb文件)。
bucket_size
数据库分桶大小设置(本实验中设定为16,适用于小规模数据场景)。
结果验证
检查Server工作目录,确认生成了新的sdb文件,该文件即为已完成加密的数据库。
步骤5:PIR Online阶段(双方协同执行)
核心目标:Client发起隐私查询并获取结果,整个过程中Server无法获知实际查询内容。
密钥路径配置
将Server端的密钥文件(serversecretkey.bin)复制至容器的tmp目录下,以确保后续加密验证流程可正常进行。
发起PIR查询
执行以下操作:
spu.pir_query()
主要参数说明如下:
:对应参与方的节点名称。server/client
:指定加密数据库文件的路径(sdb格式)。server_setup_paths
:Client查询文件中用于匹配的“键”所在列名(k)。client_k_columns
:Client侧查询输入文件的路径(pirquery.csv)。client_input_paths
:查询结果的输出路径(pirresult.csv)。client_output_paths
结果验证
在Client的工作目录中,确认生成了新的pirresult.csv文件。
打开该文件可查看:当查询键k=fr时,返回结果为rm,与原始数据库记录一致。表明查询过程既保证了隐私性,又实现了结果的准确性。
四、实验核心结论
PIR技术能够有效应对跨企业间数据查询中的隐私泄露风险,真正实现“数据可用不可见”的安全目标。
通过隐语Secret Note平台提供的节点配置机制与SPU安全计算模块,PIR技术得以高效部署与实践。
本次实验成功验证:Client在完全隐藏查询关键词的前提下,仍能准确获取Server数据库中的目标信息,达到隐私保护与数据可用性的双重目标。


雷达卡


京公网安备 11010802022788号







