(南湖實(shí)驗(yàn)室大數(shù)據(jù)研究中心,嘉興 314000)
0 引言
在數(shù)字時(shí)代,數(shù)據(jù)已經(jīng)成為了基本生產(chǎn)要素,因此數(shù)據(jù)安全共享必將是未來發(fā)展趨勢之一[1]。數(shù)據(jù)的整個(gè)生命周期包含存儲(chǔ)、流轉(zhuǎn)、使用三個(gè)狀態(tài)。在敏感數(shù)據(jù)存儲(chǔ)、流轉(zhuǎn)方面,業(yè)界已經(jīng)有著成熟完善的技術(shù)支撐,例如各類加密算法(對稱加密、非對稱加密、哈希算法等)、傳輸層安全性協(xié)議等。而敏感數(shù)據(jù)在使用層大多以明文形式存在,極易遭受內(nèi)存層面的攻擊。如何對敏感數(shù)據(jù)安全處理成了待解決的難題。隱私計(jì)算的興起,為這個(gè)難題提供了一個(gè)解決方法。
隱私計(jì)算中主流技術(shù)有聯(lián)邦學(xué)習(xí)、多方安全計(jì)算和可信執(zhí)行環(huán)境(Trusted Execution Environment,TEE)[2-3]。其中,聯(lián)邦學(xué)習(xí)與多方安全計(jì)算基于密碼學(xué)進(jìn)行軟件級的保護(hù),分別側(cè)重于多方數(shù)據(jù)的聯(lián)合計(jì)算、機(jī)器學(xué)習(xí)的模型訓(xùn)練等。而TEE為芯片層級的隱私計(jì)算技術(shù),由芯片直接形成可信的執(zhí)行環(huán)境來保護(hù)數(shù)據(jù)不被泄露。目前,主流的TEE解決方案包括基于X86指令集架構(gòu)的Intel SGX和基于ARM指令集架構(gòu)的TrustZone[4]。Intel SGX[5]的出現(xiàn)推動(dòng)了基于芯片級別隱私計(jì)算的發(fā)展,與傳統(tǒng)的TEE不同,Intel SGX支持遠(yuǎn)程認(rèn)證技術(shù),使得在遠(yuǎn)端運(yùn)行應(yīng)用的執(zhí)行環(huán)境的可信性可以驗(yàn)證,而不只局限于單機(jī)黑盒。得益于基于芯片的硬件特性,在應(yīng)用程序?qū)用媾c底層邏輯解耦,應(yīng)用程序無需修改自身代碼,直接調(diào)用底層邏輯,可在不改變已部署應(yīng)用的原有架構(gòu)的前提下,實(shí)現(xiàn)隱私計(jì)算來保護(hù)數(shù)據(jù)。Intel SGX比較多地運(yùn)用在保護(hù)Linux容器[6]和云[7]。RSIC-V是基于精簡指令集(RSIC)[8]原則的開源指令集架構(gòu)(ISA)。國內(nèi)的許多家廠商也開發(fā)了基于國產(chǎn)芯片的安全擴(kuò)展,目前處于領(lǐng)先地位的是海光和飛騰。海光基于海光CPU推出了安全虛擬技術(shù)CSV[9],飛騰基于飛騰CPU推出了飛騰PSPA(Phytium Security Platform Architecture)。
2022年,YANNICK等[10]為了使Fabric運(yùn)行在安全的執(zhí)行環(huán)境,結(jié)合Intel SGX,提出了E-Fabric。E-Fabric擁有更好的安全保障,增加了8%的延時(shí),降低了4%的吞吐,整個(gè)網(wǎng)絡(luò)的性能下降了6%。2019年,王冠等[11]提出了基于Intel SGX的Hadoop KMS安全增強(qiáng)方案,安全增強(qiáng)帶來的性能損耗為10.08%。工業(yè)物聯(lián)網(wǎng)也在快速向Intel SGX靠攏。2021年,王冠等[12]提出了基于Intel SGX的Kerberos安全增強(qiáng)方案,保證密鑰保存和運(yùn)行在Enclave中。2021年,劉忻等[13]提出了基于Intel SGX的IIoT身份認(rèn)證協(xié)議。2020年,羅杭光等[14]提出的無線傳感器網(wǎng)絡(luò)中實(shí)時(shí)數(shù)據(jù)接入的輕量級三因素方案相比,性能方面有小的損失,但是有更加強(qiáng)大和有效的安全性。
目前,數(shù)據(jù)安全的問題日益突出,特別是數(shù)據(jù)庫的安全。數(shù)據(jù)庫是當(dāng)今社會(huì)中重要的存儲(chǔ)軟件之一。語義安全加密可以為存儲(chǔ)的數(shù)據(jù)和傳輸?shù)臄?shù)據(jù)提供強(qiáng)大而且有效的保護(hù)。但是,數(shù)據(jù)在進(jìn)行處理的時(shí)候,是以明文的方式存儲(chǔ)在內(nèi)存中。2016年,Poddar R等[15]基于語義安全加密提出了Arx的數(shù)據(jù)庫框架,使用了ArxRange和ArxEq。ArxRange實(shí)現(xiàn)范圍查詢和限制順序查詢;ArxEq實(shí)現(xiàn)等式查詢。CryptDB[16]、Monomi[17]和Seabed[18]使用屬性保護(hù)的方式進(jìn)行加密,在加密的情況下能夠?qū)?shù)據(jù)進(jìn)行查詢處理。微軟的Always Encrypted[19]和谷歌的Encrypted Bigque Client[20]都使用了這種加密方式。但是這種加密的方式會(huì)產(chǎn)生信息泄露的問題[21-23]。于是,Christian、Priebe等[24]基于Intel SGX實(shí)現(xiàn)了新的數(shù)據(jù)庫EnclaveDB,有較低的開銷(TPC-C高達(dá)40%)卻有強(qiáng)大的安全性。
本文將芯片級的隱私計(jì)算和數(shù)據(jù)庫結(jié)合,保證數(shù)據(jù)庫擁有安全運(yùn)行環(huán)境。數(shù)據(jù)庫增加30%左右開銷的同時(shí),保證了數(shù)據(jù)庫的安全。本文的主要貢獻(xiàn)表現(xiàn)在以下兩個(gè)方面。
(1)提出了一種基于隱私計(jì)算的數(shù)據(jù)庫全生命周期保護(hù)方法,在Intel SGX的Enclave安全容器中進(jìn)行敏感操作,不依靠第三方服務(wù)。
(2)實(shí)現(xiàn)Intel SGX兼容MySQL和SQLCipher。MySQL在Intel SGX的環(huán)境中運(yùn)行;SQLCipher在Intel SGX安全環(huán)境中進(jìn)行加解密和數(shù)據(jù)庫操作。
1 背景知識(shí)
1.1 海光CSV
海光CSV是基于海光CPU自主研發(fā)的安全虛擬化技術(shù),并且采用了國密算法實(shí)現(xiàn)。龍蜥8.4操作系統(tǒng)已經(jīng)支持了CSV。CSV虛擬機(jī)通過海光CPU對內(nèi)存進(jìn)行加解密。CSV虛擬機(jī)具有以下幾個(gè)特點(diǎn)。
(1)計(jì)算資源的隔離。對于每一臺(tái)CSV虛擬機(jī),都有各自獨(dú)立的內(nèi)存和密鑰。同時(shí)使用海光芯片中的安全管理模塊,保證CSV虛擬機(jī)之間資源互不干涉。
(2)啟動(dòng)過程可度量。 海光CPU的安全模塊能將虛擬文件和度量值進(jìn)行對比,保證虛擬文件的安全,防止篡改。
(3)虛擬機(jī)身份的認(rèn)可。每一顆海光CPU中都有唯一的芯片密鑰,在制作芯片的時(shí)候已經(jīng)燒錄了。用戶可以使用芯片密鑰對芯片和CSV虛擬機(jī)的合法性進(jìn)行評估。
1.2 飛騰PSPA
飛騰公司推出了基于飛騰芯片的飛騰PSPA處理器安全架構(gòu)標(biāo)準(zhǔn)。飛騰PSPA標(biāo)準(zhǔn)分為10個(gè)模塊:密碼加速引擎;密鑰管理;可信啟動(dòng);可信執(zhí)行環(huán)境;安全存儲(chǔ);固件管理;量產(chǎn)注入;生命周期管理;抗物理攻擊;硬件漏洞免疫,涉及到了硬件軟件,支持各種算法運(yùn)用,各方面的安全都能進(jìn)行防護(hù)。
1.3 Intel SGX
Intel(R) Software Guard Extensions(Intel(R) SGX)是Intel架構(gòu)新的擴(kuò)展, 在原有架構(gòu)上增加了一組新的指令集和內(nèi)存訪問機(jī)制。Intel SGX使用擴(kuò)展的指令,調(diào)用應(yīng)用程序,實(shí)現(xiàn)一個(gè)名為Enclave的容器。Enclave容器所在的內(nèi)存空間的地址是被保護(hù)的。整個(gè)被保護(hù)的地址空間是由Intel芯片進(jìn)行管理,操作系統(tǒng)沒有權(quán)限訪問這些地址空間。所以,Enclave容器能夠?yàn)閿?shù)據(jù)和代碼提供一個(gè)安全的環(huán)境,即使是超級管理員也無法進(jìn)行訪問。Enclave容器在保護(hù)數(shù)據(jù)和代碼機(jī)密性的同時(shí),也會(huì)進(jìn)行度量操作,保證應(yīng)用完整性。Intel SGX關(guān)鍵技術(shù)如下。
(1)認(rèn)證
Intel SGX在進(jìn)行初始化的時(shí)候,會(huì)自動(dòng)啟動(dòng)兩個(gè)由Intel自己編寫的Enclave,即SGX Launch和SGX Quoting Enclave。SGX Launch和SGX Quoting Enclave主要通過使用EINIT 和 EREPORT兩個(gè)指令對在同一個(gè)環(huán)境下其他Enclave容器的身份認(rèn)證。Enclave容器之間可以通過本地認(rèn)證和遠(yuǎn)程認(rèn)證確認(rèn)信任的關(guān)系。在同一臺(tái)物理機(jī)上,使用本地認(rèn)證;在不同的物理機(jī)上,使用遠(yuǎn)程認(rèn)證。
一個(gè)Enclave通過圖1中所示的EREPORT指令向另一個(gè)目標(biāo)Enclave證明其身份。SGX指令生成一個(gè)認(rèn)證報(bào)告(REPORT),該報(bào)告加密地將Enclave提供的信息與Enclave基于度量和基于證書的身份綁定。加密綁定是通過一個(gè)MAC標(biāo)簽來完成的,該標(biāo)簽使用的對稱密鑰只在目標(biāo)飛地和SGX實(shí)現(xiàn)之間共享。EREPORT指令從當(dāng)前Enclave的SECS中讀取當(dāng)前身份信息,并使用它來填充報(bào)表結(jié)構(gòu)。

