通用數(shù)據(jù)庫文件加密模塊設(shè)計方法

針對當(dāng)前數(shù)據(jù)庫文件加密系統(tǒng)面向特定環(huán)境應(yīng)用的問題,我們設(shè)計了一種通用的數(shù)據(jù)庫文件加密模塊,該模塊可提供不同的加密算法與加密粒度,用戶可根據(jù)需要進行相應(yīng)的選擇。

一、數(shù)據(jù)庫文件加密模塊設(shè)計原則

1、加密層次的選擇

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

在OS層加密,其加密粒度是整個文件,十分粗糙,無法辨認(rèn)數(shù)據(jù)庫文件中的數(shù)據(jù)關(guān)系,從而無法根據(jù)數(shù)據(jù)關(guān)系對數(shù)據(jù)進行合理的加密。

在DBMS內(nèi)核層加密,是指數(shù)據(jù)在物理存取之前完成加,解密工作,這種方式可以更有效和DBMS內(nèi)部的各種功能結(jié)合起來,但是需要對DBMS的內(nèi)核進行修改,需要DBMS開發(fā)商的支持。

采用DBMS外層加密方式時,加密/解密運算、密鑰的管理等工作在DBMS外層執(zhí)行,不會加重數(shù)據(jù)庫服務(wù)器的負(fù)載并且可以根據(jù)需要靈活配置數(shù)據(jù)庫加密,但加密功能會受到一些限制。

因此,本文選擇在DBMS外層實現(xiàn)對數(shù)據(jù)庫文件的加密。

2、加密算法的選擇

目前常用的加密算法可分為2類:對稱加密算法和非對稱加密算法。

對稱加密算法的加密和解密密鑰相同,具有加解密速度快,保密度高等優(yōu)點。對稱加密算法按加密模式又可分為序列密碼和分組密碼兩大類,序列密碼以字符為單位進行加密變換,每一字符數(shù)據(jù)的加密與報文的其他部分無關(guān);分組密碼加密時,明文按固定長度分組,對各組數(shù)據(jù)用不同密鑰加密。

非對稱加密算法加密和解密使用不同的密鑰,這類算法加解密速度較慢,速度僅達(dá)到其他加密算法的千分之一到百分之一。

數(shù)據(jù)庫文件加密系統(tǒng)要求所使用的加密算法安全性高的同時加解密速度足夠快,盡量不影響用戶使用,并且加密后,數(shù)據(jù)量不應(yīng)該明顯增加。因此選擇使用對稱密鑰的分組加密算法,本加密模塊提供了2種具有代表性的加密算法:DES加密算法和AES加密算法用戶可根據(jù)加密強度的需求進行選擇配置。對于碎片分組,本模塊采用密文挪位法吲,保證分組加密的長度,同時保證了加密后數(shù)據(jù)長度不變,但對于數(shù)據(jù)庫中有些比較短的數(shù)據(jù),還是根據(jù)情況進行了數(shù)據(jù)填充,否則會降低密碼強度。

3、加密粒度的選擇

加密粒度是指數(shù)據(jù)庫加密的最小單位,按照數(shù)據(jù)庫的結(jié)構(gòu)層次,對數(shù)據(jù)庫信息加密的粒度可分為數(shù)據(jù)庫級、表級、記錄級、字段級和數(shù)據(jù)項級。

(1)數(shù)據(jù)庫級:把數(shù)據(jù)庫文件作為整體進行加密。這種加密方法簡單,但加密粒度粗糙,查詢效率低,即使只需要少量數(shù)據(jù),也必須解密整個數(shù)據(jù)庫。

(2)表級:以數(shù)據(jù)庫文件中的表為單位進行加密。與數(shù)據(jù)庫級加密比較,查詢性能有所改善,但仍然不夠靈活。

(3)記錄級:一般而言,數(shù)據(jù)庫文件系統(tǒng)中每條記錄所包含的信息具有一定的封閉性,與數(shù)據(jù)庫級和表級加密相比,這種加密的粒度更細(xì),靈活性更好,是最常用的數(shù)據(jù)庫信息文件手段。

(4)字段級:加密的對象是關(guān)系中的某個字段。字段加密是一個比較好的選擇,因為一些敏感的信息總是出現(xiàn)在某些列,只需對這些數(shù)據(jù)文件進行保護,不需對普通數(shù)據(jù)文件加密。

