講師:馮宇揚(浙江大學)
核心主題:基於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. 實驗總流程
- 獲取可用端口,配置瑞(Ray)集羣(節點通訊基礎)。
- 再次獲取可用端口,配置SPU(安全計算核心組件,PIR基於SPU實現)。
- PIR Setup階段(Server單獨執行:將明文數據庫加密為密文數據庫)。
- PIR Online階段(雙方共同執行:Client發起查詢,獲取結果)。
2. 詳細實操步驟
步驟1:導入依賴庫
- 操作:Client與Server節點共同執行代碼,導入隱私計算所需核心包(secretflow、spu)。
- 平台標識:代碼塊右上角標記“client和server”,點擊運行後雙方同步執行。
步驟2:配置瑞(Ray)集羣
-
獲取可用端口:
執行`unused_tcp_port`函數(自定義實現),Client與Server分別獲取唯一未佔用端口(每次運行結果不同)。 - 記錄兩端口號,用於後續節點通訊配置。
-
初始化瑞集羣:
調用`sf.init()`函數,核心參數包括: `address`:瑞集羣地址。 cluster_config:含parties(所有參與方IP+端口,IP從平台右上角“節點信息”獲取)、selfparty(標識自身節點:Client/Server)。- Client與Server需分別執行對應代碼塊(
selfparty參數不同),通過“執行上方所有”功能同步觸發,確保集羣通訊正常。
步驟3:配置SPU(安全計算組件)
- 重新獲取端口:執行
unused_tcp_port函數,獲取新的未佔用端口(SPU需獨立端口運行)。 -
創建SPU實例:
調用`sf.spu()`函數,核心配置參數在`spu.conf`中定義: `nodes`:填入Client/Server的IP與新端口。 protocol:多方安全計算協議(本實驗用3pc2k)。field:計算用有限域(128bit)。sign_mode:簽名函數進位方式(signModeRail)。- 執行代碼後生成SPU實例,為PIR提供安全計算環境。
步驟4:PIR Setup階段(Server單獨執行)
核心任務:Server用自身密鑰將明文數據庫(db.csv)加密為密文數據庫(sdb)。
- 獲取文件路徑:執行
os.getcwd()函數,獲取Server節點工作空間路徑,存入current_dir變量。 -
調用PIR加密函數:執行
spu.pir_setup(),核心參數:`server`:被查詢方節點名(server)。 input_path:明文數據庫路徑(db.csv)。k_columns:數據庫中“鍵”對應的列名(k)。label_columns:數據庫中“值”對應的列名(value)。oprf_key_path: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`:對應參與方節點名。 server_setup_paths:加密數據庫路徑(sdb)。client_k_columns:Client查詢文件中“鍵”的列名(k)。client_input_paths:Client查詢文件路徑(pirquery.csv)。client_output_paths:查詢結果輸出路徑(pirresult.csv)。-
結果驗證:
Client工作目錄新增pirresult.csv文件。 - 打開文件可見:查詢k=fr對應的結果為rm,與數據庫一致,查詢隱私性與結果準確性均達標。
四、實驗核心結論
- PIR技術有效解決跨企業數據查詢的隱私保護問題,實現“數據可用不可見”。
- 隱語Secret Note平台通過節點配置、SPU安全計算等組件,可高效落地PIR技術實踐。
- 本次實驗成功驗證:Client在保密查詢關鍵詞的前提下,精準獲取Server數據庫中的目標數據。