一個好用的多方隱私求交演算法庫JasonCeng/MultipartyPSI-Pro

JasonCeng發表於2022-02-12

Github連結傳送:JasonCeng/MultipartyPSI-Pro

大家好,我是阿創,這是我的第29篇原創文章。

今天是一篇純技術性文章,希望對工程獅們?有所幫助。

向大家推薦一個我最近改造的演算法庫(JasonCeng/MultipartyPSI-Pro

主要涉及隱私計算、聯邦學習領域,是一個支援多方的隱私求交演算法庫,主要是是基於osu-crypto/MultipartyPSI****的增強實現。

詳細介紹就是下方的README啦~

基於可程式設計不經意偽隨機數的多方隱私求交演算法庫

Programmable Oblivious PRF & multi-party PSI

? 簡介

本演算法庫是基於osu-crypto/MultipartyPSI的增強實現。

該演算法的原論文來自 CCS 2017 : Practical Multi-party Private Set Intersection from Symmetric-Key Techniques[ePrint]

✨ 特性

  • 簡潔的 API 設計,使用如絲滑般流暢
  • 支援多方隱私求交
  • 支援讀取檔案資料
  • 支援多機通訊
  • 增強半誠實模型標準半誠實模型中實現了多方PSI(nPSI),安全性有保障
  • 核心演算法可程式設計OPRF(Programmable Oblivious PRF),包含以下多種實現:
    • Table-based OPPRF
    • Polynomial-based OPPRF
    • BloomFilter-based OPPRF
  • 詳細的文件和示例,幫助開發者更快的上手專案

?️ 驗證情況

  • 機器配置: 1C 2G (Intel(R) Core(TM) i7-8665U CPU @ 1.90GHz)
  • 數量:3臺(3方)
  • 資料集大小:8條
  • 資料長度:128bit
  • 3方求交耗時:1.035 s

? 使用

依賴庫

注:對於libOTe,它需要支援PCLMULAES-NISSE4.1的CPU。 可選:nasm 用於改進 SHA1 效能。

1. 克隆程式碼

git clone https://github.com/JasonCeng/MultipartyPSI-Pro.git

2. 安裝依賴

程式碼已經在 Windows (Microsoft Visual Studio) 和 Linux 上進行了測試。安裝所需的庫:

  • windows:
  1. 開啟 PowerShell
  2. cd ./thirdparty
  3. .\all_win.ps1 (該指令碼適用於 Visual Studio 2015。對於其他版本,您應該修改 MSBuild 指令碼中的幾個地方。)
  • linux:
  1. cd ./thirdparty
  2. bash .\all_linux.get.

注意:如果您遇到構建 boost、miracl 和 libOTe 的 all_win.ps1all_linux.get 的問題,請按照 libOTe 上的更多手動說明進行操作)

3. 編譯

  • Windows:
  1. 按順序構建 cryptoTools、libOTelibOPRF專案。
  2. bOPRFmain專案新增引數(例如:-u)
  3. 執行bOPRFmain
  • Linux:
  1. make (依賴: CMake, Make, g++)
  2. 單元測試: ./bin/frontend.exe -u

4. 執行

輸出包括online/offline/total平均執行時長。

引數列表:

-u		單元測試:computes PSI of 5 paries, 2 dishonestly colluding, each with set size 2^12 in semihonest setting
-n		參與方數量
-p		參與方ID,ID最大的參與方為結果接收方
-m		set size
-t		惡意參與方數量(在不誠實模型設定中生效)
-a		以增強半誠實模型模式執行。預設使用Table-based OPPRF演算法。
			0: Table-based; 1: POLY-seperated; 2-POLY-combined; 3-BloomFilter
-r		當 r = 1 時使用優化的3方PSI演算法
-f		輸入資料的文字檔案(絕對路徑或相對路徑均可以)
-ip		其他參與方ip,且相對順序需與-p的編號保持一致。比如-p 0所帶的-ip的順序需為<-p 1 ip>,<-p 2 ip>

示例:

1. 單元測試
./bin/frontend.exe -u
2. nPSI

在半誠實模型設定中,計算3方的PSI,其中包含2個不誠實方,資料儲存在data.bin中。

三臺機器的ip分別是:192.168.1.10,192.168.1.11,192.168.1.12

# 機器1-192.168.1.10:
./bin/frontend.exe -n 3 -t 2 -m 12 -p 0 -f ./data.bin -ip 192.168.1.11,192.168.1.12 > log01.log

# 機器2-192.168.1.11:
./bin/frontend.exe -n 3 -t 2 -m 12 -p 1 -f ./data.bin -ip 192.168.1.10,192.168.1.12 > log02.log

# 機器3-192.168.1.12:
./bin/frontend.exe -n 3 -t 2 -m 12 -p 2 -f ./data.bin -ip 192.168.1.10,192.168.1.11 > log03.log

注意:-ip後所帶的ip為其他參與方ip,且相對順序需與-p的編號保持一致。比如-p 0所帶的-ip的順序需為<-p 1 ip>,<-p 2 ip>

5. 總結

1. git clone https://github.com/JasonCeng/MultipartyPSI-Pro.git  
2. cd thirdparty/
3. bash all_linux.get 
4. cd ..
5. cmake .
6. make -j
7. 在三臺機器上執行:
# 機器1:
./bin/frontend.exe -n 3 -t 2 -m 12 -p 0 -f ./data.bin -ip 192.168.1.11,192.168.1.12 > log01.log

# 機器2:
./bin/frontend.exe -n 3 -t 2 -m 12 -p 1 -f ./data.bin -ip 192.168.1.10,192.168.1.12 > log02.log

# 機器3:
./bin/frontend.exe -n 3 -t 2 -m 12 -p 2 -f ./data.bin -ip 192.168.1.10,192.168.1.11 > log03.log

? 後續工作

  • [ ] 移除執行時非必要引數,如-m
  • [ ] 所有分支均支援-f傳入文字檔案資料
  • [ ] 所有分支均支援-ip進行多機通訊
  • [ ] 輸出求交結果到指定路徑,由leader傳入指定路徑
  • [ ] 對小樣本、大樣本資料進行測試

? 幫助

有關構建或執行該演算法庫的任何問題,請聯絡 JasonCeng by email: zengzhaochuangx@qq.com

如果你覺得寫得不錯

麻煩給個贊~

關注我,帶你瞭解區塊鏈行業

推薦閱讀:

1、《區塊鏈是構建產業網際網路的可信基礎設施》

2、《隱私計算佈局思考》

3、讀書 |《資料資產論》:資料如何資產化?

4、區塊鏈產業發展五大趨勢:資料安全、科技監管、自主可控、雙碳戰略、數字經濟

5、揭祕北京冬奧會開幕式“數字雪花”背後的區塊鏈技術

6、Web3對於我們普通人意味著什麼?

7、最近火爆的數字藏品究竟是什麼?


提前看到未來的人,
和花一輩子都看不清的人,
註定是截然不同的命運。

點選下方卡片關注101鏈視界,和1000+讀者**一起**

洞察技術本質

101鏈視界

區塊鏈、隱私計算與金融科技領域的專業知識分享者。

29篇原創內容

公眾號

▲ 點選上方卡片關注101鏈視界,洞察技術本質

技術交流 | 行業研報 | 前沿洞察 | 轉載開白 | 加入社群

請在公眾號後臺回覆 合作

歡迎把文章分享到朋友圈

圖片點選JasonCeng/MultipartyPSI-Pro直達Github****連結

相關文章