郭 娟 梁時(shí)英
(石家莊職業(yè)技術(shù)學(xué)院現(xiàn)代教育技術(shù)中心,河北 石家莊 050081)
基于三維零件資源庫的數(shù)據(jù)庫加密技術(shù)
郭 娟 梁時(shí)英
(石家莊職業(yè)技術(shù)學(xué)院現(xiàn)代教育技術(shù)中心,河北 石家莊 050081)
針對(duì)基于B/S模式的三維零件資源庫系統(tǒng)所面臨的數(shù)據(jù)安全存儲(chǔ)問題,設(shè)計(jì)了一款基于DBMS外層加密的數(shù)據(jù)庫加密引擎。在加密粒度上采用了字段加密的手段,同時(shí)對(duì)稱加密算法的加密模式引入了隨機(jī)元的CBC模式,解決了相同原文密文相同的隱患。在密鑰保護(hù)上采用了PKI技術(shù),將對(duì)稱加密與非對(duì)稱加密進(jìn)行了有機(jī)的結(jié)合,解決了密鑰安全管理的問題。應(yīng)用實(shí)踐表明,該系統(tǒng)能夠?qū)θS零件資源庫中的數(shù)據(jù)進(jìn)行有效的保護(hù)。
數(shù)據(jù)庫加密 B/S結(jié)構(gòu) 加密/解密 公開密鑰基礎(chǔ)設(shè)施(PKI) 密鑰管理 AES
隨著企業(yè)信息化的迅猛發(fā)展,越來越多的業(yè)務(wù)系統(tǒng)被放到互聯(lián)網(wǎng)上使用,在提升效率的同時(shí),也造成了很多的安全隱患。目前對(duì)信息系統(tǒng)采用的安全手段往往是一些網(wǎng)絡(luò)隔離、認(rèn)證、鑒權(quán)的手段,所以對(duì)于一個(gè)安全的數(shù)據(jù)庫來說以上措施都是非常必要的,但是真正要面對(duì)那些經(jīng)驗(yàn)豐富的外部攻擊者或者內(nèi)部管理員等,數(shù)據(jù)庫加密便成為了最后一道防線。因此,如何才能保證和加強(qiáng)數(shù)據(jù)庫的安全性和保密性,是三維零件資源系統(tǒng)亟需解決的關(guān)鍵問題。
不同于文件系統(tǒng),數(shù)據(jù)庫系統(tǒng)尤其是結(jié)構(gòu)化數(shù)據(jù)庫系統(tǒng),是數(shù)據(jù)多關(guān)聯(lián)、低冗余、高并發(fā)的系統(tǒng)。對(duì)數(shù)據(jù)庫數(shù)據(jù)進(jìn)行加密,在保證數(shù)據(jù)安全的基礎(chǔ)上,數(shù)據(jù)庫數(shù)據(jù)的關(guān)聯(lián)性不能丟失,冗余度不能變高,并發(fā)數(shù)不能降低。因此,對(duì)數(shù)據(jù)庫進(jìn)行加密時(shí),需要考慮以下幾個(gè)問題[1]。
1.1 數(shù)據(jù)庫加密層次的選擇
數(shù)據(jù)庫加密有三種層次,分別是操作系統(tǒng)層、數(shù)據(jù)庫管理系統(tǒng)(database management system,DBMS)內(nèi)核層和DBMS外層[2-4]。這三種不同的層次在實(shí)現(xiàn)復(fù)雜性、效率、靈活性等方面有所不同,具體說明如下。
① 在操作系統(tǒng)層面加密
很多操作系統(tǒng)可以在文件系統(tǒng)上進(jìn)行加密,如文件過濾驅(qū)動(dòng)等手段。當(dāng)向文件中寫入數(shù)據(jù)時(shí),在驅(qū)動(dòng)層將數(shù)據(jù)進(jìn)行加密再寫入;當(dāng)從文件中讀取數(shù)據(jù)時(shí),在驅(qū)動(dòng)層將數(shù)據(jù)進(jìn)行解密再讀出。因?yàn)榧咏饷懿僮魇窃隍?qū)動(dòng)層完成,數(shù)據(jù)加解密的效率比較高,同時(shí)對(duì)數(shù)據(jù)庫的檢索、排序等功能完全沒有影響。不足之處是,對(duì)數(shù)據(jù)庫文件整體進(jìn)行驅(qū)動(dòng)層的加密,只能采用一個(gè)密鑰,而數(shù)據(jù)庫中數(shù)據(jù)項(xiàng)、記錄等屬于不同的用戶,也只能采用同一個(gè)密鑰進(jìn)行加密。因此,在操作系統(tǒng)層進(jìn)行加密,一旦加密采用的唯一主密鑰出現(xiàn)問題,將帶來所有用戶的泄密問題。此外,在操作系統(tǒng)層面進(jìn)行加密,密鑰的管理往往由操作系統(tǒng)進(jìn)行管理,其對(duì)操作系統(tǒng)的密鑰管理手段的依賴性比較強(qiáng)。
② DBMS內(nèi)核層加密
這種方式與操作系統(tǒng)層面加密比較類似。其對(duì)數(shù)據(jù)也是進(jìn)行透明的加解密,在保證數(shù)據(jù)以較高效率的同時(shí),對(duì)數(shù)據(jù)庫的檢索、排序等功能沒有任何影響。較操作系統(tǒng)層面的加密,DBMS內(nèi)核層加密的改進(jìn)之處在于密鑰的管理不再依賴于操作系統(tǒng),而是由DBMS內(nèi)核完成。但是其使用的主密鑰仍然是單一的,密鑰管理不夠靈活,沒有從本質(zhì)上解決操作系統(tǒng)層面加密所面臨的安全問題。另外,這種加密方式需要很多數(shù)據(jù)庫系統(tǒng)的內(nèi)部接口,往往只能夠由數(shù)據(jù)庫廠商來提供,第三方很難完成。
③ DBMS外層加密
這種方式是將加密引擎放置在DBMS的外層,對(duì)數(shù)據(jù)庫輸入、輸出的數(shù)據(jù)進(jìn)行過濾,根據(jù)需要對(duì)輸入的部分?jǐn)?shù)據(jù)進(jìn)行加密,對(duì)輸出的部分?jǐn)?shù)據(jù)進(jìn)行解密。這種方式的加密操作是針對(duì)數(shù)據(jù)庫內(nèi)部的數(shù)據(jù)完成,可以結(jié)合公開密鑰基礎(chǔ)設(shè)施(public key infrastructure,PKI)技術(shù),實(shí)現(xiàn)更加靈活的密鑰管理策略,從而有效提升數(shù)據(jù)的安全性。同時(shí),相對(duì)于前兩種技術(shù)這種方式也更具通用性。DBMS外層加密模式的不足之處在于數(shù)據(jù)庫功能上會(huì)受一些限制,如對(duì)加密數(shù)據(jù)的檢索。因此,采用這種方式,設(shè)計(jì)一款對(duì)數(shù)據(jù)庫功能影響最小的加密引擎是很關(guān)鍵的。
綜上所述,在DBMS外層加密是可行的。本文討論的是該方案實(shí)現(xiàn)的技術(shù)。
1.2 加密粒度的選擇
數(shù)據(jù)庫加密的粒度一般分為文件級(jí)、記錄級(jí)、字段級(jí)和數(shù)據(jù)項(xiàng)級(jí)[6]。操作系統(tǒng)層面加密與DBMS內(nèi)核加密采用的是文件級(jí)的加密方式,而DBMS則需要考慮更細(xì)的數(shù)據(jù)庫加密粒度,如記錄級(jí)、字段級(jí)和數(shù)據(jù)項(xiàng)級(jí)。這三種方式比較如下。
① 記錄級(jí)加密:是將數(shù)據(jù)表中的整條記錄作為加密對(duì)象,其實(shí)現(xiàn)相對(duì)簡單。但是這種方式對(duì)數(shù)據(jù)庫的功能影響較大。如記錄中的關(guān)聯(lián)字段被加密,在沒有逐條解密的情況下,將無法完成數(shù)據(jù)庫的有效檢索,而每次檢索時(shí)對(duì)數(shù)據(jù)進(jìn)行逐條解密,又會(huì)極大地影響效率。記錄級(jí)加密無法同時(shí)兼顧效率與安全。
② 字段級(jí)加密:是以數(shù)據(jù)表中的字段為加密對(duì)象,其靈活度較記錄級(jí)更高,效率也高,同時(shí)系統(tǒng)性能影響相對(duì)也很小。不過字段級(jí)加密必須選擇好的加密算法,避免同一值的加密結(jié)果是相同的,從而造成統(tǒng)計(jì)上的缺陷,形成字典攻擊。
③ 數(shù)據(jù)項(xiàng)加密:就是以記錄中的每個(gè)數(shù)據(jù)項(xiàng)作為加密對(duì)象。但是這種方式對(duì)于密鑰的要求是龐大的,效率也比較低。
綜上考慮,為了獲取更高的效率以及安全性,本系統(tǒng)采用字段級(jí)加密。加密算法采用高級(jí)加密標(biāo)準(zhǔn) (advanced encryption standard,AES),加密模式上采用了密碼分組鏈接(cipher block chaining,CBC)模式,每次加密時(shí)均加入初始化向量(initial vector,IV)。這樣就可以消除密文的統(tǒng)計(jì)學(xué)隱患[5]。
1.3 密碼算法及密鑰管理
現(xiàn)代密碼學(xué)常用的密碼算法有兩大類,分別是對(duì)稱加密算法與非對(duì)稱加密算法[7]。
① 對(duì)稱加密算法:加解密采用同一個(gè)密鑰,具有加密速度快、密文長度不擴(kuò)張的優(yōu)點(diǎn)。但是加解密雙方缺乏有效的密鑰交換手段。
② 非對(duì)稱加密算法:采用一對(duì)密鑰,其中一個(gè)密鑰公開,另一個(gè)密鑰保密,并且無法由公開的密鑰推導(dǎo)出私密的密鑰。這種算法可以安全地傳遞密鑰,并且可以通過PKI體系對(duì)密鑰進(jìn)行有效的管理。但是非對(duì)稱加密算法對(duì)數(shù)據(jù)加密的速度很慢,并且會(huì)造成密文長度的大幅度增加。
通常會(huì)將這兩種算法結(jié)合在一起使用,采用一種稱作“數(shù)字信封”的技術(shù),在對(duì)數(shù)據(jù)進(jìn)行加密時(shí)采用對(duì)稱算法,而對(duì)稱密鑰的保護(hù)則需要通過非對(duì)稱算法來完成。這種技術(shù)既可以保證加密的效率,又可以對(duì)密鑰進(jìn)行安全的管理。
三維零件資源系統(tǒng)基于B/S模式,采用三層架構(gòu),即表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)服務(wù)層。
表示層是用戶與系統(tǒng)進(jìn)行交互的接口,用于將系統(tǒng)的功能界面呈現(xiàn)給用戶以及從用戶端收集輸入信息、反饋系統(tǒng)處理結(jié)果,并可以將合法用戶想要查詢的結(jié)果進(jìn)行展示。
業(yè)務(wù)邏輯層集中處理系統(tǒng)中所有業(yè)務(wù)功能,根據(jù)合法用戶使用的不同功能以及提交的參數(shù),調(diào)用系統(tǒng)中的相應(yīng)功能模塊,以完成用戶所請(qǐng)求的業(yè)務(wù)流程。整個(gè)系統(tǒng)的加密/解密主要在該層實(shí)現(xiàn)。
數(shù)據(jù)服務(wù)層指的是數(shù)據(jù)庫服務(wù)器,其主要由一個(gè)數(shù)據(jù)庫管理系統(tǒng)來實(shí)現(xiàn),負(fù)責(zé)與業(yè)務(wù)邏輯層進(jìn)行交互。用戶信息、數(shù)據(jù)庫中的密文用戶信息、加密后的密鑰以及加密時(shí)用到的IV都存放在這一層。
加密系統(tǒng)處于應(yīng)用程序和ADO.NET 中間,即通常所稱的數(shù)據(jù)庫訪問中間件(database access middle ware,DAMW),它是基于ADO.NET平臺(tái)的面向?qū)ο蟮臄?shù)據(jù)組件。首先,用戶在客戶端通過瀏覽器向服務(wù)器發(fā)送請(qǐng)求,當(dāng)請(qǐng)求達(dá)到服務(wù)器端時(shí),加密系統(tǒng)就會(huì)截取對(duì)數(shù)據(jù)庫的訪問請(qǐng)求。如果是數(shù)據(jù),中間件便會(huì)將數(shù)據(jù)交給加密/解密模塊,經(jīng)過加密后提交給ADO.NET,最后,將數(shù)據(jù)以密文的形式存儲(chǔ)在數(shù)據(jù)庫中。如果是數(shù)據(jù)查詢,則由ADO.NET讀取后,將加密的數(shù)據(jù)經(jīng)解密后提交給客戶端。該數(shù)據(jù)庫加密系統(tǒng)可以選擇性地對(duì)數(shù)據(jù)進(jìn)行加解密操作。對(duì)于那些沒有加密請(qǐng)求的數(shù)據(jù),系統(tǒng)不會(huì)做加密處理,系統(tǒng)也會(huì)過濾掉那些請(qǐng)求,這就大大提高了效率。即使非法用戶闖入三維零件資源系統(tǒng),并且繞過數(shù)據(jù)庫安全系統(tǒng),通過 ADO.NET訪問被加密的保密數(shù)據(jù),但由于無法得到加密方法和密鑰而無法解密。系統(tǒng)結(jié)構(gòu)如圖1所示。