(5)數(shù)據(jù)項級:以不同記錄的不同字段為基本加密單元進行加密.該方法具有最小的加密粒度,具有更好的靈活性和適應(yīng)性,但密鑰的管理十分困難。

選擇加密粒度時,應(yīng)該兼顧效率和安全性,根據(jù)不同的要求,進行不同的選擇。本加密模塊可以提供記錄級、字段級和數(shù)據(jù)項級3種加密粒度。

4、密文數(shù)據(jù)的存放

數(shù)據(jù)文件經(jīng)加密后,數(shù)據(jù)類型及數(shù)據(jù)長度都有可能發(fā)生變化,如果存放到原數(shù)據(jù)表中,則有可能發(fā)生錯誤。因此,本文采取將明文與密文分開存放的方式,另建一張密文表,將密文數(shù)據(jù)存放到密文表中。

5、數(shù)據(jù)庫文件加密的限制

由于選擇在DBMS外層實現(xiàn)對數(shù)據(jù)庫文件的加密,DBMS要完成對數(shù)據(jù)庫文件的管理和使用,必須能夠識別部分?jǐn)?shù)據(jù),因此,只能對數(shù)據(jù)庫的部分信息文件進行加密。

注意:

(1)索引字段不能加密;

(2)關(guān)系運算的比較字段不能加密;

(3)表間的連接碼字段不能加密。

二、數(shù)據(jù)庫文件加密模塊系統(tǒng)設(shè)計

1、系統(tǒng)結(jié)構(gòu)與主要模塊功能

本文提出的加密模塊位于DBMS外層,于數(shù)據(jù)庫應(yīng)用程序與DBMS之間,形成一種3層次的結(jié)構(gòu),由3個獨立的主要部件構(gòu)成:加密系統(tǒng)管理程序、數(shù)據(jù)庫文件加密/解密引擎和加密字典。其系統(tǒng)結(jié)構(gòu)如圖1所示。

通用數(shù)據(jù)庫文件加密模塊設(shè)計方法

加密系統(tǒng)管理程序位于數(shù)據(jù)庫服務(wù)器的外層,來自客戶端的加密請求需要通過加密系統(tǒng)管理程序處理后再發(fā)送到DBMS,它主要由接口模塊、加密分析模塊及加密字典管理程序組成。接口模塊提供數(shù)據(jù)庫應(yīng)用程序訪問數(shù)據(jù)庫加密模塊的接口;加密分析模塊判斷用戶的請求是否需要加密處理,如果不需要加密,則直接提交給數(shù)據(jù)庫管理系統(tǒng),否則通過調(diào)用數(shù)據(jù)庫文件加密/解密引擎處理后再提交。

加密字典管理程序提供對加密字典的創(chuàng)建、初始化、修改及維護等工作,是系統(tǒng)管理員變更加密要求及強制訪問控制的工具。

數(shù)據(jù)庫文件加密/解密引擎是數(shù)據(jù)庫加密模塊的核心模塊,在后臺按要求對信息進行加解密處理,由初始化模塊、讀寫數(shù)據(jù)模塊、密鑰管理模塊、加密/解密模塊及接口模塊組成。初始化模塊主要負(fù)責(zé)數(shù)據(jù)類型的轉(zhuǎn)換,加密時,所有數(shù)據(jù)類型的數(shù)據(jù)要先轉(zhuǎn)化成字符串類型數(shù)據(jù)再加密;將密文解密后,也需要先將其轉(zhuǎn)換為原始類型數(shù)據(jù)再提交給用戶。

讀寫數(shù)據(jù)模塊用來讀取需要進行加密/解密的數(shù)據(jù),并將處理結(jié)果寫入相應(yīng)的表中。密鑰管理模塊負(fù)責(zé)密鑰的管理,包括密鑰的產(chǎn)生、裝入、分配、存儲、使用、傳送、銷毀等環(huán)節(jié)。本加密模塊采用二級密鑰管理機制,每個加密數(shù)據(jù)庫有一個主密鑰,它由用戶創(chuàng)建數(shù)據(jù)庫時確定,保存在加密裝置里,用來對二級密鑰進行加密,二級密鑰用來對數(shù)據(jù)進行加密,由密鑰生成算法產(chǎn)生,經(jīng)主密鑰加密后存放在加密字典中。加密/解密模塊按要求對數(shù)據(jù)進行加密/解密處理.接口模塊提供數(shù)據(jù)庫加密/解密引擎訪問數(shù)據(jù)庫管理系統(tǒng)的接口。

