如何設(shè)計數(shù)據(jù)庫文件加密系統(tǒng)

據(jù)有關(guān)資料報道,計算機犯罪80%來自系統(tǒng)內(nèi)部。實現(xiàn)數(shù)據(jù)庫文件加密以后,各用戶(或用戶組)的數(shù)據(jù)用自己的密鑰加密,其他用戶無法對其進(jìn)行解密,保護(hù)了用戶的秘密。另外,數(shù)據(jù)庫的備份內(nèi)容也可以是密文,能夠減少因這些備份介質(zhì)失竊或丟失而造成的損失。因此,實行數(shù)據(jù)庫文件加密對于保障數(shù)據(jù)安全十分重要。

一、數(shù)據(jù)庫文件加密系統(tǒng)的基本要求

1、字段加密

數(shù)據(jù)庫文件加密和解密的粒度應(yīng)是每個記錄的字段數(shù)據(jù)。若以文件或列為單位進(jìn)行加密,會形成密鑰的反復(fù)使用,從而降低加密系統(tǒng)的可靠性或者因加解密時間過長而無法使用。

2、密鑰動態(tài)管理

數(shù)據(jù)庫客體之間隱含著復(fù)雜的邏輯關(guān)系,一個邏輯結(jié)構(gòu)可能對應(yīng)著多個數(shù)據(jù)庫物理客體,所以數(shù)據(jù)庫加密不僅密鑰量大,而且組織和存儲工作比較復(fù)雜,需要對密鑰實現(xiàn)動態(tài)管理。

3、合理處理數(shù)據(jù)

首先要恰當(dāng)?shù)靥幚頂?shù)據(jù)類型,否則DBMS將會因加密后的數(shù)據(jù)不符合定義的數(shù)據(jù)類型而拒絕加載;其次,需要處理數(shù)據(jù)的存儲問題,實現(xiàn)數(shù)據(jù)庫文件加密后,應(yīng)基本上不增加空間開銷。在目前條件下,數(shù)據(jù)庫關(guān)系運算中的匹配字段,如表間連接碼、索引字段等數(shù)據(jù)不宜加密。文獻(xiàn)字段雖然是檢索字段,但也應(yīng)該允許加密,因為文獻(xiàn)字段的檢索處理采用了有別于關(guān)系數(shù)據(jù)庫索引的正文索引技術(shù)。

4、不影響合法用戶的操作

數(shù)據(jù)庫文件加密系統(tǒng)影響數(shù)據(jù)操作響應(yīng)時間應(yīng)盡量短;此外,對數(shù)據(jù)庫的合法用戶來說,數(shù)據(jù)的錄入、修改和檢索操作應(yīng)該是透明的,不需要考慮數(shù)據(jù)的加/解密問題。

二、數(shù)據(jù)庫文件加密系統(tǒng)結(jié)構(gòu)

1、不同層次實現(xiàn)數(shù)據(jù)庫文件加密

可以考慮在3個不同層次實現(xiàn)對數(shù)據(jù)庫數(shù)據(jù)文件的加密,這3個層次分別是OS、DBMS內(nèi)核層和DBMS外層。

在OS層,由于無法辨認(rèn)數(shù)據(jù)庫文件中的數(shù)據(jù)關(guān)系,從而無法產(chǎn)生合理的密鑰,也無法進(jìn)行合理的密鑰管理和使用,因此,在OS層對數(shù)據(jù)庫文件進(jìn)行加密,對于大型數(shù)據(jù)庫來說,目前還難以實現(xiàn)。

在DBMS內(nèi)核層實現(xiàn)數(shù)據(jù)庫文件加密,是指數(shù)據(jù)在物理存取之前完成加密和解密工作。這種方式造成DBMS和加密器(硬件或軟件)之間的接口需要DBMS開發(fā)商的支持。優(yōu)點是加密功能強,并且加密功能幾乎不會影響DBMS的功能;缺點是在服務(wù)器端進(jìn)行加據(jù)誒米運算,加重了數(shù)據(jù)庫服務(wù)器的負(fù)載。

另一種做法是將數(shù)據(jù)庫文件加密系統(tǒng)做成DBMS的一個外層工具。采用這種加密方式時,加密和解密運算可以放在客戶端進(jìn)行,其優(yōu)點是不會加重數(shù)據(jù)庫服務(wù)器的負(fù)載并可實現(xiàn)網(wǎng)上傳輸加密,缺點是加密功能會受一些限制。

