魏嘯磊,林蘇,潘越,胡奇,夏天
摘? 要: 同態加密算法和安全多方計算技術可在數據加密的情況下進行多方參與的計算,可以有效的解決數據泄露問題。對常見的四種同態加密庫SEAL、HElib、PALISADE、Pyfhel進行了分析和選擇,綜合運行速度和開發效率因素,選擇Pyfhel同態加密庫,來設計與實現支持多數據源安全共享的分布式大數據協作系統。該系統為數據共享場景提供了一種可行的解決方案。
關鍵詞: 同態加密; 數據共享; Pyfhel; 多方計算
中圖分類號:TP393? ? ? ? ? 文獻標識碼:A? ? ?文章編號:1006-8228(2022)06-10-04
Research on distributed big data collaboration system supporting
secure sharing of multiple data sources
Wei Xiaolei, Lin Su, Pan Yue, Hu Qi, Xia Tian
(Wenzhou University, College of Computer Science & Artificial Intelligence, Wenzhou, Zhejiang 325035, China)
Abstract: Homomorphic encryption algorithm and secure multi-party computing technology can carry out multi-party computing under the condition of data encryption, which can effectively solve the problem of data leakage. In this paper, four common homomorphic encryption libraries SEAL, HElib, PALISADE and Pyfhel are analyzed and selected. Considering the running speed and development efficiency, Pyfhel is selected to design and implement a distributed big data collaboration system that supports the secure sharing of multiple data sources. The system provides a feasible solution for data sharing scenarios.
Key words: homomorphic encryption; data sharing; Pyfhel; multi-party computation
0 引言
隨著互聯網和大數據等技術的不斷發展,我們步入了大數據時代,數據共享、數據分析等應用的使用越來越普遍,海量數據的交叉計算可以為科研、醫療、金融等提供更好支持,但是數據的共享隨之帶來的是數據的泄露的問題。許多企業或組織出于信息安全或利益的考慮,內部數據是不對外開放的,但是這也會帶來“數據孤島”的問題,數據的價值無法體現出來。同態加密算法和安全多方計算技術可以在不泄露明文的情況下,實現多方參與的數據協同計算,實現安全的數據流通,達到數據“可用不可見”[1]。
同態加密,英文稱之為Homomorphic Encryption,HE是指滿足密文同態運算性質的加密算法,即數據經過同態加密之后,直接對密文進行同態計算,得到的密文計算結果與直接用明文進行計算的結果相一致的算法。基于同態加密的安全多方計算技術旨在解決一組互不信任的參與方之間保護隱私的協同計算問題,在不泄露原始數據前提下,為數據需求方提供多方協同計算能力。
1 同態加密算法庫
同態加密算法可以分為全同態加密算法和半同態加密算法。其中,全同態加密算法是指支持對密文進行任意形式的計算;半同態加密算法是指支持對密文進行部分形式的計算,如僅支持加法或乘法計算[6]。全同態加密算法在不斷的發展中依次出現了Gentry、BGV、BFV、GSW、CKKS等方案。一個同態加密庫可以支持多種算法,如SEAL可以支持BFV和CKKS方案、HElib可以支持CKKS方案、PALISADE可以支持BGV、BFV、CKKS等方案。Pyfhel庫是基于SEAL/PALISADE/HElib開發的。
1.1 四種同態加密庫的簡介和調用方法
SEAL是微軟開源的同態加密庫,有C++和C#版本,并逐漸推廣應用到Python、Javascript和TypeScript。它支持不對稱和對稱加密算法,提供了兩種機制的同態加密,BFV和CKKS[2]。它支持Windows、Linux、macOS、FreeBSD、Android等操作系統平臺,并支持
.NET開發,使開發人員編寫同態加密應用程序更為便捷。在Windows中SEAL的安裝需要借助Visual studio進行安裝和配置。首先需要安裝C++編譯運行環境,然后下載SEAL源碼文件,編譯解析源碼文件,生成seal.lib文件。在調用時,需添加該lib文件的附件庫目錄、附加包含目錄和附件依賴項。總體上,安裝相對比較復雜。
HElib由C++編寫,使用了NTL數學庫,可實現無自舉的同態加密和近似數算數的同態加密,支持密文的加法和乘法。安裝HElib需要先下載HElib源碼和HElib依賴。有兩種不同的方式來構建和安裝HElib。一種是自動下載和構建GMP和 NTL依賴項,并將庫打包在可重定位的文件夾中。第二種要求自行安裝GMP與NTL并在系統中可用。調用時需要添加頭文件目錄、lib文件目錄、庫文件目錄。HElib適用于Linux、MacOS等平臺[4]。
PALISADE是一個由Duality公司研發的基于C++編寫的通用綜合格密碼庫。該庫是模塊化系統結構,側重于可用性。在增加安全性方面,它運用了數字簽名、基于身份的加密和基于屬性加密的密文策略。在性能方面,PALISADE有效地實現了余數系統算法,提高了全同態加密方案的性能。PALISADE擁有跨平臺性,支持在Linux、Windows、macOS平臺上安裝,同時可以使用CMake/make自定義安裝。以Linux安裝為例,首先需要下載MSYS2,然后下載對應源碼進行編譯和構建,調用方式與HElib類似[5]。
Pyfhel是支持Python語言的一個同態加密庫,底層由C++語言開發,使用SEAL/HElib/PALISADE作為后端。支持密文的整型和雙精度浮點型數的加法、乘法、減法和冪指數的運算。Pyfhel適用于任何擁有Python環境的平臺。安裝時,只需要運行pip install pyfhel命令,安裝簡單。調用時只需導入Pyfhel庫,并調用庫中函數即可[3]。
1.2 四種同態加密庫比較與選擇
本文在Linux Kali2020虛擬機(CPU數量為1、內核為1,內存為2G)中對上述四個同態加密庫進行了運行時處理速度的測試。其中,統一運用CKKS全同態加密方案,每種程序運行次數都經過10輪并取平均,結果如表1和表2所示。由表1可見,其中SEAL和Pyfhel運行時間增加是比較平穩的,而HElib和PALISADE當次數較少時運行速度較優,但當次數較大時運行時間將會大幅度增加。由乘法同態測試發現,乘法會產生大量噪聲,所以不同算法對乘法的運算次數的支持會有限制,表2中標注了實驗中測到的運算上限。在乘法運算速度上,SEAL和HElib比較快,但在乘法運算次數上會比PALISADE略差。
綜合上述結果的比較,發現Pyfhel同態加密庫在加法的運算速度和乘法的運算次數上性能適中,而安裝和調用方面是四種庫中最便捷的,所以我們選擇了Pyfhel同態加密庫和Python語言來實現我們的支持多數據源安全共享的分布式大數據協作系統。
2 運用pyfhel實現支持多數據源安全共享的分布式大數據協作系統
2.1系統總體設計
數字經濟時代,企業或組織需要在數據流通和交易方面進行深度合作。通過各方數據協同計算,可以大程度的利用數據的價值,提升生產效率,推動產業創新。而保護各方數據在共享計算時不被泄露是企業或組織參與數據共享合作的前提條件。例如銀行需要對企業做出評估,需要政府方面的數據信息來進行計算。如果直接把數據給銀行,會產生數據泄露的問題,因此,亟需運用同態加密和安全多方計算技術開發一個第三方平臺使其能夠獲得政府加密以后的數據并進行計算,并將結果返回給銀行。
根據多方數據安全共享的需求,運用同態加密和多方計算技術設計與開發支持多數據源安全共享的分布式大數據協作系統。系統包括密鑰生成、密鑰重置、加密、解密、計算、系統管理等六個主要功能模塊,其中系統管理包括風控模型管理、數據源管理、用戶管理。系統整個流程是客戶端負責產生和更新同態加密所需的密鑰對,并將加密參數、公鑰等除私鑰以外文件上傳到平臺上保存;數據源端從平臺獲取公鑰來加密所需的數據,并將加密后的數據發往平臺進行計算;平臺根據分控模型將收到的數據進行同態加密計算,并將得到的結果發送給客戶端;客戶端用私鑰對計算后的密文進行解密得到明文結果。在整個業務交互過程中,除了數據源,其他參與方都無法獲得明文數據,因此保障了數據共享的保密性、完整性。各模塊與系統的三個組成部分的關系如圖1所示。
2.2 關鍵模塊設計
下文就密鑰生成、密鑰重置、系統管理、加密、計算、解密等系統關鍵功能模塊展開設計介紹。
⑴ 密鑰生成:直接調用Pyfhel庫,生成密鑰對,然后將公私鑰分別存到兩個文件中。
⑵ 密鑰重置:對密鑰進行定時更新,增加系統安全性。客戶端具有密鑰重置功能,在第一次密鑰生成之后,會在本地生成一個up.dat文件,該文件存儲著密鑰本次生成或更新的時間戳,如果該時間戳和當前時間相差超過更新周期,則會自動地重新生成加密參數、公鑰、私鑰等文件,并將除私鑰以外的文件上傳到平臺上進行保存或更新。
⑶ 系統管理:包括風控模型管理、數據源管理、用戶管理,如圖2所示。風控模型為系統中的計算模型。用戶管理是主要對不同角色用戶的管理。
⑷ 加密:在數據源端加載執行。當數據源端收到平臺請求并確定請求的數據范圍后,將會從平臺下載相應客戶端的加密參數、公鑰等文件,然后從本地逐一調取數據進行加密操作,加密調用的是Pyfhel庫中的encode函數和encrypt函數,最后將密文發送給平臺。
⑸ 計算:平臺接收到計算請求后,根據風控模型向數據源請求數據,并在收到數據源發送的密文數據后進行計算,如圖3所示。計算調用的是Pyfhel同態加密庫中的運算函數。針對計算過程中的噪音問題,系統加入了判決操作,通過noiseBudget參數是否為0判斷計算結果的正確性,并將正確的密文結果發送給客戶端。
⑹ 解密:客戶端在接收到平臺發送的密文結果后,運用私鑰文件和Pyfhel庫中decrypt函數對密文結果進行解密,然后再用decode函數進行解碼得到明文結果。
2.3 系統實現
該系統是一個Web平臺,前端運用Bootstrap框架,后端運用Django框架,前后端的交互運用Ajax技術,數據存儲運用的是MySql技術,有關同態加密計算方面運用的是Python的Pyfhel同態加密庫。系統的技術實現如圖4所示。為了提高系統客戶端的兼容性,客戶端頁采用Web形式實現,主要包括密鑰生成、管理風控模型功能。平臺管理員具有管理企業用戶和數據源的功能。其中,企業用戶即需要數據進行風控模型計算獲得運算結果的客戶端用戶。數據源管理員可登錄平臺查看數據源使用情況,主要包括數據源的ID、名稱、IP地址、端口號、被使用的次數等信息。
3 結束語
本文在比較了四種同態加密庫以后,選擇使用Python語言和Pyfhel同態加密庫,設計和實現了一個支持多數據源安全共享的分布式大數據協作系統。該系統能夠解決企業風控值計算場景中數據共享的安全性問題。該方案在不泄露源數據的情況下進行安全共享計算,可以讓數據的價值得以體現,該方案可以推廣和衍生到更多共享的場景中。在未來,我們將結合區塊鏈技術對同態加密算法做更深入的研究,使其能夠支持更大規模的計算。
參考文獻(References):
[1] 郭娟娟,王瓊霄,許新,等.安全多方計算及其在機器學習中的應用[J].計算機研究與發展,2021,58(10):2163-2186
[2] Yatao YANG, Yang ZHAO, Juanmei ZHANG, Jierun HUANG, Yuan GAO. Recent Development of Theory and Application on Homomorphic Encryption[J]. Journal of Electronics and Information Technology,2021,43(2):475-487
[3] Ibarrondo,&Gomez,Pyfhel.Retrieved[EB/OL].(2021-09-06)[2021.11.08].https://github.com/ibarrond/Pyfhel.
[4] Halevi, S., Shoup, V.: Algorithms in HElib. In: Garay, J.A.,Gennaro, R. (eds.) CRYPTO 2014, Part I. LNCS, vol. 8616,pp.554-571. Springer, Heidelberg[EB/OL].(2014)[2021.11.08].http://eprint.iacr.org/2014/106
[5] Polyakov,PALISADEDevelopment. Retrieved[EB/OL].(2020)[2021.11.08].https://gitlab.com/pallisadeli sade/palisade-development
[6] 馮超.全同態加密的相關算法研究[D].山東大學,2015