博客 / 詳情

返回

隱語——數據要素流通技術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數據庫中的目標數據。
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.