2、數(shù)據(jù)庫文件加密系統(tǒng)結(jié)構(gòu)

數(shù)據(jù)庫文件加密系統(tǒng)設(shè)計成2個功能獨立的主要部件,一個是加密字典管理程序,另一個是數(shù)據(jù)庫文件加密和解密引擎,體系結(jié)構(gòu)如圖1所示。

如何設(shè)計數(shù)據(jù)庫文件加密系統(tǒng)

數(shù)據(jù)庫文件加密系統(tǒng)將用戶對數(shù)據(jù)庫信息具體的加密要求記載在加密字典中,加密字典是數(shù)據(jù)庫文件加密系統(tǒng)的基礎(chǔ)信息。

加密字典管理程序,是管理加密字典的實用程序,是數(shù)據(jù)庫管理員變更加密要求的工具。加密字典管理程序通過數(shù)據(jù)庫加密和解密引擎實現(xiàn)對數(shù)據(jù)庫表的加密、解密及數(shù)據(jù)轉(zhuǎn)換等功能,此時,它作為一個特殊客戶來使用數(shù)據(jù)庫加密和解密引擎。

數(shù)據(jù)庫加密和解密引擎是數(shù)據(jù)庫文件加密系統(tǒng)的核心部件,負(fù)責(zé)在后臺完成數(shù)據(jù)庫信息文件的加密和解密處理,對應(yīng)用開發(fā)人員和操作人員是透明的。

三、數(shù)據(jù)庫文件加密系統(tǒng)的主要功能模塊

1、數(shù)據(jù)庫文件加密及密鑰管理

(1)數(shù)據(jù)庫文件加密

數(shù)據(jù)庫加密數(shù)據(jù)文件的數(shù)據(jù)文件類型需要處理,否則數(shù)據(jù)庫管理系統(tǒng)將會因加密后的數(shù)據(jù)文件不符合定義的數(shù)據(jù)文件類型而拒絕加載。一個解決方法是另外建立密文表用于存放密文,凡是需要加密的數(shù)據(jù)文件都定義為計算機二進(jìn)制數(shù)據(jù)文件類型,加密以后插入數(shù)據(jù)庫的數(shù)據(jù)文件全部為二進(jìn)制數(shù)據(jù)文件類型的數(shù)據(jù)文件,用戶檢索時數(shù)據(jù)庫文件加密系統(tǒng)自動解密并轉(zhuǎn)換成用戶所需要的數(shù)據(jù)文件類型。

數(shù)據(jù)庫文件加密系統(tǒng)為數(shù)據(jù)庫用戶提供了定義加密要求的手段。通過系統(tǒng)提供的用戶界面,用戶可以選擇需要加密的數(shù)據(jù)庫文件表,并確定該表需要加密的列數(shù)據(jù)文件。

當(dāng)應(yīng)用系統(tǒng)輸入一條數(shù)據(jù)庫表記錄時,系統(tǒng)查得該表的加密要求,如果需要加密,則對需要加密的列數(shù)據(jù)進(jìn)行加密,然后將得到的密文插入到數(shù)據(jù)庫表中。如果該表不需要加密,則將明文直接插入到數(shù)據(jù)庫表中。

當(dāng)應(yīng)用系統(tǒng)查得一條數(shù)據(jù)庫表記錄時,系統(tǒng)查得該表的加密要求。如果是明文(該表沒有加密要求),則直接將明文記錄交付用戶。如果有加密要求則將每個需要解密的列數(shù)據(jù)解密,并將所得到的明文交付用戶。當(dāng)修改一條數(shù)據(jù)庫表記錄時,情況與插入一條記錄相似。

(2)密鑰管理方法

本系統(tǒng)實行二級密鑰管理。一級密鑰為主密鑰,二級密鑰為工作密鑰。主密鑰的作用是對二級密鑰信息加密生成工作密鑰。工作密鑰用于對數(shù)據(jù)庫數(shù)據(jù)的加密和解密。工作密鑰信息的長度為128分位,前1 1 2位是記錄名,需要帶校驗地存儲在數(shù)據(jù)庫表中;后1 6位是數(shù)據(jù)庫表的列(字段)信息(該字段在表中的某些特征),列信息臨時生成。為了存儲記錄名數(shù)據(jù),每個數(shù)據(jù)庫表增加一個記錄名字段,在用戶錄入數(shù)據(jù)時,系統(tǒng)自動生成記錄名數(shù)據(jù),使每條記錄都有一個記錄名并做到各記錄名數(shù)據(jù)互不重復(fù)。

