一個好用的多方隱私求交演算法庫JasonCeng/MultipartyPSI-Pro
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
,它需要支援PCLMUL
、AES-NI
和SSE4.1
的CPU。 可選:nasm
用於改進 SHA1 性能。
1. 克隆程式碼
git clone //github.com/JasonCeng/MultipartyPSI-Pro.git
2. 安裝依賴
程式碼已經在 Windows (Microsoft Visual Studio) 和 Linux 上進行了測試。安裝所需的庫:
- windows:
- 打開 PowerShell
cd ./thirdparty
.\all_win.ps1
(該腳本適用於 Visual Studio 2015。對於其他版本,您應該修改MSBuild
腳本中的幾個地方。)
- linux:
cd ./thirdparty
bash .\all_linux.get
.
注意:如果您遇到構建 boost、miracl 和 libOTe 的 all_win.ps1
或 all_linux.get
的問題,請按照 libOTe
上的更多手動說明進行操作)
3. 編譯
- Windows:
- 按順序構建
cryptoTools、libOTe
和libOPRF
項目。 - 為
bOPRFmain
項目添加參數(例如:-u) - 運行
bOPRFmain
- Linux:
- make (依賴:
CMake
,Make
,g++
) - 單元測試:
./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 //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
如果你覺得寫得不錯
麻煩給個贊~
關注我,帶你了解區塊鏈行業
推薦閱讀:
4、區塊鏈產業發展五大趨勢:數據安全、科技監管、自主可控、雙碳戰略、數字經濟
提前看到未來的人,
和花一輩子都看不清的人,
註定是截然不同的命運。
點擊下方卡片關注101鏈視界,和1000+讀者**一起**
洞察技術本質
101鏈視界
區塊鏈、隱私計算與金融科技領域的專業知識分享者。
29篇原創內容
公眾號
▲ 點擊上方卡片關注101鏈視界,洞察技術本質
技術交流 | 行業研報 | 前沿洞察 | 轉載開白 | 加入社群
請在公眾號後台回復 合作
歡迎把文章分享到朋友圈
點擊JasonCeng/MultipartyPSI-Pro直達Github****鏈接