圖1 數(shù)據(jù)庫加密系統(tǒng)總體結(jié)構(gòu)
基于B/S模式的三維零件資源系統(tǒng),其所有的功能都在Web服務(wù)器上實(shí)現(xiàn)。系統(tǒng)用戶只需要在客戶端安裝瀏覽器就可以使用,除此之外不需要安裝任何客戶端軟件。數(shù)據(jù)加密在服務(wù)器與數(shù)據(jù)庫之間實(shí)現(xiàn),這樣可以簡單并且快速地執(zhí)行請(qǐng)求,加強(qiáng)了系統(tǒng)的通用性和擴(kuò)展性。結(jié)合一定的訪問控制機(jī)制,最終使系統(tǒng)的安全性得到了提升。
根據(jù)以上設(shè)計(jì),我們對(duì)三維零件資源系統(tǒng)進(jìn)行了加密實(shí)現(xiàn),系統(tǒng)采用基于B/S模式的三層結(jié)構(gòu)。以Visual Studio 2008 作為開發(fā)平臺(tái),實(shí)現(xiàn)ASP.NET程序的開發(fā),中間層加/解密以及數(shù)據(jù)庫連接用C#和ADO.NET進(jìn)行開發(fā),后臺(tái)數(shù)據(jù)庫采用的是SQL Server 2005。在PKI技術(shù)的選擇上,采用openssl進(jìn)行密鑰對(duì)的生成,同時(shí)加解密算法、密鑰生成也通過openssl實(shí)現(xiàn)。
本文所述數(shù)據(jù)庫加密系統(tǒng)主要分為用戶安全認(rèn)證、數(shù)據(jù)庫安全連接、密鑰生成及管理、數(shù)據(jù)庫加/解密引擎等模塊。
3.1 密鑰生成與管理模塊
密鑰生成與管理模塊主要負(fù)責(zé)生成和管理數(shù)據(jù)庫加密引擎中使用的密鑰,其中對(duì)稱加密算法與非對(duì)稱加密算法需要結(jié)合使用,具體如下。
① 系統(tǒng)每注冊(cè)一個(gè)用戶時(shí),該模塊調(diào)用openssl為該用戶生成一個(gè)非對(duì)稱的密鑰對(duì)。該密鑰對(duì)的私鑰K1存儲(chǔ)在USB Key中,從而進(jìn)行有效的保護(hù),而公鑰K2則以數(shù)字證書的一部分存儲(chǔ)在數(shù)據(jù)庫中。
② 當(dāng)系統(tǒng)需要對(duì)明文數(shù)據(jù)P進(jìn)行加密時(shí),由該模塊生成一個(gè)對(duì)稱密鑰K。
③ 使用對(duì)稱密鑰K,采用對(duì)稱加密算法AES,采用CBC模式對(duì)明文數(shù)據(jù)P進(jìn)行對(duì)稱加密操作,得到密文C。
④ 使用密鑰擁有者的公鑰K2,通過RSA算法,對(duì)對(duì)稱密鑰K進(jìn)行加密,得到加密的對(duì)稱密鑰CK,并將CK存儲(chǔ)在數(shù)據(jù)庫中。
⑤ 用戶解密數(shù)據(jù)時(shí),首先用自己的私鑰K1,通過RSA算法,對(duì)加密后的對(duì)稱密鑰CK進(jìn)行解密,得到明文對(duì)稱密鑰K。
⑥ 然后用K,采用AES算法,采用CBC模式解密密文C,得到明文P。
在上述過程中,數(shù)據(jù)的加/解密是由對(duì)稱密鑰C完成的,而C在整個(gè)工作過程中以密文的方式存儲(chǔ)在數(shù)據(jù)庫中,從而保證了數(shù)據(jù)的安全。
數(shù)據(jù)加/解密流程如圖2所示。

