周慧凱,華 蓓
(中國科學(xué)技術(shù)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,合肥 230027)
隨著云計(jì)算的廣泛應(yīng)用,越來越多的用戶選擇將數(shù)據(jù)存儲在云端,有些甚至將計(jì)算也外包給云端.然而,用戶對數(shù)據(jù)安全和隱私泄露的擔(dān)心阻礙了云計(jì)算的進(jìn)一步推廣使用.盡管常規(guī)加密技術(shù)可以保證數(shù)據(jù)在存儲和傳輸過程中的機(jī)密性,但是當(dāng)計(jì)算外包給云服務(wù)商或第3方時(shí),由于需要先解密數(shù)據(jù)才能計(jì)算,數(shù)據(jù)機(jī)密性仍然得不到保證.隨著大數(shù)據(jù)時(shí)代的到來,數(shù)據(jù)已成為一種重要的財(cái)富和資源,利用數(shù)據(jù)發(fā)現(xiàn)問題和解決問題已成為大數(shù)據(jù)和人工智能時(shí)代的主要特征.然而人們對數(shù)據(jù)機(jī)密和隱私泄露的擔(dān)心同樣限制了數(shù)據(jù)的流通和共享使用,導(dǎo)致各行各業(yè)的數(shù)據(jù)形成“數(shù)據(jù)孤島”,不能產(chǎn)生應(yīng)有的價(jià)值.
計(jì)算外包和數(shù)據(jù)共享的共同點(diǎn)是數(shù)據(jù)擁有方和數(shù)據(jù)計(jì)算方分離,數(shù)據(jù)擁有方希望數(shù)據(jù)計(jì)算方在計(jì)算的過程中不接觸原始明文數(shù)據(jù),并且也不能推斷出原始明文數(shù)據(jù).目前解決這個(gè)問題的方法大致分為基于密碼學(xué)的方法和基于擾動變換的方法,基于密碼學(xué)的方法支持在密文上進(jìn)行計(jì)算,而基于擾動變換的方法通過向原始數(shù)據(jù)添加足夠的噪聲來保證數(shù)據(jù)隱私.基于密碼學(xué)的方法安全性高,但計(jì)算開銷巨大.
同態(tài)加密是具有特殊自然屬性的一類加密方法,利用同態(tài)加密技術(shù)在多個(gè)密文上進(jìn)行計(jì)算的結(jié)果,與在明文上先計(jì)算再對計(jì)算結(jié)果進(jìn)行加密是等價(jià)的,從而可解決第3方計(jì)算的數(shù)據(jù)安全問題,在隱私保護(hù)的信息檢索、多方安全計(jì)算、密文數(shù)據(jù)庫等方面有著重要的應(yīng)用.根據(jù)對同態(tài)特性支持的完整性,同態(tài)加密分為全同態(tài)加密、類同態(tài)加密、半同態(tài)加密3類.全同態(tài)加密支持在密文上的任意多次加、乘同態(tài)運(yùn)算;類同態(tài)加密同時(shí)支持加、乘同態(tài)運(yùn)算,但運(yùn)算次數(shù)有限;而半同態(tài)加密僅能支持加同態(tài)或乘同態(tài)運(yùn)算.許多研究工作致力于提高同態(tài)加密的計(jì)算效率,包括改進(jìn)加密算法和利用GPU/FPGA/ASIC硬件加速器等.文獻(xiàn)[1]利用GPU加速全同態(tài)算法ATV[2],對32KB數(shù)據(jù)進(jìn)行AES-128運(yùn)算需要4.15小時(shí),完全無法實(shí)用.基于大數(shù)模冪運(yùn)算的半同態(tài)加密是目前最接近實(shí)用的同態(tài)加密方案,其中,加同態(tài)加密算法Paillier[3]已被應(yīng)用到電子投票[4]、電子拍賣[5]等小型應(yīng)用中,但由于計(jì)算開銷大仍然無法應(yīng)用到大規(guī)模計(jì)算中.近幾年已有一些針對Paillier加密算法的硬件卸載工作,San等人[6]在FPGA上實(shí)現(xiàn)了Paillier加密算法,完成一次Paillier-1024加密運(yùn)算耗時(shí)11.29ms;Cai等人[7]設(shè)計(jì)了Paillier算法的專用ASIC芯片,將一次Paillier-1024加密時(shí)間縮短到5.9ms.盡管這兩個(gè)利用FPGA和ASIC的卸載方案在功耗上有一定優(yōu)勢,但是它們的加密性能還不及一些高端CPU(見5.2節(jié)表1).
Intel QAT(Intel QuickAssist Technology)[8]是一款卸載加解密操作和壓縮解壓縮操作的硬件板卡,性能高、功耗低和開發(fā)環(huán)境友好是其優(yōu)勢.QAT卡封裝了AES、RSA、ECC等常規(guī)加密算法以及Deflate壓縮算法,并為調(diào)用這些算法提供了方便易用的高層接口.QAT卡已在一些需要大量進(jìn)行加解密和壓縮解壓縮操作的系統(tǒng)中得到應(yīng)用,如加速OpenSSL、Hadoop[8]等.但是QAT卡并未提供同態(tài)加密功能,只有一個(gè)未經(jīng)封裝的大數(shù)模冪運(yùn)算的低層調(diào)用接口.大數(shù)模冪運(yùn)算是多種半同態(tài)加密算法(如Paillier、ElGamal[9]等)的基本運(yùn)算,也是這些加密算法的計(jì)算瓶頸所在.本文從硬件卸載的角度研究同態(tài)加密的高性能計(jì)算問題,提出一個(gè)基于QAT加速器的半同態(tài)加密卸載框架QHCS(QAT-based Homomorphic Encryption Scheme),著重實(shí)現(xiàn)Paillier算法的異步卸載,并將其應(yīng)用到一個(gè)隱私保護(hù)的線性回歸應(yīng)用中,希望推動同態(tài)加密在數(shù)據(jù)安全計(jì)算領(lǐng)域的實(shí)際應(yīng)用.
c=E(m)=gm·rnmodn2
(1)
對任意明文m1,m2有:
=gm1+m2(r1r2)n=E(m1+m2)
(2)
也即對密文進(jìn)行乘運(yùn)算等效于對明文先進(jìn)行加運(yùn)算,然后進(jìn)行加密的結(jié)果,滿足加法同態(tài).該特性可推廣到對任意明文m1,m2,…,mn有:
E(m1)·E(m2)·…·E(mn)=E(m1+m2+…+mn)
(3)
即Paillier算法滿足任意次的加法同態(tài)運(yùn)算.
Libhcs[10]是一個(gè)用C語言實(shí)現(xiàn)的開源同態(tài)加密庫,實(shí)現(xiàn)了Paillier、ElGamal等半同態(tài)加密算法,尤其對Paillier算法進(jìn)行了完善的實(shí)現(xiàn),提供了方便的API接口供應(yīng)用層調(diào)用.
每一塊QAT卡包含多個(gè)計(jì)算引擎,每個(gè)計(jì)算引擎可以獨(dú)立執(zhí)行加解密或壓縮解壓縮操作.應(yīng)用程序通過使用QAT卡分配的實(shí)例(instance)和調(diào)用相關(guān)的QAT APIs,將工作負(fù)載下發(fā)到某個(gè)計(jì)算引擎上完成,計(jì)算結(jié)果通過同步或異步模式返回.
QAT與CPU之間通過位于內(nèi)存中的一系列硬件輔助的環(huán)形數(shù)據(jù)結(jié)構(gòu)進(jìn)行通信,如圖1所示.環(huán)成對存在,每一對環(huán)由一個(gè)請求環(huán)和一個(gè)響應(yīng)環(huán)組成,CPU將計(jì)算任務(wù)提交給請求環(huán),QAT將計(jì)算結(jié)果放入響應(yīng)環(huán).QAT在通信環(huán)和計(jì)算引擎之間進(jìn)行負(fù)載均衡,將CPU提交的計(jì)算任務(wù)高效均勻地分配到多個(gè)計(jì)算引擎上.QAT驅(qū)動提供同步和異步兩種卸載模式:在同步模式中,CPU通過QAT API提交任務(wù)后,CPU被阻塞直到QAT完成運(yùn)算;在異步模式中,CPU通過QAT API提交任務(wù)后,不必等待QAT運(yùn)算結(jié)束即可執(zhí)行其它任務(wù).同步調(diào)用是最直接最簡單的卸載方法,幾乎不需要修改上層應(yīng)用,但會導(dǎo)致CPU和QAT串行執(zhí)行,QAT利用率低.雖然采用多線程同步調(diào)用可以提高QAT的利用率,但大量線程產(chǎn)生的線程切換開銷會限制系統(tǒng)的性能.
圖1 Intel QAT架構(gòu)圖Fig.1 Architecture of Intel QAT
QTLS[11]是一個(gè)基于QAT的TLS(Transport Layer Security)異步卸載框架,它將OpenSSL中的常規(guī)加解密算法卸載到QAT中,并實(shí)現(xiàn)了高效的異步調(diào)用.QTLS重新設(shè)計(jì)了TLS的軟件棧,以使每一層都支持異步操作.QTLS軟件棧從上到下分為事件驅(qū)動的應(yīng)用(如Nginx)、TLS 庫(即OpenSSL)和QAT引擎3個(gè)層次.在應(yīng)用層,通過增加一個(gè)異步狀態(tài)“TLS ASYNC”并結(jié)合TLS狀態(tài)機(jī),實(shí)現(xiàn)Nginx對加密卸載的異步支持.由于OpenSSL本身不支持異步卸載,QTLS通過在OpenSSL中增加協(xié)程(fibre)支持來實(shí)現(xiàn)異步調(diào)用.協(xié)程是用戶態(tài)線程,以協(xié)作方式進(jìn)行調(diào)度,并且調(diào)度也在用戶態(tài)完成,避免了切換內(nèi)核的開銷.協(xié)程可以在任意位置中斷,讓出CPU,并可以在任意時(shí)刻重入?yún)f(xié)程,從上次退出的執(zhí)行點(diǎn)繼續(xù)向下執(zhí)行,該特性使得協(xié)程提供了一種自然的異步調(diào)用方式.QAT引擎向下與QAT驅(qū)動交互,向上對OpenSSL實(shí)現(xiàn)接口適配和數(shù)據(jù)類型轉(zhuǎn)換.為兼顧吞吐量與延遲兩方面的性能要求,QTLS實(shí)現(xiàn)了一種啟發(fā)式輪詢機(jī)制,通過自動調(diào)節(jié)輪詢周期來高效地獲取加密結(jié)果.
文獻(xiàn)[12]面向眾包場景提出了一種隱私保護(hù)的嶺回歸計(jì)算模型,用于在加密后的眾包數(shù)據(jù)上進(jìn)行線性回歸計(jì)算.該模型包括數(shù)據(jù)提供者、評估者和加密服務(wù)提供者3方,如圖2所示.每個(gè)數(shù)據(jù)提供者提供一條數(shù)據(jù)(xi,yi),該數(shù)據(jù)生成的矩陣(Ai;bi)用Paillier算法加密后(得到矩陣ci)發(fā)送給評估者,評估者將所有加密矩陣ci相加(同態(tài)加)得到聚合后的矩陣C,然后與加密服務(wù)提供者進(jìn)行協(xié)同,通過構(gòu)造亂碼電路[13]來求解C.該工作巧妙地設(shè)計(jì)了同態(tài)加密與亂碼電路相結(jié)合的方案,整個(gè)過程中評估者和加密服務(wù)提供者都沒有接觸到明文數(shù)據(jù).
圖2 文獻(xiàn)[12]中的隱私保護(hù)嶺回歸計(jì)算模型Fig.2 Privacy-preserving ridge regression in [12]
QAT提供了一個(gè)大數(shù)模冪運(yùn)算的低層接口,可用于卸載半同態(tài)加密算法中的模冪運(yùn)算操作.本文旨在將Libhcs中的Paillier加密算法卸載到QAT中,并為上層提供方便易用的調(diào)用接口.該方法同樣可用于實(shí)現(xiàn)乘同態(tài)加密算法ElGamal的QAT卸載.
利用QAT卸載Paillier算法的最直接方法是將Paillier實(shí)現(xiàn)中對模冪運(yùn)算函數(shù)的調(diào)用替換成對QAT模冪運(yùn)算接口的同步調(diào)用,然而由于上層應(yīng)用及Libhcs都是采用同步設(shè)計(jì),在調(diào)用返回之前應(yīng)用與Libhcs都不能進(jìn)行后續(xù)操作,導(dǎo)致QAT的利用率非常低.為此,需要重新設(shè)計(jì)軟件棧來實(shí)現(xiàn)高效的異步卸載,以充分利用QAT的計(jì)算能力.
受QTLS框架的啟發(fā),本文同樣采用3層結(jié)構(gòu)來設(shè)計(jì)半同態(tài)加密異步卸載框架,從上往下依次為應(yīng)用層、同態(tài)加密庫(Libhcs)層、QAT訪問層,如圖3所示.應(yīng)用層根據(jù)應(yīng)用邏輯對加密任務(wù)進(jìn)行封裝和調(diào)度.考慮到同態(tài)加密應(yīng)用大多采用同步加密模式,不像Nginx那樣涉及事件驅(qū)動,Libhcs也不存在像TLS狀態(tài)機(jī)這樣的機(jī)制,我們對同態(tài)加密庫層和應(yīng)用層統(tǒng)一采用協(xié)程來實(shí)現(xiàn)異步功能.在具體實(shí)現(xiàn)時(shí),可通過調(diào)用OpenSSL的Async_job族函數(shù)來實(shí)現(xiàn)協(xié)程的異步功能.QAT訪問層向下與QAT驅(qū)動交互,向上對Libhcs實(shí)現(xiàn)接口適配和數(shù)據(jù)類型轉(zhuǎn)換.
圖3 QHCS的整體架構(gòu)Fig.3 Architecture of QHCS
整個(gè)異步卸載過程包括任務(wù)封裝與提交、輪詢與異步協(xié)程重入、后處理3個(gè)階段.
a)任務(wù)封裝與提交.每一次獨(dú)立的Paillier加密調(diào)用封裝為一個(gè)加密任務(wù),包括獲取數(shù)據(jù)、加密數(shù)據(jù)、寫密文數(shù)據(jù)等一系列步驟,該封裝由應(yīng)用層實(shí)現(xiàn).之后加密任務(wù)作為一個(gè)協(xié)程被調(diào)用,協(xié)程首先根據(jù)參數(shù)獲取待加密的數(shù)據(jù),然后調(diào)用同態(tài)加密庫,同態(tài)加密庫調(diào)用QAT訪問層,QAT訪問層通過異步API提交加密請求,之后馬上通過相關(guān)調(diào)用暫停該協(xié)程執(zhí)行,控制權(quán)返回給應(yīng)用層.應(yīng)用層調(diào)度下一個(gè)加密任務(wù).
b)輪詢與異步協(xié)程重入.為了確定加密請求是否完成,應(yīng)用層主動對QAT實(shí)例進(jìn)行輪詢.輪詢到新的響應(yīng)之后,QAT用戶態(tài)驅(qū)動調(diào)用預(yù)設(shè)的回調(diào)函數(shù).回調(diào)函數(shù)根據(jù)與加密結(jié)果相關(guān)聯(lián)的協(xié)程句柄,直接重入到該協(xié)程,繼續(xù)進(jìn)行后續(xù)處理.
c)后處理.重入被暫停的協(xié)程時(shí),該協(xié)程仍停留在QAT訪問層任務(wù)提交結(jié)束的狀態(tài),由此開始逐層向上進(jìn)行后處理過程.后處理包括軟件棧中每一層相關(guān)的后續(xù)處理,對于QAT訪問層來說是加密數(shù)據(jù)類型的轉(zhuǎn)換和數(shù)據(jù)包裝,對于同態(tài)加密庫來說是進(jìn)一步的加密過程處理,對于應(yīng)用層來說是寫加密數(shù)據(jù)等后續(xù)處理.重入?yún)f(xié)程完成全部的后處理之后,該加密任務(wù)也就完成了,協(xié)程被終止.
根據(jù)公式(1),Paillier加密一個(gè)數(shù)據(jù)需要進(jìn)行兩次模冪運(yùn)算,即需要執(zhí)行兩次QAT卸載.3.1采用了一種簡單的實(shí)現(xiàn)方法,將兩次模冪運(yùn)算集成在一個(gè)協(xié)程中,先提交第1次模冪運(yùn)算請求,第1次回調(diào)重入該協(xié)程后提交第2個(gè)模冪運(yùn)算請求,第2次回調(diào)重入該協(xié)程后完成后處理,這樣兩次任務(wù)卸載完全串行執(zhí)行.
考慮到Paillier加密的兩次模冪運(yùn)算是沒有關(guān)聯(lián)的,它們可以并行執(zhí)行,從而減少單次加密的延時(shí).經(jīng)了解QAT默認(rèn)開啟了保序功能,即QAT會將計(jì)算結(jié)果按照任務(wù)的提交順序依次放入響應(yīng)環(huán)中,為此我們的第2種實(shí)現(xiàn)方法是將兩次模冪運(yùn)算解耦,用兩個(gè)協(xié)程來實(shí)現(xiàn).第1個(gè)協(xié)程提交第1個(gè)模冪運(yùn)算,第2個(gè)協(xié)程提交第2個(gè)模冪運(yùn)算并進(jìn)行后續(xù)處理,兩個(gè)協(xié)程按順序調(diào)度,確保在第2個(gè)協(xié)程進(jìn)入后處理階段時(shí)兩個(gè)模冪運(yùn)算的結(jié)果都已返回.為實(shí)現(xiàn)雙協(xié)程并發(fā)提交計(jì)算任務(wù),需要對OpenSSL的Async_job族函數(shù)進(jìn)行一些改造,使得其支持在協(xié)程中調(diào)度新協(xié)程的特性.
本文基于QHCS實(shí)現(xiàn)了一個(gè)面向數(shù)據(jù)交易的隱私保護(hù)線性回歸應(yīng)用.在該設(shè)想的場景中,數(shù)據(jù)賣家提供加密的數(shù)據(jù)集,數(shù)據(jù)交易平臺根據(jù)數(shù)據(jù)買家的請求在數(shù)據(jù)集上完成線性回歸計(jì)算,將最終的計(jì)算結(jié)果交付給數(shù)據(jù)買家.整個(gè)計(jì)算過程中交易平臺和數(shù)據(jù)買家均不接觸明文數(shù)據(jù),從而實(shí)現(xiàn)隱私保護(hù)的數(shù)據(jù)交易.
本文對文獻(xiàn)[12]的隱私保護(hù)嶺回歸計(jì)算模型稍加修改,將其應(yīng)用于數(shù)據(jù)交易場景中,如圖4所示.在這里,數(shù)據(jù)提供者是擁有某個(gè)數(shù)據(jù)集的實(shí)體,評估者為數(shù)據(jù)交易平臺,加密服務(wù)提供者用一個(gè)CA(Certificate Authority)實(shí)現(xiàn),提供密鑰管理與亂碼電路構(gòu)建服務(wù).數(shù)據(jù)提供者對每一條數(shù)據(jù)生成矩陣(Ai;bi),采用Paillier算法加密后(得到ci矩陣)發(fā)送給交易平臺,交易平臺對ci矩陣進(jìn)行聚合,然后與加密服務(wù)提供者協(xié)同完成亂碼電路的構(gòu)建和求解,得到回歸模型.3方之間采用文獻(xiàn)[12]中的第2種協(xié)議進(jìn)行交互.
圖4 面向數(shù)據(jù)交易的隱私保護(hù)嶺回歸計(jì)算模型Fig.4 Privacy-preserving ridge regression model for data trading
應(yīng)用的計(jì)算開銷包括對矩陣(Ai;bi)進(jìn)行同態(tài)加密、對加密矩陣ci進(jìn)行聚合、以及針對聚合矩陣C構(gòu)造亂碼電路并求解.其中,主要的計(jì)算開銷是同態(tài)加密和矩陣聚合,它們均與數(shù)據(jù)集規(guī)模成正比;而矩陣C的規(guī)模僅與數(shù)據(jù)維度有關(guān),與數(shù)據(jù)集的規(guī)模無關(guān),因此亂碼電路構(gòu)建與求解的計(jì)算量是固定的.應(yīng)用的主要通信開銷是ci矩陣的傳輸.為提高整個(gè)應(yīng)用系統(tǒng)的性能,我們采用了如下優(yōu)化措施.
1)利用QHCS卸載Paillier加密過程.為提高矩陣(Ai;bi)的加密速度,數(shù)據(jù)提供者利用QHCS將加密過程卸載到QAT上.考慮到實(shí)際應(yīng)用中明文數(shù)據(jù)大多較短,QHCS采用了文獻(xiàn)[12]中提到的batch優(yōu)化技術(shù),即將多個(gè)較短的明文數(shù)據(jù)用若干個(gè)零隔開后打包成一個(gè)較長的明文數(shù)據(jù),再進(jìn)行Paillier加密.該技術(shù)可將多次加密過程轉(zhuǎn)化為一次加密過程,極大地提高加密速度.
2)利用GPU實(shí)現(xiàn)加密矩陣的聚合.所有ci矩陣通過同態(tài)加來生成聚合的C矩陣.同態(tài)加是一個(gè)簡單的模乘運(yùn)算,雖然單次模乘運(yùn)算的計(jì)算量不大,但是大量的模乘運(yùn)算仍會產(chǎn)生較大的計(jì)算開銷.由于QAT沒有開放模乘運(yùn)算接口,無法利用QAT來加速模乘運(yùn)算.考慮到矩陣的模乘運(yùn)算實(shí)際上是一個(gè)向量運(yùn)算,本文采用GPU來加速這個(gè)過程.
在模乘運(yùn)算中模運(yùn)算是一個(gè)性能瓶頸,考慮到在本文場景下每一個(gè)輸入只進(jìn)行一次模乘運(yùn)算,且模運(yùn)算中的模數(shù)唯一,我們選擇用Barrett reduction[14]算法來加速模運(yùn)算.在利用GPU進(jìn)行并行計(jì)算時(shí),我們通過設(shè)計(jì)高效的GPU歸約算法對批量數(shù)據(jù)執(zhí)行Reduce操作,加快聚合速度.
3)在數(shù)據(jù)提供者網(wǎng)絡(luò)中完成加密矩陣聚合.每一條源數(shù)據(jù)經(jīng)過向量乘及Paillier加密后生成ci矩陣,這個(gè)過程會產(chǎn)生極大的數(shù)據(jù)膨脹.以每條數(shù)據(jù)20個(gè)字段、密鑰長度1024比特為例,采用batch技術(shù)后,100百萬條源數(shù)據(jù)生成的加密矩陣的數(shù)據(jù)量約為2GB.如果將這些加密矩陣都傳輸?shù)浇灰灼脚_進(jìn)行計(jì)算,將產(chǎn)生巨大的通信開銷.為此,我們將矩陣聚合的功能移到數(shù)據(jù)提供者一側(cè)完成,在數(shù)據(jù)提供者的局域網(wǎng)中設(shè)置一個(gè)聚合代理,代表交易平臺完成對加密矩陣的聚合,僅將聚合矩陣C發(fā)送到交易平臺進(jìn)行求解,避免了大批量數(shù)據(jù)的遠(yuǎn)程傳輸.在數(shù)據(jù)提供者網(wǎng)絡(luò)中進(jìn)行加密矩陣聚合還能夠進(jìn)一步減輕數(shù)據(jù)提供者對數(shù)據(jù)泄露的擔(dān)心,因?yàn)橹挥芯酆暇仃嚥艜x開本地網(wǎng)絡(luò).
本文使用2臺服務(wù)器來模擬圖4的計(jì)算環(huán)境.第1臺服務(wù)器配置Intel D-1541/2.1GHz處理器和一塊QAT DH8970加速卡,第2臺服務(wù)器配置Intel E5-2689/2.6GHz處理器和一塊Nvidia K80 GPU,均運(yùn)行CentOS 7操作系統(tǒng),關(guān)閉超線程.兩臺服務(wù)器通過10Gbps網(wǎng)絡(luò)連接.
第1臺服務(wù)器運(yùn)行數(shù)據(jù)提供者的功能,對數(shù)據(jù)集中的每一條源數(shù)據(jù)生成ci矩陣,第2臺服務(wù)器運(yùn)行交易平臺和加密服務(wù)提供者(CA)的功能.由于CA的計(jì)算量和通信量都很小,對系統(tǒng)性能影響不大,因此實(shí)驗(yàn)時(shí)將CA和交易平臺運(yùn)行在同一臺服務(wù)器上.另外,由于亂碼電路的求解與矩陣聚合在執(zhí)行時(shí)間上不重疊,實(shí)驗(yàn)時(shí)將聚合代理也運(yùn)行在第2臺服務(wù)器上,注意到這樣做并不會對系統(tǒng)性能的測量結(jié)果產(chǎn)生影響.聚合代理、亂碼電路求解和CA分別用一個(gè)進(jìn)程實(shí)現(xiàn),3者之間的通信開銷忽略不計(jì).
本文設(shè)計(jì)兩組實(shí)驗(yàn),第1組實(shí)驗(yàn)評估不同的Paillier加密實(shí)現(xiàn)方案的性能,第2組實(shí)驗(yàn)評估基于QHCS的隱私保護(hù)線性回歸應(yīng)用的性能.由于Paillier最常使用的密鑰長度為1024比特,本文所有實(shí)驗(yàn)均采用1024比特密鑰長度.
本組實(shí)驗(yàn)測試3類共5種Paillier加密實(shí)現(xiàn)方案的吞吐量(OPS)和平均加密延時(shí)(ms),分別是軟件方案(SW,由Libhcs實(shí)現(xiàn))、QAT同步卸載方案(分為單線程同步方案QAT+S1與多線程同步方案QAT+S2)、QAT異步卸載方案(分為單協(xié)程異步方案QHCS1與雙協(xié)程異步方案QHCS2),并對比了FPGA和ASIC方案的論文數(shù)據(jù).所有實(shí)驗(yàn)方案中產(chǎn)生的CPU線程皆綁定到一個(gè)固定的CPU物理核上,以此來比較CPU端資源一定(只用單核)時(shí)不同方案的性能.每次實(shí)驗(yàn)加密30000個(gè)隨機(jī)數(shù),計(jì)算吞吐量和平均加密延時(shí).每個(gè)實(shí)驗(yàn)運(yùn)行3次,取3次結(jié)果的平均值,實(shí)驗(yàn)結(jié)果見表1.
表1 不同Paillier實(shí)現(xiàn)方案的性能Table 1 Performance of different Paillier implementations
對于軟件方案SW和單線程同步方案QAT+S1,直接測量3萬次加密所用的時(shí)間,然后計(jì)算出吞吐量和平均每次加密延時(shí).
多線程同步方案QAT+S2的加密性能與線程數(shù)量有關(guān):若線程數(shù)過少,則QAT負(fù)載不足;若線程數(shù)過多,大量的線程切換開銷也會影響性能.為獲得QAT+S2的最佳性能,實(shí)驗(yàn)時(shí)改變線程數(shù)量,測量不同線程數(shù)下的加密性能.實(shí)驗(yàn)發(fā)現(xiàn),當(dāng)線程數(shù)為1000時(shí)吞吐量最高,表1中QAT+S2報(bào)告的即為該設(shè)置下的吞吐量和平均加密延時(shí).為獲得平均加密延時(shí),實(shí)驗(yàn)時(shí)統(tǒng)計(jì)每個(gè)線程的運(yùn)行時(shí)間及加密次數(shù),計(jì)算出該線程的平均加密延時(shí),然后對所有線程的平均加密延時(shí)求平均值.
對于QAT異步卸載方案(QHCS1和QHCS2),吞吐量的測量方法與其它3個(gè)方案相同,平均加密延時(shí)則是通過測量 每一次完整加密過程的延時(shí)并計(jì)算平均值得到.
由表1可以看到,單線程同步方案(QAT+S1)的性能只比軟件方案(SW)略好.這是因?yàn)樵谕侥J较翾AT和CPU串行執(zhí)行,且QAT每次只執(zhí)行一個(gè)模冪運(yùn)算,負(fù)載嚴(yán)重不足,導(dǎo)致性能提升十分有限.
多線程同步方案(QAT+S2)的吞吐量是單線程同步方案(QAT+S1)的46倍,這是因?yàn)槎嗑€程方案有效增大了QAT的負(fù)載,使得QAT的計(jì)算能力得到很大的釋放.注意到在該吞吐量下,多線程方案的平均加密延時(shí)增大至單線程方案的21倍,這是因?yàn)榇罅康娜蝿?wù)請求在request ring中排隊(duì),產(chǎn)生了較大的排隊(duì)延遲.
單協(xié)程異步方案(QHCS1)的吞吐量是多線程同步方案(QAT+S2)的1.76倍,這是因?yàn)閰f(xié)程具有比線程小得多的切換和調(diào)度開銷,從而CPU可以調(diào)度更多的計(jì)算任務(wù)到QAT上,令QAT的計(jì)算能力得到更加充分的利用.注意到單協(xié)程異步方案的平均加密延時(shí)比多線程同步方案降低了33%,這里有兩個(gè)方面的原因.首先,采用異步方式提交任務(wù)使得CPU和QAT上的處理過程能夠重疊執(zhí)行,減少了加密延時(shí);其次,由于協(xié)程的調(diào)度和切換延時(shí)遠(yuǎn)小于線程的調(diào)度和切換延時(shí),這也使得協(xié)程方案的加密延時(shí)較小.
雙協(xié)程異步方案(QHCS2)的吞吐量比單協(xié)程異步方案(QHCS1)略低,這是因?yàn)殡p協(xié)程方案使用了較多的協(xié)程,增加了CPU端的處理開銷.值得注意的是,雙協(xié)程方案的加密延時(shí)只有單協(xié)程方案的一半,這是因?yàn)閱螀f(xié)程方案的第2次計(jì)算任務(wù)須在第1次任務(wù)的結(jié)果返回后才提交,而雙協(xié)程方案的第2次計(jì)算任務(wù)可以緊接在第1次任務(wù)后提交,兩個(gè)計(jì)算結(jié)果通過一次輪詢即可獲得,從而降低了加密延時(shí).
從這組實(shí)驗(yàn)可以看到,QAT異步卸載方案的吞吐量明顯高于同步卸載方案,并遠(yuǎn)遠(yuǎn)超過當(dāng)前的軟件實(shí)現(xiàn)方案,是軟件方案的110倍.追求高吞吐的應(yīng)用可以采用單協(xié)程卸載方案,關(guān)注延時(shí)的應(yīng)用可以采用雙協(xié)程卸載方案.
最后與文獻(xiàn)中報(bào)告的FPGA方案[6]和ASIC方案[7]進(jìn)行一個(gè)比較.表1中這兩個(gè)方案的性能數(shù)據(jù)均來自相關(guān)文獻(xiàn).為便于描述,這里將CPU物理核、QAT計(jì)算引擎、FPGA和ASIC的加密運(yùn)算單元統(tǒng)稱為計(jì)算實(shí)例.在SW、FPGA、ASIC和QAT+S1這4種方案中都只有一個(gè)計(jì)算實(shí)例參與計(jì)算,適合一起比較.可以看到,ASIC方案的吞吐量與延時(shí)均優(yōu)于FPGA方案,但都不如SW和QAT+S1.這說明FPGA及ASIC方案的性能還不如軟件方案(CPU實(shí)現(xiàn)),也不如QAT.
在QAT+S2、QHCS1和QHCS2這3種方案中,QAT有多個(gè)計(jì)算實(shí)例參與計(jì)算,單次加密運(yùn)算的耗時(shí)均大于FPGA和ASIC方案,這是由批量處理帶來的影響.在吞吐量方面,按照FPGA中每個(gè)計(jì)算實(shí)例占用的硬件資源和FPGA設(shè)備總的硬件資源數(shù)量來計(jì)算,一塊FPGA設(shè)備最多可以同時(shí)運(yùn)行13個(gè)計(jì)算實(shí)例,在完全發(fā)揮FPGA設(shè)備算力的情況下吞吐量也只有1151(OPS),僅為QHCS1的4.2%,若要達(dá)到QHCS1(單QAT設(shè)備)的吞吐量需要24塊FPGA板.ASIC方案若需要達(dá)到QHCS1(單QAT設(shè)備)的吞吐量需要160個(gè)計(jì)算實(shí)例(計(jì)算核心).可見,相比于已有的FPGA方案或ASIC方案,QHCS在性能方面具有顯著的優(yōu)勢.
本組實(shí)驗(yàn)測量隱私保護(hù)的線性回歸應(yīng)用的性能,包括同態(tài)加密、矩陣聚合、亂碼電路求解3個(gè)部分的運(yùn)行耗時(shí).實(shí)驗(yàn)所需的數(shù)據(jù)集采用文獻(xiàn)[12]中的算法生成,見算法1.
算法1.數(shù)據(jù)集生成算法
輸入:數(shù)據(jù)條數(shù)n,數(shù)據(jù)維度d
輸出:X∈n×d,y∈n
3. 計(jì)算y=Xβ+e,其中e~N(0,1)
首先利用以上算法生成n=1,000,000條高維源數(shù)據(jù),每條數(shù)據(jù)包含d=20個(gè)維度.對每條源數(shù)據(jù)(xi;yi)生成待加密的(Ai;bi)矩陣,每個(gè)矩陣包含420個(gè)元素.這一百萬個(gè)矩陣(共包含4.2億個(gè)數(shù)據(jù))即為數(shù)據(jù)提供者要加密的數(shù)據(jù).數(shù)據(jù)提供者對每個(gè)(Ai;bi)矩陣進(jìn)行Paillier加密,輸出加密矩陣ci.
對于同態(tài)加密部分,分別測量兩種異步卸載方案的加密耗時(shí).為優(yōu)化性能,采用了batch技術(shù),將每個(gè)矩陣中的數(shù)據(jù)打包成17個(gè)長度為1024比特的數(shù),即需要進(jìn)行17次Paillier加密.表2給出了兩種方案的加密時(shí)間,其中單協(xié)程方案QHCS1耗時(shí)10.6分鐘,雙協(xié)程方案QHCS2耗時(shí)10.7分鐘.這個(gè)實(shí)驗(yàn)再次表明,兩個(gè)方案的吞吐量很接近,相比而言單協(xié)程方案的吞吐量略高一些.
表2 隱私保護(hù)的線性回歸應(yīng)用的性能分解Table 2 Performance breakdown of privacy-preserving ridge regression
矩陣聚合部分測量GPU對矩陣ci執(zhí)行同態(tài)加所用的時(shí)間.為最大化GPU的計(jì)算效率,我們通過實(shí)驗(yàn)的方法確定GPU kernel的最佳運(yùn)行參數(shù).實(shí)驗(yàn)發(fā)現(xiàn),GPU每批次處理25,000個(gè)加密矩陣(即ci)時(shí)性能最好,在此設(shè)置下得到100萬個(gè)矩陣同態(tài)加的耗時(shí)為116秒,見表2.
亂碼電路部分測量構(gòu)造和求解亂碼電路的時(shí)間.ABY[15]是一個(gè)完善而高效的安全計(jì)算框架,本文使用ABY框架來實(shí)現(xiàn)亂碼電路部分內(nèi)容.亂碼電路的復(fù)雜度和計(jì)算開銷僅與矩陣C有關(guān),而與源數(shù)據(jù)的條數(shù)n無關(guān),實(shí)驗(yàn)中測得這部分的運(yùn)行時(shí)間為20秒,見表2.
數(shù)據(jù)提供者和聚合代理之間需要傳輸一百萬個(gè)加密矩陣,這部分的數(shù)據(jù)量約為2GB.采用10Gbps鏈路進(jìn)行傳輸,傳輸時(shí)間只需數(shù)秒.
綜合以上實(shí)驗(yàn)數(shù)據(jù)可以看到,對大規(guī)模加密數(shù)據(jù)進(jìn)行線性回歸計(jì)算的最主要瓶頸是同態(tài)加密,利用QAT卸載同態(tài)加密可以極大地縮短計(jì)算時(shí)間,使得在實(shí)際生產(chǎn)中應(yīng)用同態(tài)加密技術(shù)成為可能.需要說明的是,本實(shí)驗(yàn)只使用了一塊QAT加速卡,如果使用多塊QAT卡,則加密時(shí)間將成比例地下降.
計(jì)算外包、數(shù)據(jù)共享等正成為大數(shù)據(jù)時(shí)代的迫切需要.雖然同態(tài)加密是實(shí)現(xiàn)安全數(shù)據(jù)計(jì)算的重要技術(shù),但是極高的計(jì)算開銷阻礙了同態(tài)加密的實(shí)際應(yīng)用.本文基于Intel QAT加速卡和開源同態(tài)加密庫Libhcs實(shí)現(xiàn)了針對Paillier半同態(tài)加密算法的硬件卸載框架QHCS,通過重構(gòu)同態(tài)加密應(yīng)用的軟件棧,并采用協(xié)程、異步調(diào)用等方式實(shí)現(xiàn)了加密性能的最大化.本文進(jìn)一步將QHCS應(yīng)用于一個(gè)面向數(shù)據(jù)交易場景的隱私保護(hù)線性回歸應(yīng)用中.實(shí)驗(yàn)表明,QHCS的加密吞吐量是目前軟件實(shí)現(xiàn)的110倍,在百萬量級的高維數(shù)據(jù)上執(zhí)行隱私保護(hù)的線性回歸計(jì)算僅需十幾分鐘,可以較好地滿足實(shí)際應(yīng)用的需要.未來打算將基于模冪運(yùn)算的其它半同態(tài)加密算法集成到QHCS中,并將QHCS應(yīng)用于更多類型的隱私保護(hù)數(shù)據(jù)計(jì)算中,如隱私保護(hù)的機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘等.