[摘要] 本文設計了一種更安全、有效的數據庫加密方法。該方法采用二級密鑰體制,即用工作密鑰將數據用對稱加密算法進行加密,然后使用非對稱加密算法用主密鑰進行加密,最后在數據庫中存儲的是工作密鑰的密文數據。
[關鍵詞] 二級密鑰 密文數據庫 密鑰管理
一、引言
目前,以計算機和網絡為基礎的各種管理信息系統(MIS)已成為當今社會運行的基礎。數據庫是MIS的核心,是一種可共享的資源。在數據庫系統中大量集中存放的某些數據很可能是國家或單位的機密數據或重要數據,這些數據一旦被泄密或遭到破壞,將給國家或單位造成巨大損失。據有關資料報道,80%的計算機犯罪來自系統內部。因此,數據庫的安全與保密成為MIS安全的一個關鍵。
二、數據庫加密的特點
數據加密就是將數據和信息(稱為明文)經過一定的變換(一般為變序和代替)轉換為不可辨識的數據形式(稱為密文)的過程,使不應了解該數據和信息的人不能夠知道和識別。預知密文的內容,使用加密的逆過程再將其轉變為明文,即將密文數據轉變成可見的明文數據,即為解密過程。加密盒解密過程構成密碼系統,明文與密文統稱報文。任何密碼系統無論形式多么復雜,至少包括明文集合、密文集合、密鑰集合和算法,其中密鑰和算法構成了密碼系統的基本單元。算法是一些公式、法則或程序,規定明文與密文之間的變換方法,密鑰可看作算法中的參數。數據庫密碼系統要求將明文數據加密成密文數據后存儲,查詢時將密文數據取出解密得到明文信息。
較之傳統的數據加密技術,數據庫密碼系統尤其自身的要求和特點。數據庫加密分為基于數據庫、表、記錄、字段,對于加密與普通不加密情況下的性能,通過不同的加密級別的單機平臺試驗,比較出字段級數據庫加密的效果比記錄級、數據表級和數據庫級要好,而且對于數據的加密算法最好是對稱加密算法,因為對稱加密算法加/解密速度快,適合于對大量的數據加密。
另外,在網絡通訊系統中,每次通訊的會話密鑰是動態產生的。會話一旦結束,本次會話密鑰也就失去作用,可以被清除掉。而數據庫中數據是長期存放的,數據的加密密鑰不可能隨用隨清,密鑰的某些信息必須存放在機器中。如此一來,總有一些特權用戶有機會存取密鑰,這對加密系統的安全是十分不利的,解決這一問題的方法之一是研制多級密鑰管理體制。如何產生和保護這些密鑰,做到在從產生到消亡這段時間內確保不會被泄漏,這就對密鑰的管理提出了更嚴格的要求。
三、二級密鑰體制
所謂二級密鑰體制就是一級密鑰為主密鑰,使用公鑰算法如RSA;二級密鑰為工作密鑰,使用私鑰算法如DES。工作密鑰用于對數據庫數據進行加。脫密,主密鑰的作用是對工作密鑰進行加密。這樣就既利用了私鑰算法的快速性又保持了工作密鑰的安全性。二級密鑰工作的流程圖如圖1所示。
1.數據庫加密中的二級密鑰體制
當決定對表中的某個字段中的數據進行加密之后,面臨的一個問題是如何對該字段中的數據加密?這是一個非常嚴重的問題。在本研究中,我們控制系統為該字段隨機產生一個對稱密鑰(我們稱對稱加密算法忠要用到的密鑰為對稱密鑰)。數據庫表中該字段內的所有數據,都用這個對稱密鑰進行加密存儲,這就是工作密鑰。對于工作密鑰一種最簡單的處理方式是讓這些用戶直接保存和管理數據密鑰,但是用戶自己保存這些密鑰仍然存在著很多問題,如對某個用戶來說,可能擁有訪問權利的不僅僅是一個加密字段中的數據,用戶很可能同時使多個加密字段的授權用戶。而對于不同的加密字段,所對應的數據加密時不同的。(因為,如果對于不同加密字段,都是用相同的一個數據密鑰的話,就很容易造成數據泄密。)這樣,用戶就需要同時管理對應于多個加密字段的多個數據密鑰,用戶的負擔顯然過于沉重,另外對于數據庫的超級用戶管理員來說如果這些工作密鑰是明文存儲就沒有什么意義了。因此對于這個問題,我們考慮用二級密鑰的加密體制。
2.密文數據庫的加密過程
我們用非對稱密鑰算法對工作密鑰進行加密,將加密后的密文工作密鑰存儲在數據庫中。我們用a代表加密字段中的所有數據,k代表用來對該字段加密的數據密鑰,k是由系統隨機產生的,被用在對稱加密算法中。KU1,KU2,……,KUun是加密字段的授權用戶User1,User2,……,Usern各自的公鑰。
如圖3,對a的加密過程和對數據密鑰k的保護過程,可做描述如下:
(1)k作為對數據加密的對稱密鑰,使用非對稱加密算法E1對a加密,得到a的密文形式E1(a,k)。把E1(a,k)存入數據庫中,代替原來的明文數據。
(2)k被非對稱加密算法E2加密,密鑰就是用戶i的公鑰。當然這里用數據庫用戶i的公鑰對k進行加密有一個前提,就是,數據庫用戶i必須是該加密字段的授權用戶。令不同的數據庫用戶對應有不同的公鑰(當然也有不同的私鑰),則這里就有k的n個加密拷貝,例如對于數據庫用戶User1,有E2(k, KU1),對于數據庫用戶User2,有E2(k, KU2)。
(3)把這n個k的加密拷貝也存入數據庫。所以在存儲E1(a, k)之外,還需要額外地在數據庫系統中占有n個存儲空間。但這n個存儲空間實際上可以理解為在取得方便性的時候必須付出的代價——用戶不再自身管理數據密鑰,付出這樣的代價是值得的。
另外,一旦數據庫中已經存有加密字段授予某用戶的數據密鑰的加密拷貝的話,用戶存入數據的流程就有了一點改變。KR1,KR2,……,KRn,在前面已經提到過,是數據庫用戶1,數據庫用戶2,……,數據庫用戶n的私鑰。這樣,對a的加密過程和對數據密鑰k的保護過程改變為:
(1)數據庫用戶i從加密數據庫中取出自己對于加密字段的數據密鑰E2(k,KUi),然后用自己的私鑰KRi作為解密密鑰(假設數據庫用戶是加密字段數據a的授權用戶),調用不對稱解密算法D2,對E2(k,KUi)進行解密,可以取回該加密字段的數據密鑰k,加密算法E2與解密算法D2是配對的一套算法,例如,利用RSA算法分別執行加密和解密。
(2)k作為對數據加密的對稱密鑰,使用對稱加密算法E1對a加密,得到a的密文形式E1(a, k)。把E1(a, k)存入數據庫中,代替原來的明文數據a。
3.密文數據庫的解密過程
如圖4,利用解密算法D1,D2,從E1(a, k)得回a的整個過程可以描述如下:
(1)數據庫用戶i從加密數據庫中取出自己針對加密字段的數據密鑰拷貝E2(k, KUi),用自己的私鑰作為解密密鑰,實際上,用戶的私鑰如何存儲及取出,在后面的“用數據庫用戶口令對私鑰進行加密保護”中有描述。調用不對稱加密算法D2,對E2(k, KUi)解密,可以取回該加密字段的數據密鑰k。
(2)從加密數據庫中取出E1(a, k),然后用k作為解密密鑰,調用對稱加密算法對E1(a, k)解密,就可以得回明文數據a。
四、結論
本文使用的數據庫是SQL Server 2000,用到了Java的加密擴展包即Java Cryptography Extension,簡稱JCE,它是Sun的加密服務軟件,包含了加密和密鑰生成功能,使用到了非對稱加密算法,解決了工作密鑰的存儲問題。
參考文獻:
[1]王洪杰:應用數據加密技術對數據庫數據加密的探討[J].天津職業技術師范學院學報,2003,13(3):34~36
[2]左黎明等:基于JCE的網絡數據庫敏感信息加密技術與實現[J].華東交通大學學報,2004,21(4):142~145
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。