圖2 數(shù)據(jù)加解密流程
3.2 加/解密引擎
數(shù)據(jù)庫加/解密引擎主要由SQL語句分析模塊和數(shù)據(jù)加/解密模塊兩個(gè)模塊組成。SQL語句分析模塊是對(duì)用戶提交的SQL語句進(jìn)行分析,用戶請(qǐng)求是以SQL語句的形式向系統(tǒng)提交的。數(shù)據(jù)庫的加/解密模塊是整個(gè)加密系統(tǒng)的核心部件,數(shù)據(jù)庫信息的加密和解密處理都是在這一部分完成的。由于是在后臺(tái)完成,對(duì)用戶來說是透明的。
首先,由用戶接口程序根據(jù)用戶的請(qǐng)求來判斷接下來進(jìn)行什么操作。如果需要加密,則調(diào)用密碼算法及密鑰管理模塊對(duì)數(shù)據(jù)進(jìn)行加密,以密文的形式存放在數(shù)據(jù)庫中;同時(shí),調(diào)用RSA中的加密函數(shù)對(duì)密鑰作加密處理并進(jìn)行存儲(chǔ)。若需要解密,首先,從數(shù)據(jù)庫中取出加密的對(duì)稱密鑰并解密,并用該密鑰解密數(shù)據(jù)得到明文。具體流程如圖3所示。

