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 https://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 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
如果你覺得寫得不錯
麻煩給個贊~
關注我,帶你瞭解區塊鏈行業
推薦閱讀:
4、區塊鏈產業發展五大趨勢:資料安全、科技監管、自主可控、雙碳戰略、數字經濟
提前看到未來的人,
和花一輩子都看不清的人,
註定是截然不同的命運。
點選下方卡片關注101鏈視界,和1000+讀者**一起**
洞察技術本質
101鏈視界
區塊鏈、隱私計算與金融科技領域的專業知識分享者。
29篇原創內容
公眾號
▲ 點選上方卡片關注101鏈視界,洞察技術本質
技術交流 | 行業研報 | 前沿洞察 | 轉載開白 | 加入社群
請在公眾號後臺回覆 合作
歡迎把文章分享到朋友圈
點選JasonCeng/MultipartyPSI-Pro直達Github****連結