1 引言
隨著電子商務(wù)和電子政務(wù)的迅速發(fā)展,網(wǎng)絡(luò)中的數(shù)據(jù)呈爆炸式增長,數(shù)據(jù)規(guī)模越來越大,涉及的技術(shù)越來越復(fù)雜。2002 年,Hakan Hacigumus 首次提出了“databases as a service”,即“外包數(shù)據(jù)庫的概念”。在外包數(shù)據(jù)庫系統(tǒng)中,組織將數(shù)據(jù)業(yè)務(wù)外包給專門的數(shù)據(jù)庫服務(wù)器,由它們?nèi)ネ瓿蓴?shù)據(jù)的存儲(chǔ)和管理等復(fù)雜技術(shù)工作,而數(shù)據(jù)庫用戶通過網(wǎng)絡(luò)從外包數(shù)據(jù)庫中獲得服務(wù)。在這種運(yùn)行模式中,數(shù)據(jù)存儲(chǔ)在非可信的第三方服務(wù)器中,最大的問題就是如何保證數(shù)據(jù)的安全性,特別是如何防止內(nèi)部人員(如:數(shù)據(jù)庫管理員)泄露、丟失、甚至破壞數(shù)據(jù)。傳統(tǒng)的一些安全機(jī)制,如操作系統(tǒng)安全機(jī)制、訪問控制機(jī)制由服務(wù)器端操作,在外包數(shù)據(jù)庫這種模式中不能完全保障其安全性。而利用加密技術(shù)來保護(hù)數(shù)據(jù)的安全性是一種非常理想的選擇,即使入侵者可以利用操作系統(tǒng)漏洞或者繞過訪問控制機(jī)制非法竊取數(shù)據(jù)文件,但是沒有密鑰進(jìn)行解密,所獲取的信息是不可讀的。
2 相關(guān)工作
一些工作人員對(duì)數(shù)據(jù)庫加密進(jìn)行了研究。文獻(xiàn)[5]提出了一種同態(tài)加密方法。同態(tài)加密的思想是加密后的數(shù)據(jù)仍然保持原明文數(shù)據(jù)的有序性,從而可以實(shí)現(xiàn)不用解密數(shù)據(jù)而對(duì)加密數(shù)據(jù)直接進(jìn)行訪問和算術(shù)運(yùn)算。然而,從安全性角度來看,這種加密方法本身具有其固有的缺陷,因?yàn)樗竺芪臄?shù)據(jù)仍然保持有序性,這與安全的加密算法是相悖的。文獻(xiàn)[6]中,在數(shù)據(jù)庫作為一種服務(wù)(Database As a Service)的背景下,提出了對(duì)加密數(shù)據(jù)查詢的方法。存儲(chǔ)時(shí),除了對(duì)關(guān)系表中的元組加密外,還增加一個(gè)索引字段,用來存儲(chǔ)加密字段的分桶號(hào)(Bucket ID),桶號(hào)表示明文數(shù)據(jù)值落在某段區(qū)間內(nèi)。查詢時(shí),客戶端提交的SQL查詢語句可以直接執(zhí)行在加密數(shù)據(jù)上,而無須解密,但查詢結(jié)果中包含不滿足調(diào)節(jié)的元組,需要解密進(jìn)行二次查詢。文獻(xiàn)[7]進(jìn)一步對(duì)它如何分桶進(jìn)行改進(jìn),給出最優(yōu)分桶算法,使得查詢代價(jià)最少。但是,這種方法對(duì)于多表連接查詢的代價(jià)非常大。文獻(xiàn)[8]提出了一種保持有序的加密方法。給定一個(gè)目標(biāo)分布函數(shù),對(duì)明文值進(jìn)行轉(zhuǎn)換得到密文,使得密文不僅保持有序,而且服從某一目標(biāo)函數(shù)的分布。由于其密文保持有序,無須解密就可以直接對(duì)密文進(jìn)行等值和范圍查詢,也可以進(jìn)行MAX、MIN、COUNT 和ORDER BY查詢。但這種方法由于密文保持有序性,容易遭受選擇密文攻擊。也就是說,如果攻擊者能夠選擇一定數(shù)量的明文(或密文),并且把它們加密(或解密)成對(duì)應(yīng)的密文(或明文),那么他就能夠以較大的概率估計(jì)出密文對(duì)應(yīng)的明文值。類似地,如果攻擊者知道這個(gè)域的一些信息,比如說該域的數(shù)據(jù)分布,他也能夠以較大的概率估計(jì)密文對(duì)應(yīng)的明文值。文獻(xiàn)[9]中,智能卡具有加密和查詢處理能力,它把數(shù)據(jù)加密后存儲(chǔ)在服務(wù)器中,密鑰也存儲(chǔ)在智能卡中。查詢時(shí),智能卡能夠?qū)Φ戎挡樵冋Z句進(jìn)行轉(zhuǎn)換,使之能夠?qū)γ芪臄?shù)據(jù)進(jìn)行查詢。但是,它不能對(duì)實(shí)數(shù)類數(shù)據(jù)進(jìn)行范圍查詢。文獻(xiàn)[10]中使用序列加密(stream cipher)方法對(duì)文本數(shù)據(jù)進(jìn)行加密處理,這樣可以無須解密而直接對(duì)加密文本搜索關(guān)鍵詞,但是這種方法沒有涉及到如何應(yīng)用到數(shù)據(jù)庫中。文獻(xiàn)[11]和[12]對(duì)數(shù)據(jù)庫中字符型數(shù)據(jù)的加密以及加密數(shù)據(jù)的快速查詢進(jìn)行了研究。
3 數(shù)據(jù)加密的體系結(jié)構(gòu)
數(shù)據(jù)庫加密,大致可以分為兩種方式:DBMS 外部加密和DBMS 內(nèi)部加密。DBMS 外部加密,一般選擇在應(yīng)用程序和操作系統(tǒng),通過調(diào)用加/解密函數(shù)來完成加密數(shù)據(jù)的存儲(chǔ)和訪問。例如,在操作系統(tǒng)層次實(shí)現(xiàn)加密時(shí),可以利用它管理文件系統(tǒng)的功能,直接對(duì)存儲(chǔ)數(shù)據(jù)的文件進(jìn)行加密。在操作系統(tǒng)中加密時(shí),加密的粒度是基于文件,對(duì)應(yīng)到數(shù)據(jù)庫中的表或者整個(gè)數(shù)據(jù)庫,這種加密粒度是非常粗糙,最直接的影響是,加/解密的工作相當(dāng)大,極大地降低系統(tǒng)性能。DBMS 內(nèi)部加密,一般選擇在數(shù)據(jù)物理存取之前進(jìn)行加/解密操作。也就是說,DBMS 在將內(nèi)存中的數(shù)據(jù)寫到磁盤時(shí),進(jìn)行加密操作,而從磁盤讀取數(shù)據(jù)到內(nèi)存中時(shí),進(jìn)行相應(yīng)的解密操作。BMS 能夠區(qū)分各種粒度的數(shù)據(jù),所以可以支持各種粒度的加密,加密的靈活性較好。另外,在DBMS 內(nèi)部實(shí)現(xiàn)加密,可以更有效地和DBMS 內(nèi)部的訪問控制機(jī)制、授權(quán)機(jī)制等各種功能結(jié)合起來。此外,數(shù)據(jù)庫中的數(shù)據(jù)具有高度結(jié)構(gòu)化,共享性高等特點(diǎn),在對(duì)數(shù)據(jù)庫中存儲(chǔ)數(shù)據(jù)進(jìn)行加密時(shí),需要結(jié)合它們的特點(diǎn),對(duì)加密算法、加密粒度以及加密方式進(jìn)行合理選擇。首先,在選擇加密算法時(shí),對(duì)加密尤其是解密速度要求比較快,不能因?yàn)榧?解密過程而導(dǎo)致系統(tǒng)性能大幅度下降。其次,應(yīng)當(dāng)支持靈活的加密粒度。根據(jù)用戶的需要,能夠選擇對(duì)數(shù)據(jù)庫、表、記錄、字段、數(shù)據(jù)項(xiàng)進(jìn)行加密。同時(shí),還應(yīng)結(jié)合目前DBMS 選擇適當(dāng)加密方式。
在設(shè)計(jì)數(shù)據(jù)加密的體系結(jié)構(gòu)時(shí),采用基于DBMS 內(nèi)核層加密方法,加密的粒度為表級(jí),如圖1 所示。其中系統(tǒng)表和加解密組件是新增的。設(shè)計(jì)思想是:用戶在創(chuàng)建表的時(shí)候,可以指定是否對(duì)其加密存儲(chǔ),如果需要加密,則在系統(tǒng)表的安全字典中插入一條相應(yīng)的記錄。在DBMS 將數(shù)據(jù)寫到磁盤上時(shí),查詢系統(tǒng)表的安全字典,如果需要加密,則首先對(duì)數(shù)據(jù)加密,再將其寫出到外存。當(dāng)DBMS 從磁盤中讀入數(shù)據(jù)塊時(shí),如果數(shù)據(jù)塊是加密過的,則加/解密模塊查詢安全字典,取出相應(yīng)的密鑰解密數(shù)據(jù)塊。
圖1 數(shù)據(jù)庫加密體系結(jié)構(gòu)圖
4 加密實(shí)現(xiàn)
依據(jù)上面數(shù)據(jù)庫加密體系結(jié)構(gòu),在PostgreSQL 中實(shí)現(xiàn)了基于塊的表級(jí)存儲(chǔ)數(shù)據(jù)加密。PostgreSQL是以加州大學(xué)伯克利分校開發(fā)的POSTGRES 版本4.2 為基礎(chǔ)的對(duì)象關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(ORDBMS),被廣泛地認(rèn)為是目前特性最齊全的開放源碼數(shù)據(jù)庫管理系統(tǒng)。數(shù)據(jù)加密時(shí),使用了GOST 算法,GOST 是一種分組對(duì)稱加密算法,來自于對(duì)DES 的改進(jìn),它采用64 位分組和256 位密鑰。
4.1 系統(tǒng)內(nèi)核頁面的結(jié)構(gòu)
系統(tǒng)內(nèi)核中的每一個(gè)頁(page)對(duì)應(yīng)外存上的一個(gè)塊(block)。默認(rèn)情況下,他們的大小是8K,最大可以為32K。每個(gè)頁面分為頁頭信息(PageHeaderData)、頁中存儲(chǔ)的具體數(shù)據(jù)以及頁尾中關(guān)于頁面類型的頁面特定信息(Special-Space)三部分,具體結(jié)構(gòu)如圖2 所示。
圖2 頁面結(jié)構(gòu)圖
PageHeaderData 存放每一頁都必有的公共信息,即頁面空間管理信息,對(duì)于每種類型的頁面都是定長的,主要包含如下幾個(gè)字段:
(1)pd_pagesize_version,兩個(gè)字節(jié),高8 位指示頁面大小,低8 位指示當(dāng)前版本號(hào);
(2)pd_lower,指出頁內(nèi)當(dāng)前可用空間的起始偏移;
(3)pd_upper,指出頁內(nèi)當(dāng)前可用空間的終止偏移;
(4)pd_special,指出頁內(nèi)關(guān)于頁面類型的特定信息起始偏移。因?yàn)閷?duì)于不同類型的頁面,SpecialSpace 的大小及存放數(shù)據(jù)內(nèi)容是不一樣的。
比如,B 樹索引的頁面與heap 關(guān)系的頁面,其SpecialSpace 是不同的,B 樹索引頁面比heap 關(guān)系多了指向其左右兄弟頁面及父頁面的指針。
在頁頭信息和pd_lower 之間是一個(gè)數(shù)組,它的每一個(gè)元素Linp 存放了一條記錄在頁面中的起始偏移。數(shù)組中元素的個(gè)數(shù)也就是頁面中存放記錄的條數(shù)。在pd_upper和pd_special之間的Item是關(guān)系中的記錄,它們是從后向前存放的。系統(tǒng)支持變長字段,所以記錄不是定長的。
4.2 加解密流程
進(jìn)行加解密的基本思想是:在DBMS 將內(nèi)存中的頁面寫出到外存中時(shí),首先查詢安全字典,如果需要加密存儲(chǔ),則用安全字典中當(dāng)前密鑰加密。在將數(shù)據(jù)從外存讀入內(nèi)存后,如果頁頭標(biāo)識(shí)頁面是加密過的,則取出相應(yīng)的密鑰解密。
加密時(shí),只加密頁面中的數(shù)據(jù)域。因?yàn)榧用芩惴ㄍǔJ欠纸M加密,所以要處理加密數(shù)據(jù)長度不是分組長度整數(shù)倍的情況。假設(shè)采用加密算法是64 位分組,如果數(shù)據(jù)域不是64 的整數(shù)倍,則采用雙向加密技術(shù)。雙向加密技術(shù)的思想是,對(duì)數(shù)據(jù)域中的數(shù)據(jù),從前往后加密,如果最后一組數(shù)據(jù)長度小于分組長度,取前面的加密數(shù)據(jù)進(jìn)行填充。例如,在圖2 中,按照順序加密數(shù)據(jù)域itemN,item(N-1),…,如果最后一項(xiàng)item1長度不夠,取前面已經(jīng)加密數(shù)據(jù)進(jìn)行填充后再加密。加密后,在頁頭的pd_pagesize_version 域使用兩個(gè)比特來設(shè)置加密標(biāo)識(shí),目前其低8 位只用了最低1 位來標(biāo)識(shí)版本號(hào),文中使用其中的高2 位來標(biāo)識(shí)當(dāng)前頁面已加密及使用的密鑰的編號(hào),00-未加密,01-使用密鑰1 加密,10-使用密鑰2 加密。
解密時(shí),當(dāng)數(shù)據(jù)塊從外存讀入內(nèi)存時(shí),如果頁頭標(biāo)識(shí)頁面是加密過的,則從安全字典中取出相應(yīng)的密鑰解密數(shù)據(jù)域。由于可能存在中間部分被加密兩次的情況,應(yīng)該先解密最后一組數(shù)據(jù),然后從前向后順序地解密。
4.3 安全字典
為了支持?jǐn)?shù)據(jù)庫加密,在系統(tǒng)表中增加了一個(gè)安全字典。它由兩個(gè)表組成,一個(gè)是加密關(guān)系表,另一個(gè)是用戶授權(quán)表。圖3 和圖4 分別是加密關(guān)系表和用戶授權(quán)表中記錄的結(jié)構(gòu)。
圖3 加密關(guān)系表中記錄的結(jié)構(gòu)
圖4 用戶授權(quán)表中記錄的結(jié)構(gòu)
其中,在加密關(guān)系表中,DID和RID分別是數(shù)據(jù)庫ID和關(guān)系ID,它們作為主鍵來唯一標(biāo)識(shí)一條記錄。Etag 標(biāo)識(shí)關(guān)系表是否需要加密存儲(chǔ)(1-加密,0-不需加密)。CurID、Key1、Key2、UpdtTime、UpdtTag 分別是當(dāng)前使用密鑰編號(hào)、密鑰1、密鑰2、上次密鑰更新日期以及更新是否完成標(biāo)識(shí)(1-完成,0-未完成),之所以有兩個(gè)密鑰,主要是用于密鑰的更新,在后面的密鑰管理中介紹。
在用戶授權(quán)表中,UID、DID、RID作為主鍵來唯一標(biāo)識(shí)一條記錄。UID是用戶ID,DID和RID分別是數(shù)據(jù)庫ID和關(guān)系ID,是指向加密關(guān)系表的外鍵,ValidTag 指示當(dāng)前記錄是否有效(1-有效,0-無效),StartTime 和EndTime 表示用戶訪問加密關(guān)系權(quán)限的起始及截止日期。
同時(shí),增設(shè)了系統(tǒng)安全管理員(SSA),使用專門的接口來管理和維護(hù)安全字典。他通過在用戶授權(quán)表中添加記錄來授予某些用戶訪問機(jī)密數(shù)據(jù)的權(quán)限,也可以調(diào)整密鑰的更新周期,還負(fù)責(zé)用戶UID的發(fā)放和管理。數(shù)據(jù)庫管理員(DBA)負(fù)責(zé)常規(guī)的數(shù)據(jù)庫維護(hù),用戶自主訪問控制(DAC)的授權(quán)等,但DBA 沒有權(quán)限訪問加密過的數(shù)據(jù),也不能訪問安全字典,這樣就避免了DBA 仿冒用戶來竊取和篡改數(shù)據(jù)庫中的敏感數(shù)據(jù)。圖5 是在增加安全字典后用戶訪問數(shù)據(jù)庫的流程。
圖5 加密數(shù)據(jù)庫的訪問流程圖
具體的訪問過程如下:
(1)用戶首先使用DBA分配的用戶名和密碼登錄系統(tǒng);
(2)訪問控制模塊對(duì)用戶名與密碼進(jìn)行鑒別,如果正確,DBMS 與用戶建立連接;
(3)用戶提交查詢語句;
(4)訪問控制模塊首先檢測用戶是否有權(quán)限訪問語句中指定的關(guān)系(由DBA授權(quán)),驗(yàn)證通過后,執(zhí)行查詢;
(5)查詢執(zhí)行器從外存中讀取關(guān)系數(shù)據(jù)塊;
(6)如果數(shù)據(jù)塊是未加密過的(由頁頭判斷)則直接將數(shù)據(jù)傳給查詢執(zhí)行器,并轉(zhuǎn)到(9),如果讀出的數(shù)據(jù)塊是加密過的,則調(diào)用安全控制模塊進(jìn)行安全權(quán)限驗(yàn)證;
(7)安全控制模塊獲取用戶的密鑰ID(可以是磁卡、指紋及口令,只要唯一標(biāo)識(shí)該用戶,這個(gè)ID是系統(tǒng)安全員(SSA)授予的),查詢安全字典以獲取解密密鑰。查詢安全字典的步驟如下:
①首先查詢用戶授權(quán)表,依次進(jìn)行如下驗(yàn)證:是否存在主鍵為(密鑰ID,當(dāng)前數(shù)據(jù)庫ID,當(dāng)前訪問關(guān)系ID)的記錄;記錄是否有效;當(dāng)前時(shí)間是否在起始與終止有效期之間。只有全為真時(shí),用戶才有權(quán)限訪問加密關(guān)系;
②根據(jù)(當(dāng)前數(shù)據(jù)庫ID,當(dāng)前訪問關(guān)系ID)以及頁頭的加密密鑰編號(hào)從加密關(guān)系表中取出密鑰;
(8)使用密鑰解密數(shù)據(jù),并將解密后的明文傳給查詢執(zhí)行器;
(9)查詢執(zhí)行器執(zhí)行查詢,將查詢結(jié)果返回給用戶。
4.4 SQL的擴(kuò)展
要實(shí)現(xiàn)對(duì)數(shù)據(jù)庫加密,需要擴(kuò)展ANSI SQL92 標(biāo)準(zhǔn)的數(shù)據(jù)定義語言DDL。主要在兩個(gè)方面擴(kuò)展:一是關(guān)系的創(chuàng)建語句;另一個(gè)是關(guān)系結(jié)構(gòu)的修改語句。
在創(chuàng)建新關(guān)系時(shí),可以指明是否對(duì)此關(guān)系中的數(shù)據(jù)加密存儲(chǔ),擴(kuò)展后的語法為:
CREATE TABLE 關(guān)系名(屬性名類型,… ,完整性約束,… [,ENCRY])
對(duì)于已經(jīng)創(chuàng)建的關(guān)系,可以修改關(guān)系中的數(shù)據(jù)是否加密存儲(chǔ),擴(kuò)展后的語法為:
ALTER TABLE 關(guān)系名WITH ENCRY [NOW] | WITHOUTENCRY
當(dāng)用戶創(chuàng)建一個(gè)關(guān)系時(shí),如果指出這個(gè)關(guān)系中的數(shù)據(jù)需要加密存儲(chǔ)(即帶有ENCRY項(xiàng)),那么密鑰產(chǎn)生器就會(huì)自動(dòng)產(chǎn)生一個(gè)密鑰,并在安全字典的加密關(guān)系表中插入如下一條記錄:(數(shù)據(jù)庫ID,新創(chuàng)建關(guān)系ID,1,新產(chǎn)生密鑰,0,當(dāng)前系統(tǒng)時(shí)間,1,0,默認(rèn)密鑰有效期)
將ETag 設(shè)為1 表示關(guān)系需要加密存儲(chǔ),并且當(dāng)前活動(dòng)密鑰是密鑰1。因?yàn)檫沒用到密鑰2,將Key2 置0。將UpdtTag設(shè)為1 表示已完成密鑰的更新。
在關(guān)系已經(jīng)創(chuàng)建后,關(guān)系所有者和系統(tǒng)安全員(SSA)可以修改加密選項(xiàng)。如果將加密改為不再加密,即使用選項(xiàng)WITHOUT ENCRY,只需在加密關(guān)系表中將相應(yīng)記錄的ETag字段設(shè)為0,指示出關(guān)系不再需要加密存儲(chǔ),并不用對(duì)整個(gè)關(guān)系進(jìn)行解密操作。用戶以后訪問這個(gè)關(guān)系時(shí),如果從外存讀入的數(shù)據(jù)塊是加密過的,則系統(tǒng)自動(dòng)從安全字典的加密關(guān)系表中取出相應(yīng)的加密密鑰解密。在將其寫回到外存上時(shí),先將頁頭的是否加密標(biāo)識(shí)設(shè)為未加密,再明文寫回。也就是說,在用戶對(duì)原加密存儲(chǔ)的關(guān)系訪問的過程中完成了關(guān)系數(shù)據(jù)由密文存儲(chǔ)到明文存儲(chǔ)的轉(zhuǎn)變。
在將以前未加密存儲(chǔ)的關(guān)系修改為需要加密存儲(chǔ)時(shí),即使用選項(xiàng)WITH ENCRY,那么同新創(chuàng)建一個(gè)關(guān)系且指定加密時(shí)一樣,在安全字典的加密關(guān)系表中插入如下一條記錄:(數(shù)據(jù)庫ID,被修改關(guān)系ID,1,新產(chǎn)生密鑰,0,當(dāng)前系統(tǒng)時(shí)間,0,0,默認(rèn)密鑰有效期)
同新創(chuàng)建一個(gè)關(guān)系且指定加密存儲(chǔ)時(shí)的區(qū)別是,將更新是否完成標(biāo)識(shí)UpdtTag 設(shè)置為0,指示當(dāng)前更新未完成。因?yàn)樵谛薷氖欠窦用茼?xiàng)的時(shí)候,關(guān)系中可能已有數(shù)據(jù),而且通常不是DBMS 負(fù)荷較低的時(shí)候,為了避免影響系統(tǒng)的性能,沒有立即將數(shù)據(jù)轉(zhuǎn)為加密存儲(chǔ)的形式。通過這一設(shè)定,把關(guān)系由非加密存儲(chǔ)到加密存儲(chǔ)的轉(zhuǎn)變交給密鑰更新程序去完成。在系統(tǒng)低負(fù)荷時(shí)自動(dòng)運(yùn)行的密鑰更新程序會(huì)自動(dòng)完成關(guān)系的加密存儲(chǔ)。
5 實(shí)驗(yàn)
實(shí)驗(yàn)的主要目的是評(píng)估數(shù)據(jù)庫加密后對(duì)DBMS 性能的影響。根據(jù)TPC-H標(biāo)準(zhǔn),利用dbgen 工具自動(dòng)生成數(shù)據(jù)庫,數(shù)據(jù)庫的大小為200M。實(shí)驗(yàn)使用機(jī)器的配置是PVI 2.0 GHzCPU,512 MB內(nèi)存,操作系統(tǒng)是Red Hat Linux 9,PostgreSQL的版本是7.4.2。數(shù)據(jù)庫的操作語句如圖6 所示。其中,插入操作是在customer 表中批量插入30 000 條記錄;刪除操作是將國家代碼在12 到15 之間的客戶記錄刪除;更新操作是將累積金額在5 500 到6 000 之間的記錄累積金額加50 000;查詢操作是查詢訂單總價(jià)在10 000 到10 050 之間訂單的訂單號(hào)、客戶名字及所在國家,涉及三個(gè)表的聯(lián)接操作。
圖6 測試用例
對(duì)于每一種操作分別測試在四種環(huán)境下的平均運(yùn)行時(shí)間,這四種環(huán)境分別是:
(1)關(guān)系中的數(shù)據(jù)未加密存儲(chǔ),并且未對(duì)關(guān)系中的字段建立索引;
(2)關(guān)系中的數(shù)據(jù)加密存儲(chǔ),但未對(duì)關(guān)系中的字段建立索引;
(3)關(guān)系中的數(shù)據(jù)未加密存儲(chǔ),但對(duì)關(guān)系中的字段建立索引;
(4)關(guān)系中的數(shù)據(jù)加密存儲(chǔ),并且對(duì)關(guān)系中的字段建立索引。
圖7 給出了數(shù)據(jù)庫操作在四種測試環(huán)境下的運(yùn)行時(shí)間比較。
從圖7 可知,在批量插入30 000 條記錄的時(shí)候,關(guān)系加密存儲(chǔ)和未加密存儲(chǔ)在無索引和有索引的情況下性能分別降低了2%和7%;在做刪除操作時(shí),關(guān)系加密存儲(chǔ)和未加密存儲(chǔ)在無索引和有索引的情況下性能分別降低了23%和32%;在做更新操作時(shí),關(guān)系加密存儲(chǔ)和未加密存儲(chǔ)在無索引和有索引的情況下性能分別降低了31%和36%;在做查詢操作時(shí),關(guān)系加密存儲(chǔ)和未加密存儲(chǔ)在無索引和有索引的情況下性能分別降低了26%和18%,為了保障敏感數(shù)據(jù)的安全,這樣的代價(jià)是可以接受的。
在有索引的情形下刪除與查詢的速度比無索引的情形下快了許多。這是因?yàn)榭梢岳盟饕齺矶ㄎ挥涗浰诘膲K,大大減少了I/O 次數(shù)。從圖中可以看出,即使在關(guān)系加密存儲(chǔ)(索引亦加密存儲(chǔ))的情況下,使用索引也比關(guān)系明文存儲(chǔ)但沒有使用索引的情形也快了8 倍多。這充分說明采用的方案不會(huì)影響DBMS 索引建立功能所帶來的好處。由于傳統(tǒng)的數(shù)據(jù)加密方式會(huì)影響到索引的建立,如果沒有索引,這些加密方式性能最好的情形也只能是與關(guān)系未加密且不使用索引的情形相同。
圖7 數(shù)據(jù)庫加密的性能測試
6 總結(jié)
加密技術(shù)是外包數(shù)據(jù)庫安全中的一種重要機(jī)制,提出了基于DBMS 內(nèi)核加密的一種方法,通過安全字典和SQL 的擴(kuò)展,實(shí)現(xiàn)了數(shù)據(jù)的加密存儲(chǔ)和有效查詢,并在開源的postgresql中對(duì)查詢性能進(jìn)行了測試,驗(yàn)證該方法的有效性和可行性。以后將針對(duì)數(shù)據(jù)加密粒度、多表連接、多條件查詢進(jìn)行進(jìn)一步的研究。
核心關(guān)注:拓步ERP系統(tǒng)平臺(tái)是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊(yùn)涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴品牌。
轉(zhuǎn)載請(qǐng)注明出處:拓步ERP資訊網(wǎng)http://www.ezxoed.cn/
本文標(biāo)題:外包數(shù)據(jù)庫中數(shù)據(jù)加密的設(shè)計(jì)和實(shí)現(xiàn)
本文網(wǎng)址:http://www.ezxoed.cn/html/solutions/1401938875.html