對(duì)存儲(chǔ)在計(jì)算機(jī)系統(tǒng)外部存儲(chǔ)器里的數(shù)據(jù)進(jìn)行保護(hù)的手段是多種多樣的,而數(shù)據(jù)加密方法是最基本的技術(shù)之一,特別是對(duì)于竊取或篡改數(shù)據(jù)之類的犯罪和破壞活動(dòng)來(lái)說(shuō),更是一種有效的保護(hù)措施。因?yàn)樗箶?shù)據(jù)以密文形式存于數(shù)據(jù)庫(kù),用戶自己掌握相應(yīng)的密鑰,使非法侵入者即使能得到數(shù)據(jù)庫(kù)的數(shù)據(jù),也不能得到其明文形式。
數(shù)據(jù)庫(kù)加密的密鑰由于數(shù)據(jù)的長(zhǎng)期存在而無(wú)法做到隨用隨清。因此,密鑰管理在數(shù)據(jù)庫(kù)加密系統(tǒng)中處于舉足輕重的地位,因?yàn)槊荑管理不好,即使加密算法強(qiáng)度再高,一旦密鑰泄露或被竊取,數(shù)據(jù)還是沒(méi)有安全性可言,加密也就形同虛設(shè)。
然而密鑰的分配和管理問(wèn)題也是一個(gè)難題。作為一門(mén)綜合性技術(shù),它涉及到密鑰的產(chǎn)生、檢驗(yàn)、分配、傳遞、保管、使用及銷(xiāo)毀的總過(guò)程。本文就從密鑰管理最重要的幾個(gè)方面入手,討論密文數(shù)據(jù)庫(kù)的密鑰管理。
密文數(shù)據(jù)庫(kù)的密鑰分類
數(shù)據(jù)庫(kù)加密系統(tǒng)的密鑰大致可以分成兩類,一類是用戶密鑰,另一類是數(shù)據(jù)密鑰。
用戶密鑰主要是用戶對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行查詢、修改等操作時(shí)需要。用戶向數(shù)據(jù)庫(kù)管理系統(tǒng)提供自己的密鑰等信息,經(jīng)過(guò)系統(tǒng)驗(yàn)證確認(rèn)用戶的合法性和權(quán)限后用戶就可以進(jìn)行相關(guān)的操作了。
數(shù)據(jù)庫(kù)用戶由于權(quán)限不同還分為兩類。一類是數(shù)據(jù)庫(kù)管理員,其權(quán)限最大,既可以對(duì)明文數(shù)據(jù)進(jìn)行處理又可以對(duì)密文數(shù)據(jù)進(jìn)行處理(可處理的是非敏感數(shù)據(jù),對(duì)于敏感數(shù)據(jù)可以采用多人共同操作的方式);另一類是普通用戶,只可以對(duì)明文數(shù)據(jù)進(jìn)行處理。普通用戶中包含了不同權(quán)限的用戶,這可以通過(guò)建立用戶權(quán)限類來(lái)實(shí)現(xiàn),即相同權(quán)限的用戶可以歸入一個(gè)類中,比如可采用用戶角色的方法,不同的用戶屬于不同的角色。
數(shù)據(jù)密鑰分為兩類,分別是主密鑰和工作密鑰。
主密鑰是用來(lái)對(duì)數(shù)據(jù)密鑰加/脫密使用的密鑰,對(duì)其它密鑰實(shí)施加密保護(hù),其自身可定期更換。
對(duì)數(shù)據(jù)庫(kù)加密可在表、記錄、數(shù)據(jù)項(xiàng)三個(gè)層次上進(jìn)行,F(xiàn)在用得最多的是在數(shù)據(jù)項(xiàng)這個(gè)級(jí)別上進(jìn)行加密,本文討論的也是在數(shù)據(jù)項(xiàng)一級(jí)的加密密鑰的管理。相應(yīng)的,工作密鑰有表密鑰(對(duì)應(yīng)于每張表)和數(shù)據(jù)項(xiàng)密鑰(對(duì)應(yīng)于表里的每條數(shù)據(jù))兩種,表密鑰是用來(lái)生成數(shù)據(jù)項(xiàng)密鑰的密鑰加密密鑰,屬于二級(jí)密鑰,它在表創(chuàng)建時(shí)隨機(jī)生成。數(shù)據(jù)項(xiàng)密鑰是對(duì)數(shù)據(jù)庫(kù)的每項(xiàng)數(shù)據(jù)進(jìn)行加密的密鑰,每個(gè)數(shù)據(jù)項(xiàng)對(duì)應(yīng)的數(shù)據(jù)項(xiàng)密鑰都不一樣。
密鑰的生成
·用戶密鑰、主密鑰的生成
用戶密鑰、主密鑰的生成基于混沌理論;煦缡亲匀唤缰衅毡榇嬖诘倪\(yùn)動(dòng)狀態(tài),它是無(wú)周期、無(wú)序、非線性變化、有漲落起伏的,混沌具有非線性、蝴蝶效應(yīng)、分維性以及長(zhǎng)期預(yù)測(cè)的不可能性等特征。由混沌獲得的隨機(jī)序列是以確定的數(shù)學(xué)形式得到理論上不可預(yù)測(cè)的混亂結(jié)果,使得對(duì)系統(tǒng)的綜合和描述分析幾乎不可能,因而,它是一個(gè)優(yōu)良的密鑰源。詳細(xì)的密鑰生成過(guò)程見(jiàn)文獻(xiàn)[2]。
·基于數(shù)據(jù)項(xiàng)加密的數(shù)據(jù)密鑰的生成
考慮一個(gè)有N條記錄,M個(gè)屬性的數(shù)據(jù)庫(kù)。Xij表示第i條(i≤N)記錄上的第j個(gè)(j≤M)屬性的數(shù)據(jù)項(xiàng)。對(duì)應(yīng)每個(gè)項(xiàng)Xij有不同的加密密鑰Kij。加密算法E是任意一種分組對(duì)稱加密算法(如3DES),D為E對(duì)應(yīng)的解密算法。則密文Cij=E(Kij,Xij)。由于加密密鑰過(guò)多,出于安全和效率上的考慮,顯然不能全部存儲(chǔ)在介質(zhì)上的,只能在需要的時(shí)候動(dòng)態(tài)生成。同時(shí),數(shù)據(jù)庫(kù)中的數(shù)據(jù)需長(zhǎng)期存放,要保證加密解密的一致性,對(duì)數(shù)據(jù)項(xiàng)解密時(shí)所用的密鑰應(yīng)和加密時(shí)所用的密鑰完全一樣,即前后產(chǎn)生的密鑰要相同。因此,密鑰不可能隨機(jī)產(chǎn)生,而只能通過(guò)某種固定的函數(shù)關(guān)系生成。該函數(shù)只與數(shù)據(jù)項(xiàng)的位置有關(guān),而與數(shù)據(jù)項(xiàng)的值無(wú)關(guān)。
通常,與數(shù)據(jù)項(xiàng)位置相關(guān)的幾個(gè)量有:它所在表,所在的記錄和屬性。設(shè)每個(gè)表有一個(gè)表密鑰TK,每個(gè)記錄有一個(gè)不需加密的行標(biāo)志Ri(1≤i≤N),每一屬性也有一標(biāo)志Cj (1≤j≤M),那么數(shù)據(jù)項(xiàng)Xij的密鑰Kij可如下產(chǎn)生:
Kij=f(TK,Ri,Cj)
這里,f是數(shù)據(jù)項(xiàng)密鑰生成函數(shù),其中一般包含分組加密算法。該分組加密算法可以與數(shù)據(jù)項(xiàng)加密所用的塊加密算法一致,也可以不一致。這里假設(shè)是一致的,都是E。其中Ri和Cj可以是記錄或?qū)傩缘囊恍┕逃行再|(zhì),如存儲(chǔ)地址的物理地址或?qū)傩悦鹊。由于Ri和Cj是以明文的形式存在,這樣表密鑰TK就需要保密,對(duì)TK的最有效保密方法是用密鑰加密密鑰對(duì)它進(jìn)行加密。本文中就采用了主密鑰來(lái)對(duì)其進(jìn)行加/脫密處理。
密鑰生成函數(shù)f應(yīng)該滿足以下3個(gè)安全條件:
(1)不同數(shù)據(jù)項(xiàng)的密鑰相同的概率很小。
(2)即使已知數(shù)據(jù)項(xiàng)Xij的一些信息(如取值范圍、概率分布),也不可能由密文Cij獲得Xij的其它信息。
(3)由某一個(gè)數(shù)據(jù)項(xiàng)密鑰難于求得其它數(shù)據(jù)項(xiàng)密鑰。
另一方面,數(shù)據(jù)項(xiàng)密鑰產(chǎn)生的速度應(yīng)盡可能地快,這也是衡量生成函數(shù)好壞的一項(xiàng)重要標(biāo)準(zhǔn)。影響數(shù)據(jù)項(xiàng)密鑰生成速度的最主要因素是執(zhí)行分組加密算法E的次數(shù),這是因?yàn)橐粋(gè)高強(qiáng)度的塊加密算法E,執(zhí)行它所需的時(shí)間是比較長(zhǎng)的。所以,一個(gè)密鑰生成函數(shù)產(chǎn)生數(shù)據(jù)項(xiàng)密鑰時(shí)所需執(zhí)行E的次數(shù)越少,密鑰生成的速度就越快,所生成函數(shù)效率也就越高。因此,衡量一個(gè)數(shù)據(jù)項(xiàng)密鑰生成函數(shù)效率的高低,最主要的就是看它執(zhí)行塊加密算法E的次數(shù)。
這里給出一種數(shù)據(jù)項(xiàng)密鑰生成函數(shù)(加密算法是滿足上面條件的塊加密算法E):
Kij=K1i K2j
其中,K1i=E(TK,Ri),K2j=E(TK,Cj),
以下證明該算法是滿足上面3個(gè)安全條件的:
對(duì)于條件(1),對(duì)同一記錄i中的不同數(shù)據(jù)項(xiàng)Xip和Xiq,一般Cp≠Cq,從而K2p≠K2q,K1i K2p≠K1i K2q,所以Kip≠Kiq,同理,對(duì)于同一屬性列的不同數(shù)據(jù)項(xiàng)Xpi和Xqi,Kpi≠Kqi 。對(duì)于任意兩個(gè)數(shù)據(jù)項(xiàng)Xij、Xpq(i≠p,j≠q),若要使Kij=Kpq,即:
E(TK,Ri) E(TK,Cj)= E(TK,Rp)
E(TK,Cq)
(其中Ri≠Rp,Cj≠Cq)
可知,要找到使上式成立的Kij和Kpq還是非常困難的。由此可知,函數(shù)是滿足條件(1)的。
由E的性質(zhì)可知方程是滿足條件(2)的。
當(dāng)某個(gè)密鑰Kij泄漏時(shí),由于K1i和K2j的不可知性,攻擊者不可能求得另外的密鑰Kpq和TK,所以也是滿足條件(3)的。
綜上所述,此函數(shù)是滿足所有的安全條件的。
密鑰的存儲(chǔ)與管理
密鑰如何安全地存放是一個(gè)很重要的問(wèn)題。為了保證密鑰的安全性又方便合法用戶使用,對(duì)不同的密鑰采用不同的存放方式。而數(shù)據(jù)項(xiàng)密鑰是動(dòng)態(tài)生成的,不存在存放的問(wèn)題。
·主密鑰的存儲(chǔ)
主密鑰是用來(lái)加密數(shù)據(jù)密鑰的密鑰,因此,主密鑰的安全性對(duì)整個(gè)數(shù)據(jù)庫(kù)系統(tǒng)而言具有至關(guān)重要的作用。因?yàn)樗坏┬孤痘虮桓`取,所有的加密數(shù)據(jù)都會(huì)泄露。
本文中的主密鑰是存儲(chǔ)在密碼裝置中。在密碼裝置內(nèi)部至少包含一種密碼算法和供少量密鑰、參數(shù)用的存儲(chǔ)器,并只能經(jīng)由不受侵犯的接口進(jìn)行數(shù)據(jù)交換。在密碼裝置中,密鑰是以明文的形式存在,當(dāng)試圖打開(kāi)密碼裝置竊取密鑰時(shí),整個(gè)裝置將自動(dòng)銷(xiāo)毀,里面的內(nèi)容也不復(fù)存在。由此可起到對(duì)主密鑰的保護(hù)作用。
為了保證主密鑰的安全性,主密鑰應(yīng)該定期更換,但由于主密鑰的產(chǎn)生,注入密碼裝置和正確性驗(yàn)證等均非常的嚴(yán)格,因此為了減少錯(cuò)誤和節(jié)省時(shí)間,可采用注入一個(gè)主密鑰MK,然后用某種方法得到它的一些變形MK1,MK2,…等來(lái)作為每次使用的主密鑰。用這些生成密鑰來(lái)代替主密鑰的方法可以保證主密鑰的安全性,還可實(shí)現(xiàn)密鑰的分隔保護(hù),也有利于密碼裝置的優(yōu)化設(shè)計(jì)。
·表密鑰存儲(chǔ)
密文數(shù)據(jù)庫(kù)管理系統(tǒng)中的每個(gè)數(shù)據(jù)庫(kù)都有一個(gè)表密鑰,它是一種數(shù)據(jù)較大且需長(zhǎng)期保存的密鑰。由于密碼裝置不可能存放這么大量的密鑰,因此表密鑰的保護(hù)方式只能是以密文的方式存放在數(shù)據(jù)字典中,用主密鑰來(lái)對(duì)其進(jìn)行加/脫密。一般來(lái)說(shuō),表密鑰是不進(jìn)行修改操作的,因?yàn)橐薷谋砻荑,就需要對(duì)整個(gè)數(shù)據(jù)庫(kù)進(jìn)行脫密后再加密,開(kāi)銷(xiāo)相當(dāng)大。只有當(dāng)主密鑰更換時(shí),表密鑰的密文形式根據(jù)主密鑰生成的MKi才進(jìn)行相應(yīng)的更改。
·用戶密鑰存儲(chǔ)
用戶密鑰是由用戶自己保管的。由于用戶密鑰較長(zhǎng)而且沒(méi)有什么規(guī)律,可以采取將密鑰存入智能卡的方法。為防止他人盜取用戶的智能卡來(lái)非法訪問(wèn)數(shù)據(jù)庫(kù),還可以為每個(gè)用戶設(shè)定單獨(dú)的口令。訪問(wèn)數(shù)據(jù)庫(kù)時(shí),用戶需要提供智能卡和自己的口令,由系統(tǒng)進(jìn)行鑒別,通過(guò)認(rèn)證就可以使用數(shù)據(jù)庫(kù)了。
參考文獻(xiàn)
[1] 余祥宣,倪曉俊. 加密數(shù)據(jù)庫(kù)系統(tǒng)中的密鑰管理 [j] 華中理工大學(xué)學(xué)報(bào) 1995.7
[2] 宋雨,趙文清. 密鑰管理在管理信息系統(tǒng)中的應(yīng)用研究 [j] 計(jì)算機(jī)工程與應(yīng)用 1999.10
[3] 孫淑玲. 應(yīng)用密碼學(xué)清華大學(xué)出版社
來(lái)源:ZDNet