圖1 DCAP認(rèn)證形式
就認(rèn)證本身而言,遠(yuǎn)程證明僅是向用戶保證遠(yuǎn)程執(zhí)行的Enclave是可信的。除了這種保證之外,用戶還需要?jiǎng)?chuàng)建一個(gè)安全通道,以便與遠(yuǎn)程 Enclave進(jìn)行可信通信,用于透明地將密鑰或其他敏感信息提供給遠(yuǎn)端的Enclave。Intel SGX中的遠(yuǎn)程認(rèn)證有兩種形式,分別為EPID和DCAP。EPID適用于客戶端機(jī)器,而DCAP適用于數(shù)據(jù)中心環(huán)境。EPID大多數(shù)的活動(dòng)部件都是固定的,與Intel提供的服務(wù)強(qiáng)相關(guān),而DCAP是一種在不依賴Intel基礎(chǔ)架構(gòu)的情況下啟動(dòng)Enclave的方法,且適用于服務(wù)器環(huán)境。
如圖1所示,第一步在Enclave中的應(yīng)用程序打開文件/dev/attestation/user_report_data來寫入;第二步后臺(tái)軟件調(diào)用硬件指令EREPORT來生成SGX報(bào)告;第三步在生成SGX報(bào)告后,應(yīng)用程序讀取另一個(gè)特殊文件/dev/attestation/quote;第四步,后臺(tái)軟件與引用飛地進(jìn)行通信來接受SGX引用;第五步,引用飛地與供應(yīng)認(rèn)證飛地(Provisioning Certification Enclave,PCE)通信;第六步,PCE使用另一個(gè)稱為Intel 供應(yīng)認(rèn)證服務(wù)(PCS)的Intel服務(wù)來獲取身份證明的信息:SGX機(jī)器的證明證書和證書撤銷列表。此外,每次新的SGX引用到達(dá)時(shí),最終用戶都不需要咨詢Intel的Web服務(wù)。相反,最終用戶會(huì)定期獲取DCAP 證明證書并將它們緩存在本地機(jī)器上(步驟 0)。當(dāng)SGX的Quote到達(dá)時(shí),用戶將Quote 中嵌入的證書與這些緩存的證書進(jìn)行比較(步驟9)[25]。
(2)數(shù)據(jù)密封
Intel SGX是一項(xiàng)為了保護(hù)數(shù)據(jù)安全而誕生的新技術(shù)。當(dāng)Enclave進(jìn)行實(shí)例化之后,所有的數(shù)據(jù)會(huì)運(yùn)行在內(nèi)存之中。當(dāng)Encalve實(shí)例關(guān)閉的時(shí)候,因?yàn)橹皇沁\(yùn)行在內(nèi)存中,所以會(huì)被清除,導(dǎo)致數(shù)據(jù)丟失。Intel官方為了能夠?qū)?shù)據(jù)庫保存下來,推出了數(shù)據(jù)密封技術(shù)(Sealing)。每一個(gè)Enclave中都有唯一的密鑰,Intel SGX使用這個(gè)密鑰對Enclave中的數(shù)據(jù)進(jìn)行加密的操作,加密完成后的數(shù)據(jù)會(huì)存放在磁盤上,數(shù)據(jù)就不會(huì)因?yàn)镋nclave實(shí)例關(guān)閉導(dǎo)致數(shù)據(jù)丟失。Intel將這些加密和解密操作分別稱為密封和解封。數(shù)據(jù)密封是將Enclave實(shí)例中的數(shù)據(jù)加密保存下來。數(shù)據(jù)解密是將已經(jīng)加密的數(shù)據(jù)放在同一個(gè)Enclave實(shí)例中解密或者是同一平臺(tái)下的Enclave實(shí)例中解密。這兩種解密的方式分別對應(yīng)了兩種密封的方式: Enclave Identity(安全區(qū)認(rèn)證)和Signing Identity(簽名認(rèn)證)。
Enclave Identity由 MREnclave的值表示,它是 Enclave日志(測量值)的加密哈希。每一個(gè)Enclave構(gòu)建和初始化都不相同。所以每一個(gè)MREnclave都能唯一地標(biāo)識(shí)一個(gè)Enclave。由Enclave Identity密封的數(shù)據(jù),只能由同一個(gè)Enclave解封。相同的Enclave不同版本,構(gòu)建和初始化Enclave的過程是不一樣的,所以MREnclave的值也是不一樣的。Enclave Identity密封的數(shù)據(jù)不能在同一個(gè)Enclave不同版本下進(jìn)行解封。Signing Identity 密封的數(shù)據(jù)能夠在同一個(gè)Enclave不同版本下進(jìn)行解封。如果數(shù)據(jù)是處于同一個(gè)平臺(tái),由Signing Identity 密封的數(shù)據(jù)都能夠進(jìn)行解封。
1.4 SQLCipher數(shù)據(jù)庫
SQLite是一個(gè)輕量級的數(shù)據(jù)庫,廣泛運(yùn)用于嵌入式的領(lǐng)域。SQLCipher是SQLite數(shù)據(jù)庫的擴(kuò)展,能夠讓使用者更加方便地使用加密數(shù)據(jù)庫。SQLCipher加密使用SQLite內(nèi)部的256 bit AES進(jìn)行加密。SQLite編解碼器使用回調(diào)的方法保證在數(shù)據(jù)寫入和讀取存儲(chǔ)之前進(jìn)行加密的操作。因此,SQLCipher的加密是非常安全的。SQLCipher中的頁面分成不同的塊。每次進(jìn)行加密或者是解密的時(shí)候,只是對相對應(yīng)的塊進(jìn)行操作,不會(huì)對所有的塊全部進(jìn)行操作,這樣使SQLCipher的加解密效率大幅度提升[26]。
1.5 MySQL數(shù)據(jù)庫
MySQL數(shù)據(jù)庫是一個(gè)免費(fèi)的開源關(guān)系型數(shù)據(jù)庫。與其他的大型數(shù)據(jù)庫(如Oracle、DB2、SQL Server等)相比,MySQL略有不足。但是MySQL的性能能夠滿足中小型企業(yè)的使用。MySQL是開源的數(shù)據(jù)庫,企業(yè)能夠通過修改源碼,優(yōu)化MySQL,得到適合企業(yè)的數(shù)據(jù)庫。
1.6 Gramine
Gramine[25]是一個(gè)輕量級庫操作系統(tǒng),旨在以最低的主機(jī)要求運(yùn)行單個(gè)應(yīng)用程序。Gramine可以在隔離的環(huán)境中運(yùn)行應(yīng)用程序,其優(yōu)勢可與在虛擬機(jī)中運(yùn)行完整的操作系統(tǒng)相媲美——包括應(yīng)用程序定制、易于移植到不同的操作系統(tǒng)以及進(jìn)程遷移。
Gramine在任何平臺(tái)上都支持原生的、未經(jīng)修改的Linux二進(jìn)制文件。目前,Gramine在Linux和Linux平臺(tái)上的Intel SGX Enclave上運(yùn)行。
在不受信任的云和邊緣部署中,用戶希望將整個(gè)應(yīng)用程序與基礎(chǔ)設(shè)施的其余部分隔離開來。Gramine支持這種應(yīng)用程序的運(yùn)行方式。Gramine通過Intel SGX將未經(jīng)修改的應(yīng)用程序引入機(jī)密計(jì)算。Gramine可以通過最少的移植工作來保護(hù)應(yīng)用程序免受惡意入侵。
Intel通過Gramine實(shí)現(xiàn)了一些使用Intel SGX的例子,在提升安全的同時(shí),小幅度增加開銷。
2 系統(tǒng)設(shè)計(jì)
2.1 加密數(shù)據(jù)庫
加密數(shù)據(jù)庫(Encrypted SQL)意味著數(shù)據(jù)庫能夠?qū)?shù)據(jù)庫中保存的數(shù)據(jù)進(jìn)行加密操作。本文提到的MySQL和SQLCipher就是加密數(shù)據(jù)庫(Encrypted SQL)。SQLCipher通過一段密鑰對數(shù)據(jù)庫進(jìn)行加密解密,保證數(shù)據(jù)安全保存,依靠賬號密碼對數(shù)據(jù)庫訪問進(jìn)行限制。MySQL通過賬號密碼限制數(shù)據(jù)庫的訪問,用事務(wù)的特性保證數(shù)據(jù)正確,不同的數(shù)據(jù)庫引擎適應(yīng)不同的使用環(huán)境。
2.2 密鑰管理服務(wù)器
密鑰管理服務(wù)器(Key Manager Server,KMS)服務(wù)用于對Secret Key的存儲(chǔ)和管理,通過遠(yuǎn)程認(rèn)證,為目標(biāo)APP配置Secret Key,并提供接口用于對Key的維護(hù)、升級、重置等操作。KMS主要包含的部分如圖2所示。
2.2.1 加密數(shù)據(jù)庫SQLCipher
SQLCipher基于SQLite,可以將其看作SQLite的一個(gè)分支,它繼承了SQLite輕量、高性能的特點(diǎn),同時(shí)提供加密擴(kuò)展,為存儲(chǔ)數(shù)據(jù)提供可靠的加密層保護(hù)。參考官方介紹,其中幾個(gè)特點(diǎn)適合當(dāng)前KMS。

