魏嘯磊,林蘇,潘越,胡奇,夏天
摘? 要: 同態(tài)加密算法和安全多方計(jì)算技術(shù)可在數(shù)據(jù)加密的情況下進(jìn)行多方參與的計(jì)算,可以有效的解決數(shù)據(jù)泄露問題。對常見的四種同態(tài)加密庫SEAL、HElib、PALISADE、Pyfhel進(jìn)行了分析和選擇,綜合運(yùn)行速度和開發(fā)效率因素,選擇Pyfhel同態(tài)加密庫,來設(shè)計(jì)與實(shí)現(xiàn)支持多數(shù)據(jù)源安全共享的分布式大數(shù)據(jù)協(xié)作系統(tǒng)。該系統(tǒng)為數(shù)據(jù)共享場景提供了一種可行的解決方案。
關(guān)鍵詞: 同態(tài)加密; 數(shù)據(jù)共享; Pyfhel; 多方計(jì)算
中圖分類號:TP393? ? ? ? ? 文獻(xiàn)標(biāo)識碼: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 引言
隨著互聯(lián)網(wǎng)和大數(shù)據(jù)等技術(shù)的不斷發(fā)展,我們步入了大數(shù)據(jù)時(shí)代,數(shù)據(jù)共享、數(shù)據(jù)分析等應(yīng)用的使用越來越普遍,海量數(shù)據(jù)的交叉計(jì)算可以為科研、醫(yī)療、金融等提供更好支持,但是數(shù)據(jù)的共享隨之帶來的是數(shù)據(jù)的泄露的問題。許多企業(yè)或組織出于信息安全或利益的考慮,內(nèi)部數(shù)據(jù)是不對外開放的,但是這也會帶來“數(shù)據(jù)孤島”的問題,數(shù)據(jù)的價(jià)值無法體現(xiàn)出來。同態(tài)加密算法和安全多方計(jì)算技術(shù)可以在不泄露明文的情況下,實(shí)現(xiàn)多方參與的數(shù)據(jù)協(xié)同計(jì)算,實(shí)現(xiàn)安全的數(shù)據(jù)流通,達(dá)到數(shù)據(jù)“可用不可見”[1]。
同態(tài)加密,英文稱之為Homomorphic Encryption,HE是指滿足密文同態(tài)運(yùn)算性質(zhì)的加密算法,即數(shù)據(jù)經(jīng)過同態(tài)加密之后,直接對密文進(jìn)行同態(tài)計(jì)算,得到的密文計(jì)算結(jié)果與直接用明文進(jìn)行計(jì)算的結(jié)果相一致的算法?;谕瑧B(tài)加密的安全多方計(jì)算技術(shù)旨在解決一組互不信任的參與方之間保護(hù)隱私的協(xié)同計(jì)算問題,在不泄露原始數(shù)據(jù)前提下,為數(shù)據(jù)需求方提供多方協(xié)同計(jì)算能力。
1 同態(tài)加密算法庫
同態(tài)加密算法可以分為全同態(tài)加密算法和半同態(tài)加密算法。其中,全同態(tài)加密算法是指支持對密文進(jìn)行任意形式的計(jì)算;半同態(tài)加密算法是指支持對密文進(jìn)行部分形式的計(jì)算,如僅支持加法或乘法計(jì)算[6]。全同態(tài)加密算法在不斷的發(fā)展中依次出現(xiàn)了Gentry、BGV、BFV、GSW、CKKS等方案。一個(gè)同態(tài)加密庫可以支持多種算法,如SEAL可以支持BFV和CKKS方案、HElib可以支持CKKS方案、PALISADE可以支持BGV、BFV、CKKS等方案。Pyfhel庫是基于SEAL/PALISADE/HElib開發(fā)的。
1.1 四種同態(tài)加密庫的簡介和調(diào)用方法
SEAL是微軟開源的同態(tài)加密庫,有C++和C#版本,并逐漸推廣應(yīng)用到Python、Javascript和TypeScript。它支持不對稱和對稱加密算法,提供了兩種機(jī)制的同態(tài)加密,BFV和CKKS[2]。它支持Windows、Linux、macOS、FreeBSD、Android等操作系統(tǒng)平臺,并支持
.NET開發(fā),使開發(fā)人員編寫同態(tài)加密應(yīng)用程序更為便捷。在Windows中SEAL的安裝需要借助Visual studio進(jìn)行安裝和配置。首先需要安裝C++編譯運(yùn)行環(huán)境,然后下載SEAL源碼文件,編譯解析源碼文件,生成seal.lib文件。在調(diào)用時(shí),需添加該lib文件的附件庫目錄、附加包含目錄和附件依賴項(xiàng)??傮w上,安裝相對比較復(fù)雜。
HElib由C++編寫,使用了NTL數(shù)學(xué)庫,可實(shí)現(xiàn)無自舉的同態(tài)加密和近似數(shù)算數(shù)的同態(tài)加密,支持密文的加法和乘法。安裝HElib需要先下載HElib源碼和HElib依賴。有兩種不同的方式來構(gòu)建和安裝HElib。一種是自動下載和構(gòu)建GMP和 NTL依賴項(xiàng),并將庫打包在可重定位的文件夾中。第二種要求自行安裝GMP與NTL并在系統(tǒng)中可用。調(diào)用時(shí)需要添加頭文件目錄、lib文件目錄、庫文件目錄。HElib適用于Linux、MacOS等平臺[4]。
PALISADE是一個(gè)由Duality公司研發(fā)的基于C++編寫的通用綜合格密碼庫。該庫是模塊化系統(tǒng)結(jié)構(gòu),側(cè)重于可用性。在增加安全性方面,它運(yùn)用了數(shù)字簽名、基于身份的加密和基于屬性加密的密文策略。在性能方面,PALISADE有效地實(shí)現(xiàn)了余數(shù)系統(tǒng)算法,提高了全同態(tài)加密方案的性能。PALISADE擁有跨平臺性,支持在Linux、Windows、macOS平臺上安裝,同時(shí)可以使用CMake/make自定義安裝。以Linux安裝為例,首先需要下載MSYS2,然后下載對應(yīng)源碼進(jìn)行編譯和構(gòu)建,調(diào)用方式與HElib類似[5]。
Pyfhel是支持Python語言的一個(gè)同態(tài)加密庫,底層由C++語言開發(fā),使用SEAL/HElib/PALISADE作為后端。支持密文的整型和雙精度浮點(diǎn)型數(shù)的加法、乘法、減法和冪指數(shù)的運(yùn)算。Pyfhel適用于任何擁有Python環(huán)境的平臺。安裝時(shí),只需要運(yùn)行pip install pyfhel命令,安裝簡單。調(diào)用時(shí)只需導(dǎo)入Pyfhel庫,并調(diào)用庫中函數(shù)即可[3]。
1.2 四種同態(tài)加密庫比較與選擇
本文在Linux Kali2020虛擬機(jī)(CPU數(shù)量為1、內(nèi)核為1,內(nèi)存為2G)中對上述四個(gè)同態(tài)加密庫進(jìn)行了運(yùn)行時(shí)處理速度的測試。其中,統(tǒng)一運(yùn)用CKKS全同態(tài)加密方案,每種程序運(yùn)行次數(shù)都經(jīng)過10輪并取平均,結(jié)果如表1和表2所示。由表1可見,其中SEAL和Pyfhel運(yùn)行時(shí)間增加是比較平穩(wěn)的,而HElib和PALISADE當(dāng)次數(shù)較少時(shí)運(yùn)行速度較優(yōu),但當(dāng)次數(shù)較大時(shí)運(yùn)行時(shí)間將會大幅度增加。由乘法同態(tài)測試發(fā)現(xiàn),乘法會產(chǎn)生大量噪聲,所以不同算法對乘法的運(yùn)算次數(shù)的支持會有限制,表2中標(biāo)注了實(shí)驗(yàn)中測到的運(yùn)算上限。在乘法運(yùn)算速度上,SEAL和HElib比較快,但在乘法運(yùn)算次數(shù)上會比PALISADE略差。
綜合上述結(jié)果的比較,發(fā)現(xiàn)Pyfhel同態(tài)加密庫在加法的運(yùn)算速度和乘法的運(yùn)算次數(shù)上性能適中,而安裝和調(diào)用方面是四種庫中最便捷的,所以我們選擇了Pyfhel同態(tài)加密庫和Python語言來實(shí)現(xiàn)我們的支持多數(shù)據(jù)源安全共享的分布式大數(shù)據(jù)協(xié)作系統(tǒng)。
2 運(yùn)用pyfhel實(shí)現(xiàn)支持多數(shù)據(jù)源安全共享的分布式大數(shù)據(jù)協(xié)作系統(tǒng)
2.1系統(tǒng)總體設(shè)計(jì)
數(shù)字經(jīng)濟(jì)時(shí)代,企業(yè)或組織需要在數(shù)據(jù)流通和交易方面進(jìn)行深度合作。通過各方數(shù)據(jù)協(xié)同計(jì)算,可以大程度的利用數(shù)據(jù)的價(jià)值,提升生產(chǎn)效率,推動產(chǎn)業(yè)創(chuàng)新。而保護(hù)各方數(shù)據(jù)在共享計(jì)算時(shí)不被泄露是企業(yè)或組織參與數(shù)據(jù)共享合作的前提條件。例如銀行需要對企業(yè)做出評估,需要政府方面的數(shù)據(jù)信息來進(jìn)行計(jì)算。如果直接把數(shù)據(jù)給銀行,會產(chǎn)生數(shù)據(jù)泄露的問題,因此,亟需運(yùn)用同態(tài)加密和安全多方計(jì)算技術(shù)開發(fā)一個(gè)第三方平臺使其能夠獲得政府加密以后的數(shù)據(jù)并進(jìn)行計(jì)算,并將結(jié)果返回給銀行。
根據(jù)多方數(shù)據(jù)安全共享的需求,運(yùn)用同態(tài)加密和多方計(jì)算技術(shù)設(shè)計(jì)與開發(fā)支持多數(shù)據(jù)源安全共享的分布式大數(shù)據(jù)協(xié)作系統(tǒng)。系統(tǒng)包括密鑰生成、密鑰重置、加密、解密、計(jì)算、系統(tǒng)管理等六個(gè)主要功能模塊,其中系統(tǒng)管理包括風(fēng)控模型管理、數(shù)據(jù)源管理、用戶管理。系統(tǒng)整個(gè)流程是客戶端負(fù)責(zé)產(chǎn)生和更新同態(tài)加密所需的密鑰對,并將加密參數(shù)、公鑰等除私鑰以外文件上傳到平臺上保存;數(shù)據(jù)源端從平臺獲取公鑰來加密所需的數(shù)據(jù),并將加密后的數(shù)據(jù)發(fā)往平臺進(jìn)行計(jì)算;平臺根據(jù)分控模型將收到的數(shù)據(jù)進(jìn)行同態(tài)加密計(jì)算,并將得到的結(jié)果發(fā)送給客戶端;客戶端用私鑰對計(jì)算后的密文進(jìn)行解密得到明文結(jié)果。在整個(gè)業(yè)務(wù)交互過程中,除了數(shù)據(jù)源,其他參與方都無法獲得明文數(shù)據(jù),因此保障了數(shù)據(jù)共享的保密性、完整性。各模塊與系統(tǒng)的三個(gè)組成部分的關(guān)系如圖1所示。
2.2 關(guān)鍵模塊設(shè)計(jì)
下文就密鑰生成、密鑰重置、系統(tǒng)管理、加密、計(jì)算、解密等系統(tǒng)關(guān)鍵功能模塊展開設(shè)計(jì)介紹。
⑴ 密鑰生成:直接調(diào)用Pyfhel庫,生成密鑰對,然后將公私鑰分別存到兩個(gè)文件中。
⑵ 密鑰重置:對密鑰進(jìn)行定時(shí)更新,增加系統(tǒng)安全性??蛻舳司哂忻荑€重置功能,在第一次密鑰生成之后,會在本地生成一個(gè)up.dat文件,該文件存儲著密鑰本次生成或更新的時(shí)間戳,如果該時(shí)間戳和當(dāng)前時(shí)間相差超過更新周期,則會自動地重新生成加密參數(shù)、公鑰、私鑰等文件,并將除私鑰以外的文件上傳到平臺上進(jìn)行保存或更新。
⑶ 系統(tǒng)管理:包括風(fēng)控模型管理、數(shù)據(jù)源管理、用戶管理,如圖2所示。風(fēng)控模型為系統(tǒng)中的計(jì)算模型。用戶管理是主要對不同角色用戶的管理。
⑷ 加密:在數(shù)據(jù)源端加載執(zhí)行。當(dāng)數(shù)據(jù)源端收到平臺請求并確定請求的數(shù)據(jù)范圍后,將會從平臺下載相應(yīng)客戶端的加密參數(shù)、公鑰等文件,然后從本地逐一調(diào)取數(shù)據(jù)進(jìn)行加密操作,加密調(diào)用的是Pyfhel庫中的encode函數(shù)和encrypt函數(shù),最后將密文發(fā)送給平臺。
⑸ 計(jì)算:平臺接收到計(jì)算請求后,根據(jù)風(fēng)控模型向數(shù)據(jù)源請求數(shù)據(jù),并在收到數(shù)據(jù)源發(fā)送的密文數(shù)據(jù)后進(jìn)行計(jì)算,如圖3所示。計(jì)算調(diào)用的是Pyfhel同態(tài)加密庫中的運(yùn)算函數(shù)。針對計(jì)算過程中的噪音問題,系統(tǒng)加入了判決操作,通過noiseBudget參數(shù)是否為0判斷計(jì)算結(jié)果的正確性,并將正確的密文結(jié)果發(fā)送給客戶端。
⑹ 解密:客戶端在接收到平臺發(fā)送的密文結(jié)果后,運(yùn)用私鑰文件和Pyfhel庫中decrypt函數(shù)對密文結(jié)果進(jìn)行解密,然后再用decode函數(shù)進(jìn)行解碼得到明文結(jié)果。
2.3 系統(tǒng)實(shí)現(xiàn)
該系統(tǒng)是一個(gè)Web平臺,前端運(yùn)用Bootstrap框架,后端運(yùn)用Django框架,前后端的交互運(yùn)用Ajax技術(shù),數(shù)據(jù)存儲運(yùn)用的是MySql技術(shù),有關(guān)同態(tài)加密計(jì)算方面運(yùn)用的是Python的Pyfhel同態(tài)加密庫。系統(tǒng)的技術(shù)實(shí)現(xiàn)如圖4所示。為了提高系統(tǒng)客戶端的兼容性,客戶端頁采用Web形式實(shí)現(xiàn),主要包括密鑰生成、管理風(fēng)控模型功能。平臺管理員具有管理企業(yè)用戶和數(shù)據(jù)源的功能。其中,企業(yè)用戶即需要數(shù)據(jù)進(jìn)行風(fēng)控模型計(jì)算獲得運(yùn)算結(jié)果的客戶端用戶。數(shù)據(jù)源管理員可登錄平臺查看數(shù)據(jù)源使用情況,主要包括數(shù)據(jù)源的ID、名稱、IP地址、端口號、被使用的次數(shù)等信息。
3 結(jié)束語
本文在比較了四種同態(tài)加密庫以后,選擇使用Python語言和Pyfhel同態(tài)加密庫,設(shè)計(jì)和實(shí)現(xiàn)了一個(gè)支持多數(shù)據(jù)源安全共享的分布式大數(shù)據(jù)協(xié)作系統(tǒng)。該系統(tǒng)能夠解決企業(yè)風(fēng)控值計(jì)算場景中數(shù)據(jù)共享的安全性問題。該方案在不泄露源數(shù)據(jù)的情況下進(jìn)行安全共享計(jì)算,可以讓數(shù)據(jù)的價(jià)值得以體現(xiàn),該方案可以推廣和衍生到更多共享的場景中。在未來,我們將結(jié)合區(qū)塊鏈技術(shù)對同態(tài)加密算法做更深入的研究,使其能夠支持更大規(guī)模的計(jì)算。
參考文獻(xiàn)(References):
[1] 郭娟娟,王瓊霄,許新,等.安全多方計(jì)算及其在機(jī)器學(xué)習(xí)中的應(yīng)用[J].計(jì)算機(jī)研究與發(fā)展,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] 馮超.全同態(tài)加密的相關(guān)算法研究[D].山東大學(xué),2015