隐语——数据要素流通技术MOOC三期 课程笔记——综合案例与实践:跨企业数据查询

讲师 :冯宇扬(浙江大学)
核心主题 :基于PIR技术的跨企业数据隐私查询(隐语Secret Note平台实操)
分享框架:案例背景 → 数据集准备 → 实验流程(含平台实操)

一、案例背景与核心技术

1. 业务场景

  • 参与方:企业A(新型高科技企业,研发生物降解材料,未公开/未专利)、企业B(持有历史技术记录数据库)。

  • 核心需求:企业A需查询自身研发的材料是否已被企业B的数据库记录,但需严格保密查询内容。

  • 风险规避:防止企业B获知查询信息后,泄露A的研发方向、恶意抢注专利或倒卖查询信息。

2. 核心技术:PIR(Private Information Retrieval,隐私信息检索)

定义:用户从数据库查询数据时,确保数据库持有方无法获知查询的具体内容,实现"查询可见,目标隐匿"。

(1)PIR分类
分类维度 类型 核心说明
按服务器数量 单服务器PIR 仅需一个数据库服务器即可完成隐私查询
多服务器PIR 依赖多个服务器协同,通过数据分片实现隐私保护
按查询类型 Index PIR 数据库为数组结构,用户查询数组下标i,获取对应内容,服务器不知i的值
Keyword PIR 数据库为键值对(Keyword-vi),用户查询"键(Keyword)",获取"值(vi)",服务器不知Keyword
本次实践选用:单服务器Keyword PIR

二、数据集准备

实验涉及企业A(查询方,对应平台Client节点)与企业B(数据库持有方,对应平台Server节点)两类数据集,按节点分别存储。

持有方 文件名称 文件内容与作用
企业B(Server节点) db.csv 模拟数据库,含"k(键)""value(值)"两列,存储若干键值对(如k=fr对应value=rm)
serversecretkey.bin 企业B在PIR技术中使用的加密密钥
企业A(Client节点) pirquery.csv 记录待查询的"键",仅含"k"一列,单条数据(本案例查询k=fr)

三、实验流程(隐语Secret Note平台实操)

前置准备:已启动Client(企业A)、Server(企业B)两个节点,实验文件已分别上传至对应节点。

核心目标:Client在不泄露查询关键词(fr)的前提下,从Server的加密数据库中获取对应value(rm)。

1. 实验总流程

  1. 获取可用端口,配置瑞(Ray)集群(节点通讯基础)。

  2. 再次获取可用端口,配置SPU(安全计算核心组件,PIR基于SPU实现)。

  3. PIR Setup阶段(Server单独执行:将明文数据库加密为密文数据库)。

  4. PIR Online阶段(双方共同执行:Client发起查询,获取结果)。

2. 详细实操步骤

步骤1:导入依赖库
  • 操作:Client与Server节点共同执行代码,导入隐私计算所需核心包(secretflow、spu)。

  • 平台标识:代码块右上角标记"client和server",点击运行后双方同步执行。

步骤2:配置瑞(Ray)集群
  1. 获取可用端口

    执行unused_tcp_port函数(自定义实现),Client与Server分别获取唯一未占用端口(每次运行结果不同)。

  2. 记录两端口号,用于后续节点通讯配置。

  3. 初始化瑞集群

    调用sf.init()函数,核心参数包括:
    address:瑞集群地址。

  4. cluster_config:含parties(所有参与方IP+端口,IP从平台右上角"节点信息"获取)、selfparty(标识自身节点:Client/Server)。

  5. Client与Server需分别执行对应代码块(selfparty参数不同),通过"执行上方所有"功能同步触发,确保集群通讯正常。

步骤3:配置SPU(安全计算组件)
  1. 重新获取端口 :执行unused_tcp_port函数,获取新的未占用端口(SPU需独立端口运行)。

  2. 创建SPU实例

    调用sf.spu()函数,核心配置参数在spu.conf中定义:
    nodes:填入Client/Server的IP与新端口。

  3. protocol:多方安全计算协议(本实验用3pc2k)。

  4. field:计算用有限域(128bit)。

  5. sign_mode:签名函数进位方式(signModeRail)。

  6. 执行代码后生成SPU实例,为PIR提供安全计算环境。

步骤4:PIR Setup阶段(Server单独执行)

核心任务:Server用自身密钥将明文数据库(db.csv)加密为密文数据库(sdb)。

  1. 获取文件路径 :执行os.getcwd()函数,获取Server节点工作空间路径,存入current_dir变量。

  2. 调用PIR加密函数 :执行spu.pir_setup(),核心参数:
    server:被查询方节点名(server)。

  3. input_path:明文数据库路径(db.csv)。

  4. k_columns:数据库中"键"对应的列名(k)。

  5. label_columns:数据库中"值"对应的列名(value)。

  6. oprf_key_path:Server密钥路径(serversecretkey.bin)。

  7. setup_path:加密后数据库输出路径(工作目录下sdb文件)。

  8. bucket_size:数据库分桶大小(本实验设为16,因数据规模小)。

  9. 结果验证:Server工作目录新增sdb文件,即为加密后的数据库。

步骤5:PIR Online阶段(双方共同执行)

核心任务:Client发起隐私查询,获取对应结果,Server全程不知查询关键词。

  1. 密钥路径配置:将Server的密钥(serversecretkey.bin)复制到容器tmp目录(确保加密验证可用)。

  2. 发起PIR查询 :执行spu.pir_query(),核心参数:
    server/client:对应参与方节点名。

  3. server_setup_paths:加密数据库路径(sdb)。

  4. client_k_columns:Client查询文件中"键"的列名(k)。

  5. client_input_paths:Client查询文件路径(pirquery.csv)。

  6. client_output_paths:查询结果输出路径(pirresult.csv)。

  7. 结果验证

    Client工作目录新增pirresult.csv文件。

  8. 打开文件可见:查询k=fr对应的结果为rm,与数据库一致,查询隐私性与结果准确性均达标。

四、实验核心结论

  • PIR技术有效解决跨企业数据查询的隐私保护问题,实现"数据可用不可见"。

  • 隐语Secret Note平台通过节点配置、SPU安全计算等组件,可高效落地PIR技术实践。

  • 本次实验成功验证:Client在保密查询关键词的前提下,精准获取Server数据库中的目标数据。

相关推荐
云淡风轻~~10 小时前
隐语——数据要素流通技术MOOC三期 课程笔记——金融风控联合建模实验(基于Secret Note平台)
隐语
云淡风轻~~21 小时前
隐语——数据要素流通技术MOOC三期 课程笔记——星绽机密计算远程证明服务
隐语
CNZedChou1 年前
隐语隐私计算实训营「数据分析」第 5 课:隐语PSI介绍及开发实践
数据分析·隐私计算·隐语·psi·spu
Shining05961 年前
隐私计算(1)数据可信流通
学习·其他·隐私计算·隐语
硕~2 年前
隐私计算实训营学习七:隐语SCQL的架构详细拆解
架构·隐私保护·隐私计算·隐语·scql
硕~2 年前
隐私计算实训营学习二:隐私计算开源如何助力数据要素流通
学习·开源·隐私保护·隐私计算·隐语