圖2 總體結(jié)構(gòu)
(1)快速性能,在許多操作中加密的開銷僅為5%~15%。對加密數(shù)據(jù)進(jìn)行操作之后,加密算法會(huì)對數(shù)據(jù)庫進(jìn)行加密,加密開銷占整個(gè)操作開銷很小的一部分。
(2)數(shù)據(jù)庫文件中的數(shù)據(jù)100%加密。所有存儲(chǔ)在數(shù)據(jù)庫的數(shù)據(jù)都是處于加密的狀態(tài)。
(3)良好安全實(shí)踐(CBC模式、HMAC、密鑰派生)。各種安全的方案,使用戶得到很好的體驗(yàn)。
(4)零配置和應(yīng)用程序級加密。SQLCipher不需要復(fù)雜的配置就能使用。整個(gè)程序在運(yùn)行的過程中是加密的。
(5)由同行評審的OpenSSL加密庫提供的算法。所有的加密算法都通過實(shí)踐的檢驗(yàn)。
(6)可配置加密程序。加密的程序并不是固定的,可以通過配置的方式進(jìn)行更改。
2.2.2 KMS遠(yuǎn)程認(rèn)證
遠(yuǎn)程認(rèn)證的證書鏈如圖3所示。
KMS接收來自客戶端或者數(shù)據(jù)庫服務(wù)端申請Secret Key請求,對于認(rèn)證合法的客戶端或者是數(shù)據(jù)庫服務(wù)端,將向其發(fā)送Secret Key。具體的工作流如圖4所示。
(1)客戶端或者數(shù)據(jù)庫服務(wù)端生成密鑰對,并將公鑰通過控制臺(tái)頁面提交到KMS。
(2)KMS根據(jù)上傳公鑰生成客戶端證書,客戶端或者數(shù)據(jù)庫服務(wù)端下載該證書,同時(shí)下載服務(wù)器根證書。
(3)將服務(wù)器根證書和客戶端證書導(dǎo)入到客戶端或者數(shù)據(jù)庫服務(wù)端。
(4)客戶端或者數(shù)據(jù)庫服務(wù)端(通過有權(quán)限的管理人員)在控制臺(tái)頁面請求KMS,生成Token,該Token由KMS簽發(fā),用于進(jìn)一步驗(yàn)證和訪問控制。

