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