加密字典中記載了有關(guān)加密數(shù)據(jù)的所有信息,包括加密字段的標(biāo)記、所使用的加密算法及密鑰長度等,通過加密/解密引擎實現(xiàn)對數(shù)據(jù)庫文件的加密、解密及數(shù)據(jù)類型轉(zhuǎn)換等功能。

2、系統(tǒng)處理流程

假設(shè)身份認(rèn)證等功能已經(jīng)在其他應(yīng)用程序中完成,所有進入本模塊的用戶都是合法用戶。

數(shù)據(jù)庫文件加密/解密引擎工作之前,首先要判斷所要進行的操作是加密還是解密,如果進行加密操作,則需要判斷用戶所選擇的加密算法,然后根據(jù)用戶的選擇調(diào)用不同的加街函數(shù)實現(xiàn)對數(shù)據(jù)的加密,最后將加密結(jié)果存人數(shù)據(jù)庫密文表中。解密操作與加密操作步驟相似,只是將數(shù)據(jù)類型轉(zhuǎn)換工作推遲到解密后進行,最后將解密后的明文數(shù)據(jù)提交給加密系統(tǒng)管理程序做下一步的處理。數(shù)據(jù)庫文件加密/解密引擎工作流程如圖2所示。

通用數(shù)據(jù)庫文件加密模塊設(shè)計方法

數(shù)據(jù)庫文件加密模塊主要工作步驟如下:

Stepl當(dāng)創(chuàng)建一個數(shù)據(jù)庫時,由用戶輸入一個主密鑰并保存在加密裝置里。

Step2如果用戶有加密需求,調(diào)用加密函數(shù),并根據(jù)自己的需要設(shè)置參數(shù)。

Step3判斷用戶是否有新的加密要求,如果有,將加密要求記錄在加密字典中。

Step4加密系統(tǒng)管理程序通過查詢加密字典判斷數(shù)據(jù)是否需要加密處理,如果不需要,轉(zhuǎn)Step6。

Step5數(shù)據(jù)庫文件加密/解密引擎獲得密鑰后對所指定的數(shù)據(jù)文件進行加密和解密處理。

Step6將命令提交給數(shù)據(jù)庫管理系統(tǒng)。

Step7根據(jù)不同要求將返回結(jié)果進行適當(dāng)處理后提交給用戶。

三、通用數(shù)據(jù)庫文件加密模塊的測試

建立一個簡單的學(xué)生成績管理系統(tǒng)對數(shù)據(jù)庫加密模塊進行測試,測試數(shù)據(jù)為一萬條記錄。該系統(tǒng)的主機配置為Celeron 2.4G,256 M內(nèi)存;數(shù)據(jù)庫系統(tǒng)為SQL Server2000。

測試過程如下:

(1)記錄數(shù)據(jù)庫沒有使用加密模塊時插入和查詢記錄所用的時間。

(2)設(shè)置加密模塊使用DES加密算法對姓名字段進行加密,記錄其插入與查詢記錄所用的時間。

(3)設(shè)置加密模塊使用AES(128 bit密鑰)加密算法對姓名字段進行加密,記錄其插入與查詢記錄所用的時間,測試結(jié)果如表1所示。

通用數(shù)據(jù)庫文件加密模塊設(shè)計方法

采用DES加密算法時,插入記錄的時間增長了2.18%,查詢記錄的時間增長了4.84%;采用AES加密算法時,插入記錄的時間增長了1.01%,查詢記錄的時間增長了8.26%.可以看出,數(shù)據(jù)庫文件加密模塊對數(shù)據(jù)庫系統(tǒng)效率的影響并不是很大,用戶可以接受。

小知識之DBMS

數(shù)據(jù)庫管理系統(tǒng)(Database Management System)是一種操縱和管理數(shù)據(jù)庫的大型軟件,用于建立、使用和維護數(shù)據(jù)庫,簡稱DBMS。它對數(shù)據(jù)庫進行統(tǒng)一的管理和控制,以保證數(shù)據(jù)庫的安全性和完整性。用戶通過DBMS訪問數(shù)據(jù)庫中的數(shù)據(jù),數(shù)據(jù)庫管理員也通過dbms進行數(shù)據(jù)庫的維護工作。它可使多個應(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ù)的追加、刪除等操作。