文件型數(shù)據(jù)庫加密技術(shù)分析(一)

隨著計算機科學(xué)技術(shù)的發(fā)展與普及,特別是計算機在經(jīng)濟、社會、政治各重要領(lǐng)域的廣泛應(yīng)用,計算機安全問題已成為當今信息社會關(guān)注的重點。而數(shù)據(jù)庫系統(tǒng)擔負著存儲和管理信息的任務(wù),集中存放大量數(shù)據(jù),為許多終端客戶共享。許多數(shù)據(jù)信息的機密性很強,泄漏或破壞這些信息小則給部門或單位帶來損害,大則給國家?guī)砭揞~損失,甚至危及國家安全。因而使安全性問題更為突出。如何保證和加強數(shù)據(jù)庫的安全性和機密性,已成為目前迫切需要解決的問題。數(shù)據(jù)庫的安全性主要是指保護數(shù)據(jù)庫以防止非法存取,保證數(shù)據(jù)庫中數(shù)據(jù)的完整性、一致性以及數(shù)據(jù)庫備份與恢復(fù)。數(shù)據(jù)庫安全保密的目標是:非授權(quán)用戶進不來,拿不走,看不懂。即攻擊者很難進入數(shù)據(jù)庫系統(tǒng),即使進入系統(tǒng)也無法獲取有用的信息,即使獲取了信息,也無法辨識。

1 文件型數(shù)據(jù)庫常用加密方式

所謂文件型數(shù)據(jù)庫,顧名思義,是基于文件的(file-based)數(shù)據(jù)庫,數(shù)據(jù)被按照一定格式儲存在磁盤里,使用時由應(yīng)用程序通過相應(yīng)的驅(qū)動程序甚至直接對數(shù)據(jù)文件進行讀取。這種數(shù)據(jù)庫訪問起來比較簡單、便捷,只要了解其文件格式,任何程序都可以直接讀取,這也決定了它的安全性能相對較差。但正因為對它的訪問簡單、便捷,在當今數(shù)據(jù)庫技術(shù)不斷革新的時代,文件型數(shù)據(jù)庫仍然占有一席之地。根據(jù)文件型數(shù)據(jù)庫的特點,文件型數(shù)據(jù)庫的常用加密方式一般有兩種:

1.1 庫外加密

基于文件型數(shù)據(jù)庫的特點,庫外加密的方式主要是針對文件IO操作或操作系統(tǒng)而言的。因為數(shù)據(jù)庫管理系統(tǒng)與操作系統(tǒng)的接口方式有三種:一是直接利用文件系統(tǒng)的功能;二是利用操作系統(tǒng)的I/O模塊;三是直接調(diào)用存儲管理。所以采用庫外加密時,可以先在內(nèi)存中使用DES、RSA等方法對數(shù)據(jù)進行加密,然后文件系統(tǒng)把每次加密后的內(nèi)存數(shù)據(jù)寫入到數(shù)據(jù)庫文件中(注意這里是把整個數(shù)據(jù)庫作為普通的文件看待,而不是按數(shù)據(jù)關(guān)系寫入),讀入時再逆方向進行解密。這種加密方法相對簡單,只要妥善管理密鑰就可以了。缺點是對數(shù)據(jù)庫的讀寫比較麻煩,每次都要進行加解密的工作,對程序的編寫和讀寫數(shù)據(jù)庫的速度都會有影響。

1.2 庫內(nèi)加密

如果從關(guān)系型數(shù)據(jù)庫的各個方面出發(fā),很容易形成庫內(nèi)加密的思想。關(guān)系型數(shù)據(jù)庫的關(guān)鍵術(shù)語有:表、字段、行和數(shù)據(jù)元素。基本上可以針對這幾方面形成一種加密的方法。

(1) 以表為單位:

對于文件型數(shù)據(jù)庫來說,一個文件只有一張表,因而對表的加密可以說是對文件的加密了。通過更改文件分配表(FAT)中的說明等手段可以實現(xiàn)對文件的簡單加密,但這種加密方式涉及到文件系統(tǒng)底層,誤操作容易造成FAT混亂,而且與文件系統(tǒng)格式有關(guān),因而通常不宜采用。

(2) 以記錄或字段(即二維表的行或列)為單位加密:

通常情況下,我們訪問數(shù)據(jù)庫時都是以二維表方式進行的,二維表的每一行就是數(shù)據(jù)庫的一條記錄,二維表的每一列就是數(shù)據(jù)庫的一個字段。如果以記錄為單位進行加密,那么每讀寫一條記錄只需進行一次加解密的操作,對于不需要訪問到的記錄,完全不需要進行任何操作,所以使用起來效率會高一些。但是由于每一個記錄都必須有一個密鑰與之匹配,因此產(chǎn)生和管理記錄密鑰比較復(fù)雜。以字段為單位的加密分析與以記錄為單位的加密情況相似。