圖3 證書鏈
(5)將Token導(dǎo)入到客戶端或者數(shù)據(jù)庫服務(wù)端。
(6)啟動(dòng)客戶端或者數(shù)據(jù)庫服務(wù)端,在初始階段向KMS發(fā)起Https請求,雙方各自對對方證書進(jìn)行驗(yàn)證(雙向驗(yàn)證)。
(7)第6步驗(yàn)證成功后,KMS對Token進(jìn)行驗(yàn)證,驗(yàn)證成功后,向客戶端或者數(shù)據(jù)庫服務(wù)端發(fā)送Secret Key。
2.3 系統(tǒng)介紹
本文使用SQLCipher數(shù)據(jù)庫和MySQL數(shù)據(jù)庫作為實(shí)例實(shí)現(xiàn)整個(gè)系統(tǒng)。本方案中將加密數(shù)據(jù)庫對外共享定義為兩種形式:第一種,在可信機(jī)器上部署數(shù)據(jù)庫服務(wù)器,通過遠(yuǎn)程連接訪問;第二種,數(shù)據(jù)庫以加密文件的形式存儲(chǔ)在本地機(jī)器當(dāng)中,共享時(shí)分享整個(gè)或部分加密數(shù)據(jù)庫文件。
本方案的系統(tǒng)模型如圖5所示,由兩個(gè)實(shí)體(數(shù)據(jù)提供方和數(shù)據(jù)使用方)、三個(gè)部分(加密數(shù)據(jù)庫(Encrypted SQL)、密鑰管理服務(wù)器(Key Manager Server,KMS)、搭載含有SGX功能的機(jī)器(SGX Worker)模型定義)組成。
第一步,將加密數(shù)據(jù)庫運(yùn)行在Enclave中。
第二步,讓運(yùn)行在Enclave中的應(yīng)用去訪問加密數(shù)據(jù)庫。

