宋天煜,楊 庚
(南京郵電大學(xué) 計算機(jī)學(xué)院、軟件學(xué)院、網(wǎng)絡(luò)空間安全學(xué)院, 南京 210023)(*通信作者電子郵箱airsty@163.com)
針對數(shù)據(jù)機(jī)密性、完整性和可用性的保護(hù)是數(shù)據(jù)庫安全的重要內(nèi)容,對數(shù)據(jù)庫安全的威脅主要包括兩個方面[1]:一是對數(shù)據(jù)庫系統(tǒng)的外部攻擊,非法用戶通過重放攻擊或者利用數(shù)據(jù)庫系統(tǒng)漏洞進(jìn)入數(shù)據(jù)庫,破壞隱私數(shù)據(jù);二是來自數(shù)據(jù)庫系統(tǒng)內(nèi)部的攻擊,具有合法訪問數(shù)據(jù)庫系統(tǒng)的用戶,利用其權(quán)限探查、修改和泄露隱私數(shù)據(jù)。
為了保障數(shù)據(jù)庫系統(tǒng)的安全性,將敏感數(shù)據(jù)加密后存入數(shù)據(jù)庫中是一種有效的方法[2-3]。目前數(shù)據(jù)庫加密主要在操作系統(tǒng)層、數(shù)據(jù)庫管理系統(tǒng)(DataBase Management System, DBMS)內(nèi)核層和DBMS外層這三種不同層次上實現(xiàn):
1)操作系統(tǒng)層加密的本質(zhì)是加解密和密鑰管理都交給操作系統(tǒng)和文件管理系統(tǒng)操作,對于數(shù)據(jù)庫系統(tǒng)完全是透明的。在安全性方面,由于操作系統(tǒng)不能對數(shù)據(jù)庫中的數(shù)據(jù)按照表結(jié)構(gòu)或者字段結(jié)構(gòu)進(jìn)行區(qū)分,因此不能提供不同的加解密算法和加密密鑰;在效率方面,需要對存儲的所有數(shù)據(jù)進(jìn)行加密和解密,會大大降低數(shù)據(jù)庫的處理能力。
2)DBMS內(nèi)核層的加密的優(yōu)點是所有的操作都和數(shù)據(jù)庫的內(nèi)核進(jìn)行交互,能夠?qū)崿F(xiàn)數(shù)據(jù)庫所有的管理功能。但是也有很大的缺點,首先因為很多數(shù)據(jù)庫的內(nèi)核不是開源的,改寫源代碼需要有數(shù)據(jù)庫供應(yīng)商的支持;其次加解密的操作都要在數(shù)據(jù)庫服務(wù)器端進(jìn)行,會加重服務(wù)器的負(fù)載。
3)DBMS外層實現(xiàn)加密的優(yōu)點是所有加解密的操作都是在數(shù)據(jù)庫的外層,不需要對數(shù)據(jù)庫進(jìn)行定制開發(fā),并且不會加重數(shù)據(jù)庫服務(wù)器的負(fù)擔(dān),但是加密后會對數(shù)據(jù)庫系統(tǒng)的某些功能造成影響,同時對整個系統(tǒng)的響應(yīng)產(chǎn)生一定的影響。
現(xiàn)有的三種層次的數(shù)據(jù)加解密服務(wù)都存在著一定的缺陷,為了使用不同加密算法對數(shù)據(jù)進(jìn)行加密,實現(xiàn)與數(shù)據(jù)庫管理系統(tǒng)的松耦合并且不影響系統(tǒng)的速度,研究者提出了數(shù)據(jù)庫中間件[4]。其中數(shù)據(jù)庫加密中間件可以部署在數(shù)據(jù)庫客戶端-服務(wù)器這種分布式應(yīng)用之間,采用請求-響應(yīng)的同步方式進(jìn)行通信。目前提出的數(shù)據(jù)庫加密中間件系統(tǒng)可以提供透明的數(shù)據(jù)加解密服務(wù)和獨立的密鑰管理機(jī)制;但是存在著數(shù)據(jù)傳輸效率不高,對數(shù)據(jù)庫客戶端工具沒有很好地支持,以及對密文數(shù)據(jù)庫用戶沒有進(jìn)行安全的管理等不足。
在現(xiàn)有的數(shù)據(jù)庫中間件的基礎(chǔ)上,本文設(shè)計并實現(xiàn)一種面向密文數(shù)據(jù)庫的中間件系統(tǒng)。本中間件系統(tǒng)設(shè)計了基于MySQL通信協(xié)議的密文中間件架構(gòu),相較于其他加密中間件使用Java數(shù)據(jù)庫連接(Java DataBase Connectivity, JDBC)連接數(shù)據(jù)庫,這種連接方式提高了對密文數(shù)據(jù)的傳輸效率,支持不同的數(shù)據(jù)庫客戶端工具,并支持不同用戶使用多個客戶端工具對密文數(shù)據(jù)庫進(jìn)行操作。同時,本中間件系統(tǒng)擁有對用戶的認(rèn)證功能,對數(shù)據(jù)使用者身份進(jìn)行認(rèn)證訪問權(quán)限控制來防止其進(jìn)行越權(quán)操作,并通過使用動態(tài)認(rèn)證的方案有效防止非法用戶通過重放攻擊進(jìn)入密文數(shù)據(jù)庫。
由于社會信息化和網(wǎng)絡(luò)化的發(fā)展導(dǎo)致產(chǎn)生的數(shù)據(jù)爆炸式增長[5],對數(shù)據(jù)的保護(hù)變得越來越重要,特別是防止敏感數(shù)據(jù)被竊取、破壞和泄露成為當(dāng)務(wù)之急,因此數(shù)據(jù)以明文的形式存儲在數(shù)據(jù)庫中已經(jīng)不能滿足用戶對隱私保護(hù)的需求[6]。針對這一需求,數(shù)據(jù)管理廠商在產(chǎn)品中提供相應(yīng)的安全功能,Oracle和MS-SQL Server兩家廠商提供的安全功能都是在DBMS中加載加密包,通過擴(kuò)展存儲過程來調(diào)用系統(tǒng)加解密模塊、密鑰管理模塊、密文索引模塊等實現(xiàn)數(shù)據(jù)庫的加密操作,這種加密方式實現(xiàn)起來比較簡單,適合于對加密要求不高的用戶使用。
通過分析數(shù)據(jù)庫管理系統(tǒng)廠商提供的安全方案可以發(fā)現(xiàn),使用加載軟件包實現(xiàn)對數(shù)據(jù)的加密存在著以下四個缺點:1)密鑰和密文保存在同一個服務(wù)器中,一旦數(shù)據(jù)庫被非法侵入時十分危險的,并且密鑰更新成本過高;2)數(shù)據(jù)庫管理員(DataBase Administrator, DBA)可以輕易接觸到密鑰,也就存在訪問敏感數(shù)據(jù)的可能性;3)無法對密文直接進(jìn)行操作;4)對數(shù)據(jù)庫用戶沒有進(jìn)行安全管理。面對越來越復(fù)雜的數(shù)據(jù)安全環(huán)境,DBMS提供的數(shù)據(jù)加解密機(jī)制已經(jīng)不能有效地滿足用戶對信息安全的需求。
為了保障密鑰的安全,文獻(xiàn)[7]基于混沌理論生成隨機(jī)密鑰,使用中國剩余定理對密鑰進(jìn)行分配,可以很好地保障主密鑰的安全和降低密鑰更新的成本。文獻(xiàn)[8]中使用了獨立的密鑰管理模塊來負(fù)責(zé)產(chǎn)生、分發(fā)和更新密鑰,可以有效保障密鑰的安全。文獻(xiàn)[9]提出一種模塊化的動態(tài)密碼策略生成器(Dynamic Password Policy Generator, DPPG),可以為策略生成不同的安全指標(biāo),從而應(yīng)對各種安全攻擊。
針對無法對密文數(shù)據(jù)庫直接進(jìn)行操作的困難,可搜索加密(searchable encryption)便應(yīng)運(yùn)而生,并得到了研究者廣泛研究和發(fā)展[10-13]。用戶將明文數(shù)據(jù)加密后存儲在服務(wù)器中,當(dāng)需要檢索數(shù)據(jù)時,用戶將關(guān)鍵字的檢索憑證發(fā)給服務(wù)器,服務(wù)器根據(jù)憑證在密文數(shù)據(jù)上直接檢索,將含有關(guān)鍵字的文件返回給用戶,用戶使用解密算法對文件進(jìn)行解密。但是以上的研究解決的是針對文本文件的檢索并且會加重用戶主機(jī)的負(fù)擔(dān)。為了解決密文數(shù)據(jù)庫中結(jié)構(gòu)化數(shù)據(jù)的搜索問題,麻省理工學(xué)院(Massachusetts Institute of Technology, MIT)的研究員提出了CryptDB系統(tǒng)[14-15],該系統(tǒng)通過使用洋蔥加密模型實現(xiàn)對密文數(shù)據(jù)直接進(jìn)行結(jié)構(gòu)化查詢語言(Structured Query Language, SQL)操作,但是在洋蔥模型對外層解密后,內(nèi)層的數(shù)據(jù)將長時間無法得到保護(hù)。文獻(xiàn)[16]在CryptDB的基礎(chǔ)上設(shè)計并實現(xiàn)了任務(wù)分割的數(shù)據(jù)庫加密系統(tǒng)——MONOMI,通過使用客戶端/服務(wù)器的結(jié)構(gòu),將任務(wù)分成客戶端和服務(wù)器端兩部分,分析SQL語句后決定任務(wù)的分配,緩解服務(wù)器端的壓力。
針對密文數(shù)據(jù)用戶管理困難的問題,文獻(xiàn)[17]基于密文策略屬性基加密(Ciphertext-Policy Attribute-Based Encryption, CP-ABE)算法設(shè)計出一種密文訪問控制機(jī)制,減少用戶接觸密鑰生成、密鑰發(fā)布等任務(wù),可以有效防止非法用戶破壞數(shù)據(jù)。文獻(xiàn)[18]提出高效安全的訪問控制方案DAC-MACS (Data Access Control for Multi-Authority Cloud Storage),可以對多個數(shù)據(jù)使用者進(jìn)行訪問控制和用戶撤銷。文獻(xiàn)[19]提出一種基于用戶行為認(rèn)證的訪問控制模型,通過結(jié)合時態(tài)信息和環(huán)境信息對用戶行為建模,對用戶行為進(jìn)行認(rèn)證,有效提高網(wǎng)絡(luò)數(shù)據(jù)的安全性。文獻(xiàn)[20]針對密文數(shù)據(jù)存儲中多個數(shù)據(jù)擁有者的問題,通過對用戶和認(rèn)證服務(wù)器交換的信息不斷更新,實現(xiàn)用戶的動態(tài)認(rèn)證,可以有效防止非法用戶通過重放攻擊進(jìn)入數(shù)據(jù)服務(wù)器。
DBMS廠商提供的數(shù)據(jù)庫安全服務(wù)在密鑰管理方面存在著不足,而已有的密文數(shù)據(jù)庫中間件方案無法做到高效的數(shù)據(jù)傳輸和安全的用戶管理。在此基礎(chǔ)上,本文設(shè)計并實現(xiàn)了面向密文數(shù)據(jù)庫的中間件系統(tǒng),可以對密文數(shù)據(jù)庫進(jìn)行可搜索加密、數(shù)據(jù)的高效安全傳輸和對用戶的安全管理。
面向密文數(shù)據(jù)庫的中間件系統(tǒng)的體系結(jié)構(gòu)如圖1所示。中間件系統(tǒng)基于MySQL通信協(xié)議進(jìn)行通信,它運(yùn)行在用戶主機(jī)上,是連接數(shù)據(jù)庫客戶端和數(shù)據(jù)庫服務(wù)器的軟件。用戶對數(shù)據(jù)庫進(jìn)行訪問時,首先需要在中間件進(jìn)行動態(tài)認(rèn)證和權(quán)限分析,認(rèn)證通過后使用數(shù)據(jù)庫客戶端對服務(wù)器進(jìn)行訪問操作。中間件解析用戶發(fā)送的SQL語句,加密敏感數(shù)據(jù)后發(fā)送給服務(wù)器,數(shù)據(jù)庫服務(wù)器返回的密文結(jié)果由中間件系統(tǒng)解密后傳給客戶端。
圖1 中間件系統(tǒng)體系結(jié)構(gòu)Fig. 1 Middleware system architecture
本中間件系統(tǒng)使用MySQL通信協(xié)議與密文數(shù)據(jù)庫進(jìn)行通信,因此數(shù)據(jù)傳輸模塊的功能包括:一是完成與數(shù)據(jù)庫客戶端和服務(wù)器的MySQL握手連接;二是獲取客戶端與服務(wù)器之間傳輸?shù)臄?shù)據(jù)報文,解析報文獲得需要加解密的信息。
1)完成MySQL握手連接。
中間件系統(tǒng)首先會接收到數(shù)據(jù)庫服務(wù)器發(fā)送的握手包,然后將握手包發(fā)送給數(shù)據(jù)庫客戶端工具,客戶端工具接收到握手包后將用戶名和密碼發(fā)送給中間件系統(tǒng),中間件驗證登錄認(rèn)證信息,如果合法則連接客戶端和服務(wù)器端,否則連接失敗。
2)解析數(shù)據(jù)報文。
數(shù)據(jù)庫報文解析和修改過程如圖2所示,中間件系統(tǒng)獲取到包含數(shù)據(jù)報文的字節(jié)流后將其分解成報文長度、序號和消息體這三部分。中間件系統(tǒng)首先將消息體部分轉(zhuǎn)化為字符串,獲取到的字符串就是標(biāo)準(zhǔn)的SQL語句,然后使用加解密模塊對SQL語句進(jìn)行加密改寫。完成改寫后將SQL字符串轉(zhuǎn)化為Byte數(shù)組,計算其長度并對報文長度進(jìn)行更新,最后再將修改后的報文長度、序號和新的消息體重新組合成標(biāo)準(zhǔn)格式的數(shù)據(jù)庫報文。
圖2 數(shù)據(jù)庫報文解析和修改Fig. 2 Database message parsing and modification
SQL語句改寫模塊的功能是對SQL語句進(jìn)行解析,改寫模塊獲得由消息體解析的SQL語句后,首先判斷查詢類型,如果是create、select、insert、update、delete這5種用戶輸入的SQL語句,就對SQL語句中明文數(shù)據(jù)進(jìn)行加密,并對列名進(jìn)行修改。下面通過一個例子說明,BenefitsCostSharing是美國醫(yī)療保險市場數(shù)據(jù)集中的一張表。若用戶輸入語句:
select name from BenefitsCostSharing where PlanId=20;
則經(jīng)過SQL語句改寫模塊輸出語句:
select c1_DEA from BenefitsCostSharing where c2_DEA=′Daefkes==′;
其中:“PlanId=20”屬于等值匹配的操作謂詞,解析函數(shù)調(diào)用加解密模塊對明文數(shù)字20使用等值加密模型進(jìn)行加密,得到密文“Daefkes==”;并且將列名id改為c2_DEA,代表在密文上將使用等值加密模型的列;select from部分的列名也將被改寫為c1_DEA,表示從等值加密模型中獲取密文。
該模塊中包含了中間件系統(tǒng)的加解密算法,提供了對敏感數(shù)據(jù)的加密和解密功能。為了實現(xiàn)對密文數(shù)據(jù)的搜索功能,本中間件系統(tǒng)使用的加解密算法是基于CryptDB的洋蔥加密模型的可搜索加密算法,用戶可以在密文數(shù)據(jù)上直接進(jìn)行SQL查詢。
如圖3所示,可搜索加密算法使用了三種加密模型:等值加密模型、保序加密模型和同態(tài)加密加密模型。
1)等值加密模型。
該模型使用兩種結(jié)構(gòu),首先使用確定加密算法(Deterministic Encryption Algorithm, DEA)對明文數(shù)據(jù)進(jìn)行加密生成內(nèi)層密文,內(nèi)層密文可以直接進(jìn)行等值比較;然后使用隨機(jī)加密算法(Random Encryption Algorithm, REA)對內(nèi)層的確定加密密文再次進(jìn)行加密,形成兩層加密的結(jié)構(gòu)。當(dāng)需要對密文進(jìn)行等值比較時,中間件系統(tǒng)首先將外層密文解密,完成等值操作后再對內(nèi)層密文進(jìn)行隨機(jī)加密。使用兩層加密結(jié)構(gòu)不僅能保證數(shù)據(jù)的安全性,還能實現(xiàn)密文數(shù)據(jù)的等值比較。
圖3 中間件系統(tǒng)中的加密模型Fig. 3 Encryption model in middleware system
2)保序加密模型。
該模型使用單層加密模型,使用保序加密算法(Order Preserving Encryption Algorithm, OPEA)[21]對明文進(jìn)行加密,可以在不對密文數(shù)據(jù)進(jìn)行解密的情況下直接比較順序。
3)同態(tài)加密模型
該模型采用單層加密,使用同態(tài)加密算法(Homomorphic Encryption Algorithm, HEA)[22]進(jìn)行加密,這種加密算法的特征是密文的加乘運(yùn)算結(jié)果解密后與在明文上直接進(jìn)行加乘運(yùn)算結(jié)果相同,可以直接在密文上完成數(shù)據(jù)庫操作中的求和以及求平均數(shù)操作。
該模塊主要實現(xiàn)三個功能,分別是數(shù)據(jù)使用者的權(quán)限判斷、身份動態(tài)認(rèn)證和用戶身份的撤銷與更新。為了保證對數(shù)據(jù)使用者的有效管理,中間件系統(tǒng)需要在數(shù)據(jù)庫中創(chuàng)建用戶權(quán)限表和用戶認(rèn)證表。
1)用戶權(quán)限判斷功能。
用戶權(quán)限判斷主要針對的是首次請求訪問密文數(shù)據(jù)庫的數(shù)據(jù)使用者,中間件系統(tǒng)進(jìn)行用戶權(quán)限判斷之前首先要獲取數(shù)據(jù)使用者的n個身份屬性atti(0
2)用戶動態(tài)認(rèn)證功能。
如圖4所示,用戶動態(tài)認(rèn)證包括以下6個步驟:
①數(shù)據(jù)使用者對密文數(shù)據(jù)庫進(jìn)行第i+1(i≥1)次訪問,通過Eni=(ci⊕ti)ki對認(rèn)證信息進(jìn)行加密,將加密的認(rèn)證信息Eni傳遞給中間件。其中:ki為加密密鑰,ci表示數(shù)據(jù)使用者擁有的認(rèn)證信息,ti表示數(shù)據(jù)使用者認(rèn)證的次數(shù),⊕表示異或操作。
②數(shù)據(jù)使用者通過ki+1=ki⊕H(ci⊕ti)對密鑰進(jìn)行更新,保存新的密鑰ki+1,其中H(ci⊕ti)表示對ci⊕ti的哈希函數(shù)。
③中間件通過Dei=D(ki,Eni)對Eni進(jìn)行解密,將Dei與用戶認(rèn)證表中的認(rèn)證信息進(jìn)行比較,如果不相同則提示數(shù)據(jù)使用者認(rèn)證失敗。
④中間件通過ki+1=ki⊕H(ci⊕ti+1)更新密鑰,以及ci+1=H(ci⊕ti)生成新的認(rèn)證信息ci+1,并對用戶認(rèn)證表中的信息進(jìn)行更新。
⑤使用新密鑰ki+1對ci+1進(jìn)行加密,得到新的加密認(rèn)證信息Eni+1=(ci+1⊕ti+1)ki+1,中間件將新的加密認(rèn)證信息發(fā)送給數(shù)據(jù)使用者。
⑥數(shù)據(jù)使用者使用密鑰ki+1對加密的認(rèn)證信息Eni+1解密,保存新的認(rèn)證信息ci+1。
數(shù)據(jù)使用者通過認(rèn)證后,中間件系統(tǒng)為其在密文數(shù)據(jù)庫中創(chuàng)建臨時用戶,臨時用戶的用戶名為數(shù)據(jù)使用者的用戶名userName,密碼為新的認(rèn)證信息ci+1,數(shù)據(jù)使用者通過用戶名和密碼進(jìn)入密文數(shù)據(jù)庫。
圖4 用戶動態(tài)認(rèn)證流程Fig. 4 Flow chart of user dynamic authentication
3)數(shù)據(jù)使用者撤銷與更新功能。
由于數(shù)據(jù)使用者在使用密文數(shù)據(jù)庫的過程中并沒有接觸到密文數(shù)據(jù)庫的任何密鑰,所以在撤銷和更新數(shù)據(jù)使用者時不需要對密文數(shù)據(jù)密鑰進(jìn)行大量的更新。當(dāng)某一數(shù)據(jù)使用者被撤銷或更新時,中間件系統(tǒng)只需要修改用戶屬性表和用戶認(rèn)證表中的信息。
密鑰管理模塊的功能包括:一是根據(jù)數(shù)據(jù)擁有者提供的信息生成主密鑰,主密鑰不僅作為等值加密模型的工作密鑰,還用于用戶認(rèn)證的功能;二是對于加解密模型中保序和同態(tài)加密,在創(chuàng)建數(shù)據(jù)表的時候針對數(shù)值型的列產(chǎn)生相應(yīng)的列密鑰。面向密文數(shù)據(jù)庫系統(tǒng)采用兩種密鑰管理方案。
1)數(shù)據(jù)擁有者主密鑰產(chǎn)生方案。主密鑰在數(shù)據(jù)擁有者創(chuàng)建數(shù)據(jù)表的時候生成,密鑰產(chǎn)生方案為:
Kdom,c=KeyGen(DataOwnerMessagem, ColumnNamec)
其中:m是數(shù)據(jù)擁有者提供的信息;c是列名。密鑰管理器通過用戶提供的信息和列名動態(tài)生成一個工作密鑰,用于等值加密算法。
2)對于保序加密和同態(tài)加密模型,密鑰通過主密鑰加密后成為二級密鑰存儲在數(shù)據(jù)庫獨立的表中,在中間件對數(shù)據(jù)進(jìn)行加解密前,會從密鑰表中獲取密鑰。
生成密鑰后,將密鑰保存在獨立的密鑰數(shù)據(jù)庫中,以便在對數(shù)據(jù)進(jìn)行加解密時使用。
該系統(tǒng)編程語言采用Java,數(shù)據(jù)庫為MySQL。
開發(fā)環(huán)境如下:1)硬件:處理器為Intel Core i5-5257U,內(nèi)存為8 GB。2)軟件:操作系統(tǒng)為macOS,Java開發(fā)環(huán)境為JDK1.8,MySQL版本為5.7。
實驗硬件環(huán)境為:CPU為Intel Xeon E3,Memory為16 GB 1 333 MHz Dual Ranked;Disk為1 TB 3.5-inch 7.2 K RPM SATA II Hard Drive。
實驗平臺為:Ubuntu-12.04。
3.2.1 測試方案
實驗使用的數(shù)據(jù)集是美國醫(yī)療保險市場數(shù)據(jù),首先運(yùn)行中間件系統(tǒng),創(chuàng)建三張數(shù)據(jù)庫表:第一張表T1包含10個int類型字段,第二張表T2包含10個varchar字段,第三張表T3包含5個int型字段、5個varchar字段。從美國醫(yī)療保險市場數(shù)據(jù)中選取相應(yīng)數(shù)據(jù)改寫生成SQL語句,加密存儲完成后對數(shù)據(jù)進(jìn)行操作并記錄時間。測試的對象是分別使用MySQL通信協(xié)議和Java數(shù)據(jù)庫連接(Java DataBase Connectivity, JDBC)的中間件系統(tǒng)。
3.2.2 測試結(jié)果以及分析
圖5描述了中間件使用MySQL通信協(xié)議對三個不同類型數(shù)據(jù)庫表執(zhí)行insert語句的時間消耗。由于需要對int類型的數(shù)據(jù)進(jìn)行保序和同態(tài)加密,所以10個int類型字段的表插入速度最慢,對varchar類型數(shù)據(jù)只要進(jìn)行確定加密,所以執(zhí)行完成時間是最少的,而混合著int類型和varchar類型的表插入速度在前兩者之間。
圖5 不同類型數(shù)據(jù)表執(zhí)行insert語句時間消耗對比Fig. 5 Time consumption comparison for different types of dataTables to execute insert statement
數(shù)據(jù)庫表中有5個int類型字段和varchar類型字段的情況下,對兩種連接方式執(zhí)行insert語句的時間消耗對比如圖6所示。
圖6 兩種方式連接數(shù)據(jù)庫時執(zhí)行insert語句時間消耗對比Fig. 6 Time consumption comparison of executing insert statement with two ways of connecting to the database
圖7描述了當(dāng)插入數(shù)據(jù)量一定時,相比使用JDBC連接數(shù)據(jù)庫方式,隨著數(shù)據(jù)表中int類型的減少,使用MySQL通信協(xié)議連接的中間件完成操作消耗時間越少,且隨著int類型數(shù)量的減小,兩種連接方式消耗時間差距越來越大。
兩種連接方式分別對數(shù)據(jù)庫執(zhí)行1 000條select、join等語句的時間對比如圖8所示。由圖8可知,相比于JDBC方式,使用MySQL通信協(xié)議連接在對數(shù)據(jù)庫的操作時間消耗上有著較大的效率優(yōu)勢。
圖7 insert語句操作中int類型數(shù)量占比對測試對象時間的影響Fig. 7 Influence of number of int types in insert statement operation on time of test object
圖8 兩種連接數(shù)據(jù)庫方式執(zhí)行SQL語句消耗時間對比Fig. 8 Time consumption comparison of executing SQL statement with two ways of connecting to the database
測試結(jié)果表明,使用MySQL通信協(xié)議連接數(shù)據(jù)庫的中間件系統(tǒng)較使用JDBC連接方式而言,在對密文數(shù)據(jù)庫進(jìn)行操作時有著較為明顯的速度優(yōu)勢,同時隨著數(shù)據(jù)庫表中數(shù)值類型數(shù)量的增多優(yōu)勢更加明顯。
數(shù)據(jù)庫面臨的威脅一般來自這幾個角色:數(shù)據(jù)庫管理員、數(shù)據(jù)庫合法用戶,以及試圖竊取數(shù)據(jù)庫存儲介質(zhì)的非法用戶。
3.3.1 數(shù)據(jù)庫管理員
數(shù)據(jù)庫管理員作為數(shù)據(jù)庫系統(tǒng)的管理者,擁有訪問其管理的數(shù)據(jù)的最高權(quán)限。數(shù)據(jù)經(jīng)過中間件加密后存儲在密文數(shù)據(jù)庫中,查看這些信息需要解密操作。由于密鑰和敏感數(shù)據(jù)存儲在不同的數(shù)據(jù)庫中,密文數(shù)據(jù)庫管理員無法獲得密鑰對敏感數(shù)據(jù)進(jìn)行解密。對于管理密鑰數(shù)據(jù)庫的管理員,密鑰都是經(jīng)過主密鑰加密后以二級密鑰的形式存儲的,因此數(shù)據(jù)庫管理員即使獲得了密鑰也無法對其解密。
3.3.2 數(shù)據(jù)庫合法用戶
由于中間件對用戶權(quán)限進(jìn)行了限制,合法用戶只能訪問密文數(shù)據(jù)庫中在其權(quán)限范圍之內(nèi)的數(shù)據(jù),即使他突破了訪問限制,由于沒有密鑰,他也無法查看其他敏感數(shù)據(jù)。
3.3.3 試圖竊取數(shù)據(jù)庫存儲介質(zhì)的非法用戶
非法用戶想要使用中間件系統(tǒng),首先需要進(jìn)行身份認(rèn)證。由于中間件系統(tǒng)使用了動態(tài)認(rèn)證機(jī)制,即使非法用戶獲得了認(rèn)證密碼,每次合法用戶認(rèn)證完成后都會更新認(rèn)證密碼,并且能使用認(rèn)證密碼的數(shù)據(jù)庫臨時賬戶也會被銷毀。如果非法用戶想直接竊取數(shù)據(jù),他必須成功同時竊取到密文數(shù)據(jù)庫和密鑰服務(wù)器中的存儲介質(zhì),即使他竊取到了密鑰,獲得的也是二級密鑰,無法對密文數(shù)據(jù)進(jìn)行解密。而且在確定加密中加入了隨機(jī)加密策略,因此除非非法用戶使用中間件系統(tǒng)對數(shù)據(jù)進(jìn)行解密,否則無法查看到敏感數(shù)據(jù)。
綜上分析,經(jīng)過中間件加密后的數(shù)據(jù)庫可以有效地防止來自數(shù)據(jù)庫內(nèi)部和外部的攻擊,并且對合法用戶的權(quán)限也能有很好的限制。
通過對明文數(shù)據(jù)庫進(jìn)行加密使其變?yōu)槊芪臄?shù)據(jù)庫是保證數(shù)據(jù)機(jī)密性的重要手段。本文提出了一種面向密文數(shù)據(jù)庫的中間件系統(tǒng)的設(shè)計方案,通過在安全主機(jī)上部署中間件,可以實現(xiàn)密文數(shù)據(jù)庫的可搜索加密操作。相較于其他的數(shù)據(jù)庫中間件系統(tǒng),該方案的特點在于:使用MySQL通信協(xié)議連接數(shù)據(jù)庫客戶端和服務(wù)器端,保證數(shù)據(jù)高效安全傳輸,并對數(shù)據(jù)庫客戶端工具有著更好的支持;動態(tài)用戶認(rèn)證機(jī)制可以有效防止非法用戶的攻擊;實現(xiàn)了密文數(shù)據(jù)庫的可搜索操作。實驗結(jié)果表明,所提中間件系統(tǒng)可以高效地進(jìn)行數(shù)據(jù)加解密操作,表明該系統(tǒng)是有效的、可行的。