設(shè)一個表有m列,n條記錄,則對于每一個加密單位都有一個對應(yīng)的二級密鑰信息XiYj,組織方法如下:

如何設(shè)計數(shù)據(jù)庫文件加密系統(tǒng)

其中,Xi占1 1 2位,Xi序列的周期為2的112次方≈5×10的33次方。

Yj占16位'允許表列編號0~65536。

XiYj的總長度為112+16=128位在數(shù)據(jù)需要加密和解密時,將相應(yīng)的位二級密鑰信息用主密鑰進(jìn)行加密即得到工作密鑰,用工作密鑰完成對數(shù)據(jù)的加/加密。

應(yīng)用分析:如果一年需要1×10的220次方條記錄,在足夠長的時間內(nèi)可提供不重復(fù)的X序列:

(5×10的33次方)÷(1×10的20次方) =5×10的13次方(年)。在足夠長的時間內(nèi)保證了Xi言息的兩兩互異。一個數(shù)據(jù)庫表的列數(shù)不會超過65536列,這就保證了Yj信息的兩兩互異。由此保證了Yj信息的兩兩互異。

數(shù)據(jù)庫文件加密系統(tǒng)中還需要其他一些密鑰信息。例如多服務(wù)器、多數(shù)據(jù)庫、多用戶、多用戶組等情況時,還需要根據(jù)應(yīng)用增添一些信息,其方法是將以上各類實體分別進(jìn)行編碼、存儲并依據(jù)不同情況使用。

本數(shù)據(jù)庫文件加密系統(tǒng)中,主密鑰保護(hù)了工作密鑰,工作密鑰保護(hù)敏感信息。整個系統(tǒng)的安全依賴于主密鑰的安全。主密鑰的安全需要解決以下幾個問題:

主密鑰的生成:采用投幣法產(chǎn)生128位二進(jìn)制數(shù)據(jù)。

主密鑰的存儲:主密鑰經(jīng)加密并存放于安全區(qū)域內(nèi),使用時由系統(tǒng)自動獲取并解密。本數(shù)據(jù)庫文件加密系統(tǒng)也可將主密鑰注入加密卡中以保證安全。

主密鑰的更換:在數(shù)據(jù)庫文件加密系統(tǒng)中,主密鑰的更換是一個比較棘手的問題。主密鑰更換以后,會造成工作密鑰的全部更換。數(shù)據(jù)庫中存儲有巨大數(shù)量的數(shù)據(jù),已經(jīng)加密的數(shù)據(jù)文件需要用原來的密鑰系統(tǒng)解密,而且解密時間將會很長。

2、數(shù)據(jù)庫文件加密管理程序

數(shù)據(jù)庫文件加密管理程序是數(shù)據(jù)庫管理員定義加密數(shù)據(jù)項的工具,提供了創(chuàng)建加密字典、刪除加密字典、表加密、表解密、表修復(fù)、加密字典權(quán)限管理等功能,它利用數(shù)據(jù)庫加解密引擎來完成已有數(shù)據(jù)文件的加密或解密處理。

加密字典管理程序由系統(tǒng)管理員使用,普通用戶不必關(guān)心。它由用戶注冊、加密字典配置、修改加密定義、表信息檢索、密文表配置、數(shù)據(jù)轉(zhuǎn)換等模塊組成。

加密字典配置模塊提供用戶在當(dāng)前數(shù)據(jù)庫創(chuàng)建及刪除加密字典的功能。加密定義修改模塊提供給數(shù)據(jù)庫管理員一個界面,在此界面中,用戶可以指定需加密或解密的表、字段,程序根據(jù)實際的加密要求,完成數(shù)據(jù)庫結(jié)構(gòu)及加密字典的調(diào)整和數(shù)據(jù)的加解密轉(zhuǎn)換工作。表信息檢索模塊從數(shù)據(jù)字典中檢索出與某個表有關(guān)的各種信息,這些信息包括表名、主鍵定義、外鍵定義、索引定義、字段定義等,供其它模塊
使用。密文表配置模塊的功能是根據(jù)用戶確定的加密定義創(chuàng)建或刪除密文表,同時將加密定義寫入加密字典或從加密字典中刪去有關(guān)內(nèi)容。數(shù)據(jù)轉(zhuǎn)換模塊是專門為加密定義修改模塊服務(wù)的,完成一個表的加密、解密、加密列變更3種需求下的數(shù)據(jù)轉(zhuǎn)換工作。