(3) 以數(shù)據(jù)元素為單位加密:

由于數(shù)據(jù)元素是數(shù)據(jù)庫庫內(nèi)加密的最小單位,因而這種加密方式是最徹底的但也是效率最低的。每個被加密的元素會有一個相應(yīng)的密鑰,所以密鑰的產(chǎn)生和管理比記錄加密方式還要復(fù)雜。

2 常用的加密算法

加密算法是數(shù)據(jù)加密的核心。一個好的加密算法產(chǎn)生的密文應(yīng)該頻率平衡,隨機無重碼,周期很長而又不可能產(chǎn)生重復(fù)現(xiàn)象。竊密者很難通過對密文頻率或者重碼等特征的分析獲得成功。同時,算法必須適應(yīng)數(shù)據(jù)庫系統(tǒng)的特性,加/解密,尤其是解密響應(yīng)迅速。常用的加密算法有DES 加密算法和RSA 加密算法兩種。

2.1 DES 加密算法

DES算法是由美國IBM公司在1970年以后發(fā)展起來的,1977年l月15日被美國國家標準局頒布為數(shù)據(jù)加密標準(Data Encryption Standard)。

(1) 算法的數(shù)學(xué)描述

DES中,明文m是0和1組成的長度為64比特的符號串,密鑰k也是64比特的0、1符號串。設(shè)

m = m lm 2… m 6 4

k= k 1k 2… k64

mi ,k i= 0 或 1 , i=1,2 ,…,64

則加密過程為:

DES ( m ) = IP -1_T16_T15_… _T2_T1_IP (m)

解密過程為:

DES- 1= IP_T1_T2_… _T15_T16_IP-1

其中,IP和IP-1是一對互逆的置換,T1, T2,…,T15, T16為16種不同的可逆變換[2]。

(2) DES加密過程

在DES的設(shè)計中,明文分塊長度為64比特,密鑰長度也為64比特,其中56比特用于加密過程,其余8比特用于奇偶校驗位。確切地說,密鑰分成8個8比特的字節(jié),在每一個字節(jié)中的7比特用于加密算法,第8個比特用于奇偶校驗。

在明文處理過程中,首先,64比特明文通過初始置換(IP) ,對各比特進行置換,生成置換后的輸入。緊接著是由同一函數(shù)的16次迭代構(gòu)成的階段。最后一次(第16次)迭代的輸出由64比特構(gòu)成,它是輸入明文和密鑰的函數(shù)。輸出的左右部分相互調(diào)換生成預(yù)輸出。最后,預(yù)輸出通過置換(IP-1)-對初始置換函數(shù)的逆轉(zhuǎn)-生成64比特密文。

對于密鑰的使用(用于加密的56比特),首先,密鑰傳遞到置換函數(shù)。然后通過剛才描述的循環(huán)移位操作和置換操作的結(jié)合,在16次迭代中每一次迭代都生成子密鑰(Ki)。每次迭代的置換函數(shù)是相同的,但子密鑰不同,因為密鑰進行了重復(fù)移位。

在變換過程中,輸入的64比特的明文,在64比特的密鑰控制下,通過初始換位,再經(jīng)過16層加密變換,最后再通過逆初始變換得到64比特的密文。密文的每一比特都是由明文的每一比特和密鑰的每一比特聯(lián)合確定的[3]。

DES綜合應(yīng)用了置換、代替、代數(shù)等多種密碼技術(shù),是一種乘積密碼。在算法結(jié)構(gòu)上采用迭代結(jié)構(gòu),從而使結(jié)構(gòu)緊湊,條理清楚,而且算法為對合運算,便于實現(xiàn)。因為算法中使用了16次迭代,從而使得即使是改變明文或者密鑰中的1位,密文都會發(fā)生約32位的變化,大大提高了保密性。

2.2 RSA 加密算法

RSA是第一個既能用于數(shù)據(jù)加密也能用于數(shù)字簽名的算法,易于理解和操作,比較流行。其安全性依賴于大數(shù)分解。公鑰和私鑰都是兩個大素數(shù)(大于100個十進制位)的函數(shù)。據(jù)猜測,從一個密鑰和密文推斷出明文的難度等同于分解兩個大素數(shù)的積。兩個大素數(shù)相乘在計算上是容易實現(xiàn)的,但將該乘積分解為兩個大素數(shù)因子的計算量卻相當巨大,大到甚至在計算機上也不可能實現(xiàn)。

RSA是一種分組加密方法,明文和密文都是0~n-1之間的整數(shù)。例如:對明文塊M和密文塊C,加密和解密的形式如下:

C= Me mod n

M= Cd mod n =(Me)d mod n =Med mod n