圖4 工作流程

圖5 系統(tǒng)的運(yùn)行流程
3 運(yùn)行過程與分析
系統(tǒng)的運(yùn)行流程主要可以分為系統(tǒng)初始化、密鑰生成和管理以及數(shù)據(jù)流轉(zhuǎn)三個(gè)階段。
3.1 Intel SGX啟動(dòng)SQLCipher
Gramine是Intel公司的一個(gè)軟件擴(kuò)展,主要是為了簡化Intel SGX的使用。本文以SQLite作為模板進(jìn)行SQLCipher的編寫。Gramine實(shí)例的編寫主要的文件有兩個(gè)Makefile和manifest.template。首先將Makefile中的SQLite改為SQLCipher,然后將manifest.template中程序的入口改為SQLCipher。使用Intel SGX進(jìn)行編譯完成之后,在SQL文件中添加解密的代碼。SQLCipher基于Intel SGX運(yùn)行SQL文件的時(shí)候,在安全區(qū)里面完成數(shù)據(jù)庫的解密并進(jìn)行數(shù)據(jù)庫的操作。
3.2 Intel SGX啟動(dòng)MySQl
與Intel SGX啟動(dòng)SQLCipher的流程相差不大,將Makefile和manifest.template兩個(gè)文件進(jìn)行修改,保證Intel SGX啟動(dòng)MySQL時(shí),將MySQL的運(yùn)行進(jìn)程運(yùn)行在Intel SGX的安全環(huán)境中。同時(shí),將MySQL的文件作為信任的文件,保證數(shù)據(jù)的交互能夠正常進(jìn)行。
3.3 試驗(yàn)分析
3.3.1 試驗(yàn)環(huán)境的描述
試驗(yàn)的操作系統(tǒng)是Ubuntu20.04, CPU是Intel(R) Xeon(R) Gold 6330N CPU @ 2.20 GHz,總內(nèi)存是377G,剩余的內(nèi)存是243G。在試驗(yàn)中使用的各個(gè)軟件的版本SQLCipher 3.39.2、SQLite 3.31.1、MySQL 8.0.29-0ubuntu0、Python 3.8.10、Intel SGX和Gramine 1.2。所有的試驗(yàn)數(shù)據(jù)由Python生成,通過命令行進(jìn)行操作。
3.3.2 SQLCipher對比試驗(yàn)
在整個(gè)系統(tǒng)中,為了保證數(shù)據(jù)庫的數(shù)據(jù)安全,SQLCipher會(huì)放入Intel SGX的安全區(qū)中。對于正常的系統(tǒng)環(huán)境中,在CPU環(huán)境中使用SQLCipher進(jìn)行數(shù)據(jù)庫的存儲(chǔ),不放入Intel SGX中。所以兩個(gè)系統(tǒng)環(huán)境中,主要的差距是在數(shù)據(jù)庫運(yùn)行環(huán)境。因此,本文做了在Intel SGX安全區(qū)中的SQLCipher和普通環(huán)境下的SQLCipher的對比試驗(yàn)。在兩個(gè)數(shù)據(jù)庫中插入相同的數(shù)據(jù),對比所消耗的時(shí)間。本次試驗(yàn)使用的數(shù)據(jù)量分別是50 萬、100 萬、150 萬和200 萬;贗ntel SGX的SQLCipher數(shù)據(jù)如表1所示。