3、數(shù)據(jù)庫文件加密系統(tǒng)的加密和解密引擎

在數(shù)據(jù)庫文件加密系統(tǒng)體系結(jié)構(gòu)中,數(shù)據(jù)庫文件加密和解密引擎位于應(yīng)用程序與數(shù)據(jù)庫服務(wù)器之間,是數(shù)據(jù)庫文件加密系統(tǒng)的核心部件,負(fù)責(zé)在后臺完成數(shù)據(jù)庫信息的加密和解密處理,對應(yīng)用開發(fā)人員和操作人員是透明的。它由加密和解密處理、語法分析、數(shù)據(jù)庫接口等模塊組成。

加密、解密處理模塊是數(shù)據(jù)庫加脫嘧引擎的核心模塊,包括數(shù)據(jù)庫加解密引擎的初始化、內(nèi)部專用命令的處理、加密字典信息的檢索、加密字典緩沖區(qū)的管理、SQL命令的加密變換、查詢結(jié)果的解密處理、加密算法和解密算法實現(xiàn)等功能子模塊,另外還包括一些公用的輔助函數(shù)。

語法分析模塊的功能是將SQL命令轉(zhuǎn)換成易處理的樹形式的語法結(jié)構(gòu)。該模塊由詞法分析器、語法分析器、語法錯誤處理、語法樹轉(zhuǎn)換成SQL命令等子模塊組成。在進(jìn)行語法分析時,先對SQL命令進(jìn)行詞法分析,分割成各個詞法單位,再輸入語法分析器,得到一棵語法樹。語法分析模塊還包括語法樹反向生成SQL命令的功能函數(shù),用于將經(jīng)過加密變換后的語法樹轉(zhuǎn)換成新的SQL命令。

數(shù)據(jù)庫接口模塊將所有訪問數(shù)據(jù)庫的操作封裝在一起,屏蔽了各類數(shù)據(jù)庫的特性,使得加密和解密處理模塊不必關(guān)心實際使用的是哪種數(shù)據(jù)庫。該模塊包含兩部分接口,一是前端數(shù)據(jù)庫客戶訪問數(shù)據(jù)庫加密和解密引擎的接口函數(shù),二是數(shù)據(jù)庫加密和解密引擎訪問后臺數(shù)據(jù)庫服務(wù)器的接口函數(shù)。

數(shù)據(jù)庫文件加密系統(tǒng)采用在DBMS外層實現(xiàn)數(shù)據(jù)庫文件加密系統(tǒng)的方法,使得系統(tǒng)對數(shù)據(jù)庫最終用戶完全透明;而且,數(shù)據(jù)庫文件加密系統(tǒng)完全獨立于數(shù)據(jù)庫應(yīng)用系統(tǒng),不需要改動數(shù)據(jù)庫應(yīng)用系統(tǒng)就能實現(xiàn)加密功能;同時,該系統(tǒng)采用分組加密法,二級密鑰管理,實現(xiàn)了“一次一密”,具有很高的安全性;更加重要的是該系統(tǒng)在客戶端進(jìn)行數(shù)據(jù)加解密運算,不會影響數(shù)據(jù)庫服務(wù)器的系統(tǒng)效率,數(shù)據(jù)加密和解密運算基本無延遲。

小知識之DBMS

數(shù)據(jù)庫管理系統(tǒng)(database management system)是一種操縱和管理數(shù)據(jù)庫的大型軟件,用于建立、使用和維護(hù)數(shù)據(jù)庫,簡稱dbms。它對數(shù)據(jù)庫進(jìn)行統(tǒng)一的管理和控制,以保證數(shù)據(jù)庫的安全性和完整性。用戶通過dbms訪問數(shù)據(jù)庫中的數(shù)據(jù),數(shù)據(jù)庫管理員也通過dbms進(jìn)行數(shù)據(jù)庫的維護(hù)工作。它可使多個應(yīng)用程序和用戶用不同的方法在同時或不同時刻去建立,修改和詢問數(shù)據(jù)庫。DBMS提供數(shù)據(jù)定義語言DDL(Data Definition Language)與數(shù)據(jù)操作語言DML(Data Manipulation Language),供用戶定義數(shù)據(jù)庫的模式結(jié)構(gòu)與權(quán)限約束,實現(xiàn)對數(shù)據(jù)的追加、刪除等操作。