圖3 數(shù)據(jù)庫加/解密引擎流程框圖
本文根據(jù)三維零件資源庫的需求,提出了基于DBMS外層的數(shù)據(jù)庫加密方案,并且建立了一套完整的加密機(jī)制。系統(tǒng)中的數(shù)據(jù)經(jīng)過加密處理以密文的形式存放在數(shù)據(jù)庫中。另外,本系統(tǒng)所采用的是對(duì)稱密鑰與非對(duì)稱密鑰相結(jié)合的加密方式。數(shù)據(jù)密鑰以密文的方式進(jìn)行存放,而私鑰則存放在USB Key中,有效地
解決了密鑰的安全管理問題。在對(duì)數(shù)據(jù)庫字段進(jìn)行加密時(shí),采用了CBC模式,避免了重復(fù)密文的出現(xiàn),有效地解決了字典攻擊等潛在隱患。因?yàn)閿?shù)據(jù)庫安全是三維零件資源庫系統(tǒng)運(yùn)行的前提,目前只是做了一些階段性的工作,還有很多細(xì)節(jié)需要進(jìn)一步研究。
[1] 劉勇.網(wǎng)絡(luò)數(shù)據(jù)庫加密技術(shù)研究與實(shí)現(xiàn)探析[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2014,20(4):44-45.
[2] 吳興惠,周玉萍,明秀君.基于混合密碼算法的數(shù)據(jù)庫加密技術(shù)研究[J].海南師范大學(xué)學(xué)報(bào):自然科學(xué)版,2010,23(2):161-164.
[3] 趙卓,劉博,厲京運(yùn).基于DBMS外層的數(shù)據(jù)庫加密系統(tǒng)研究與設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2008,29(12):3030-3033.
[4] 孟凱.數(shù)據(jù)庫加密系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].太原:太原理工大學(xué), 2012.
[5] 楊小東,王毅. AES密鑰擴(kuò)展新方法[J].微電子學(xué)與計(jì)算機(jī),2012,29(1):102-104.
[6] 王正飛.數(shù)據(jù)庫加密技術(shù)及其應(yīng)用研究[D].上海:復(fù)旦大學(xué),2005.
[7] 錢靚靚.淺析電子信息安全技術(shù)PKI[J].電子世界,2014,8(3):23-29.
Database Encryption Technology Based on Three Dimensional Parts Resource Library
Aiming at the security issue of data storage of which the three dimensional parts database resource system based on B/S mode is facing, the database encryption engine based on DBMS outer layer encryption has been designed. The field encryption means is adopted in encryption granularity; in addition, the symmetric encryption algorithm encryption mode introduces the random element CBC mode to solve the hidden trouble of the same plaintext with the same ciphertext. PKI technology is used in key protection; symmetric encryption and asymmetric encryption are combined organically, to solve the issue of key security management. The practical application shows that the system can effectively protect the data in three dimensional parts library data resource.
Database encryption B/S structure Encryption / decryption PKI Key management Advanced encryption standard (AES)
郭娟(1976-),女,2000年畢業(yè)于東華理工大學(xué)計(jì)算機(jī)應(yīng)用專業(yè),獲碩士學(xué)位,講師;主要從事計(jì)算機(jī)應(yīng)用的研究。
TP309
A
10.16086/j.cnki.issn1000-0380.201504013
修改稿收到日期:2014-10-09。