表1 基于Intel SGX的SQLCipher
不基于Intel SGX的SQLCipher數(shù)據(jù)如表2所示。

表2 不基于Intel SGX的SQLCipher
兩方對比的折線圖參見圖6。

圖6 SQLCipher兩方數(shù)據(jù)的對比
從圖6可以看出,在使用相同的數(shù)據(jù)進(jìn)行插入操作的時(shí)候,基于Intel SGX的SQLCipher和不基于Intel SGX的SQLCipher的各類操作消耗的時(shí)間相差在8 s左右。數(shù)據(jù)操作的規(guī)模越大,由Intel SGX產(chǎn)生的性能損失比例越小。
3.3.3 MySQL對比試驗(yàn)
MySQL在Intel SGX中運(yùn)行與普通的環(huán)境下運(yùn)行進(jìn)行對比,不基于Intel SGX的SQLCipher如表3所示。

表3 不基于Intel SGX的MySQL
基于Intel SGX的MySQL的數(shù)據(jù)如表4所示。

表4 基于Intel SGX的MySQL
本文從SELECT、UPDATE和INSERT三個(gè)方面進(jìn)行數(shù)據(jù)對比(見圖7、圖8、圖9)。

圖7 MySQL SELECT的數(shù)據(jù)對比

圖8 MySQL UPDATE的數(shù)據(jù)對比

