目前,計算機大批量數據存儲的安全問題、敏感數據的防竊取和防篡改問題越來越引起人們的重視。數據庫系統作為計算機信息系統的核心部件,數據庫文件作為信息的聚集體,其安全性將是信息產業的重中之重。
數據庫加密的必要性
大型數據庫管理系統的運行平台一般是Windows NT和 Unix,這些操作系統的安全級別通常為C1、C2級。它們具有用戶注冊、識別用戶、任意存取控制(DAC)、審計等安全功能。雖然DBMS在OS的基礎上增加了不少安全措施,例如基於權限的訪問控制等,但OS和DBMS對數據庫文件本身仍然缺乏有效的保護措施,有經驗的網上黑客會“繞道而行”,直接利用OS工具竊取或篡改數據庫文件內容。這種隱患被稱為通向DBMS的“隱秘通道”,它所帶來的危害一般數據庫用戶難以覺察。分析和堵塞“隱秘通道”被認為是B2級的安全技術措施。對數據庫中的敏感數據進行加密處理,是堵塞這一“隱秘通道”的有效手段。
據有關資料報道,80%的計算機犯罪來自系統內部。在傳統的數據庫系統中,數據庫管理員的權力至高無上,他既負責各項系統管理工作,例如資源分配、用戶授權、系統審計等,又可以查詢數據庫中的一切信息。為此,不少系統以種種手段來削弱系統管理員的權力。實現數據庫加密以後,各用戶(或用戶組)的數據由用戶用自己的密鑰加密,數據庫管理員獲得的信息無法進行正常脫密,從而保證了用戶信息的安全。另外,通過加密,數據庫的備份內容成為密文,從而能減少因備份介質失竊或丟失而造成的損失。由此可見,數據庫加密對於企業內部安全管理,也是不可或缺的。
也許有人認為,對數據庫加密以後會嚴重影響數據庫系統的效率,使系統不堪重負。事實並非如此。如果在數據庫客戶端進行數據加/脫密運算,對數據庫服務器的負載及系統運行幾乎沒有影響。在普通PC機上,用純軟件實現DES加密算法的速度超過200K字節/秒,如果對一篇一萬漢字的文章進行加密,其加/脫密時間僅需1/10秒,這種時間延遲用戶幾乎無感覺。目前,加密卡的加/脫密速度一般為1M位/ 秒,對中小型數據庫系統來說,這個速度即使在服務器端進行數據的加/脫密運算也是可行的,因為一般的關系數據項都不會太長(多媒體數據另當別論)。例如,在同一時間裡有10個用戶並發查詢,每個用戶平均查找1000個漢字的數據,最先得到結果的用戶延遲時間小於0.02秒,最後得到結果的用戶也僅需等待約0.16秒。
基本要求
根據我們的研究,一個良好的數據庫加密系統應該滿足以下基本要求:
1.字段加密
在目前條件下,加/脫密的粒度是每個記錄的字段數據。如果以文件或列為單位進行加密,必然會形成密鑰的反復使用,從而降低加密系統的可靠性或者因加脫密時間過長而無法使用。只有以記錄的字段數據為單位進行加/脫密,才能適應數據庫操作,同時進行有效的密鑰管理並完成“一次一密”的密碼操作。
2.密鑰動態管理
數據庫客體之間隱含著復雜的邏輯關系,一個邏輯結構可能對應著多個數據庫物理客體,所以數據庫加密不僅密鑰量大,而且組織和存儲工作比較復雜,需要對密鑰實現動態管理。
3.合理處理數據
這包括幾方面的內容。首先要恰當地處理數據類型,否則 DBMS將會因加密後的數據不符合定義的數據類型而拒絕加載;其次,需要處理數據的存儲問題,實現數據庫加密後,應基本上不增加空間開銷。在目前條件下,數據庫關系運算中的匹配字段,如表間連接碼、索引字段等數據不宜加密。文獻字段雖然是檢索字段,但也應該允許加密,因為文獻字段的檢索處理采用了有別於關系數據庫索引的正文索引技術。
4.不影響合法用戶的操作
加密系統影響數據操作響應時間應盡量短,在現階段,平均延遲時間不應超過1/10秒。此外,對數據庫的合法用戶來說,數據的錄入、修改和檢索操作應該是透明的,不需要考慮數據的加/脫密問題。
不同層次實現數據庫加密
我們可以考慮在三個不同層次實現對數據庫數據的加密,這三個層次分別是OS、DBMS內核層和DBMS外層。
在OS層,無法辨認數據庫文件中的數據關系,從而無法產生合理的密鑰,也無法進行合理的密鑰管理和使用。所以,在OS層對數據庫文件進行加密,對於大型數據庫來說,目前還難以實現。
在DBMS內核層實現加密,是指數據在物理存取之前完成加/脫密工作。這種方式勢必造成DBMS和加密器(硬件或軟件)之間的接口需要DBMS 開發商的支持。這種加密方式的優點是加密功能強,並且加密功能幾乎不會影響DBMS 的功能。其缺點是在服務器端進行加/脫密運算,加重了數據庫服務器的負載。這種加密方式如圖1所示。
比較實際的做法是將數據庫加密系統做成DBMS的一個外層工具(如圖2所示)。采用這種加密方式時,加/脫密運算可以放在客戶端進行,其優點是不會加重數據庫服務器的負載並可實現網上傳輸加密,缺點是加密功能會受一些限制。圖中,“定義加密要求工具”模塊的主要功能是定義如何對每個數據庫表數據進行加密。在創建了一個數據庫表後,通過這一工具對該表進行定義;“數據庫應用系統”的功能是完成數據庫定義和操作。數據庫加密系統將根據加密要求自動完成對數據庫數據的加/ 脫密。
加密系統的有關問題
數據庫加密系統首先要解決系統本身的安全性和可靠性問題,在這方面,可以采用以下幾項安全措施:
1. 在用戶進入系統時進行兩級安全控制
這種控制可以采用多種方式,包括設置數據庫用戶名和口令,或者利用IC卡讀寫器/指紋識別器進行用戶身份認證。
2. 防止非法拷貝
對於純軟件系統,可以采用軟指紋技術防止非法拷貝,當然,如果每台客戶機上都安裝加密卡等硬部件,安全性會更好。此外,還應該保留數據庫原有的安全措施,如權限控制、備份/恢復和審計控制等。
3. 安全的數據抽取方式
提供兩種卸出和裝入數據庫中加密數據的方式:其一是密文方式卸出,這種卸出方式不脫密,卸出的數據還是密文,在這種模式下,可直接使用 DBMS提供的卸出/裝入工具;其二是明文方式卸出,這種卸出方式需要脫密,卸出的數據是明文,在這種模式下,可利用系統專用工具先進行數據轉換,再使用DBMS提供的卸出/裝入工具完成。
系統結構
數據庫加密系統分成兩個功能獨立的主要部件:一個是加密字典管理程序,另一個是數據庫加/脫密引擎,體系結構如圖3所示。
數據庫加密系統將用戶對數據庫信息具體的加密要求記載在加密字典中,加密字典是數據庫加密系統的基礎信息。
加密字典管理程序,是管理加密字典的實用程序,是數據庫管理員變更加密要求的工具。
加密字典管理程序通過數據庫加/脫密引擎實現對數據庫表的加密、脫密及數據轉換等功能,此時,它作為一個特殊客戶來使用數據庫加/脫密引擎。
數據庫加/脫密引擎是數據庫加密系統的核心部件,負責在後台完成數據庫信息的加/脫密處理,對應用開發人員和操作人員是透明的。
按以上方式實現的數據庫加密系統具有很多優點。首先,系統對數據庫的最終用戶完全透明,數據管理員可以指定需要加密的數據並根據需要進行明文/密文的轉換工作;其次,系統完全獨立於數據庫應用系統,不需要改動數據庫應用系統就能實現加密功能,同時系統采用了分組加密法和二級密鑰管理,實現了“一次一密”;其三,系統在客戶端進行數據加/脫密運算,不會影響數據庫服務器的系統效率,數據加/脫密運算基本無延遲感覺。
數據庫加密系統能夠有效地保證數據的安全,即使黑客竊取了關鍵數據,他仍然難以得到所需的信息,因為所有的數據都經過了加密。另外,數據庫加密以後,可以設定不需要了解數據內容的系統管理員不能見到明文,大大提高了關鍵數據的安全性。