圖9 MySQL INSERT的數(shù)據(jù)對比
從圖7、圖8、圖9可以看出,基于Intel SGX的MySQL比不基于Intel SGX的MySQL多消耗30%左右的時(shí)間。Christian Priebe等[24]提出EnclaveDB,消耗40%性能換取數(shù)據(jù)庫在安全的環(huán)境中運(yùn)行;贗ntel SGX的MySQL更優(yōu)于基于Intel SGX的EnclaveDB 。
3.3.4 試驗(yàn)總結(jié)
從試驗(yàn)可以看出,基于Intel SGX的數(shù)據(jù)庫與正常環(huán)境下的數(shù)據(jù)庫相比,損耗的性能和數(shù)據(jù)庫的類型有關(guān)系;贗ntel SGX的SQLCipher性能損耗主要原因是每次對數(shù)據(jù)庫進(jìn)行操作的時(shí)候,都需要啟動(dòng)Intel SGX;基于Intel SGX的MySQL的性能損耗主要原因是Intel SGX對數(shù)據(jù)庫的IO限制。兩種數(shù)據(jù)庫在Intel SGX的環(huán)境下,性能損失在可接受的范圍內(nèi);贗ntel SGX的數(shù)據(jù)庫環(huán)境能夠支持對于數(shù)據(jù)庫操作量不大的項(xiàng)目使用。
4 結(jié)束語
本文提出了一種基于隱私計(jì)算的數(shù)據(jù)庫全生命周期保護(hù)方法,能夠在沒有第三方服務(wù)器的情況下完成各個(gè)數(shù)據(jù)庫服務(wù)器的認(rèn)證,保證數(shù)據(jù)在應(yīng)用端和服務(wù)端之間進(jìn)行存儲(chǔ)、流轉(zhuǎn)、使用的安全性。現(xiàn)有的Intel SGX應(yīng)用方案在進(jìn)行遠(yuǎn)程認(rèn)證的時(shí)候,需要Intel公司的服務(wù)器進(jìn)行第三方認(rèn)證,但是本文提出的基于隱私計(jì)算的數(shù)據(jù)庫全生命周期保護(hù)方法,在沒有聯(lián)網(wǎng)的情況下,同樣可以保證數(shù)據(jù)的安全性。本文通過試驗(yàn)驗(yàn)證了Intel SGX能夠適配MySQL數(shù)據(jù)庫和SQLCipher數(shù)據(jù)庫,損耗也在應(yīng)用可以接受的范圍內(nèi)。本文提出的基于隱私計(jì)算的數(shù)據(jù)庫全生命周期保護(hù)方法目前基于Intel SGX硬件實(shí)現(xiàn),未來將擴(kuò)展到ARM TrustZone、AMD SEV、海光CSV等平臺(tái),并與基于Intel SGX的實(shí)現(xiàn)進(jìn)行對比驗(yàn)證。