數(shù)據(jù)庫(kù)加密中動(dòng)態(tài)變換技術(shù)的應(yīng)用

隨著信息技術(shù)的發(fā)展,數(shù)據(jù)庫(kù)在信息管理的應(yīng)用已非常廣泛。為了確保數(shù)據(jù)庫(kù)文件的安全,我們提出了一種基于內(nèi)層加密函數(shù)對(duì)數(shù)據(jù)庫(kù)表的動(dòng)態(tài)變換加密技術(shù),動(dòng)態(tài)變換加密數(shù)據(jù)庫(kù)文件能使當(dāng)前行、列數(shù)據(jù)的加密密鑰做到互不干擾。

一、數(shù)據(jù)庫(kù)加密技術(shù)

目前數(shù)據(jù)的加密技術(shù)主要有兩大類,即庫(kù)內(nèi)加密及庫(kù)外加密。

1、庫(kù)內(nèi)加密

庫(kù)內(nèi)加密是在DBMS內(nèi)核層加密,解密過程也在內(nèi)層實(shí)現(xiàn),加密與解密的過程已封裝在內(nèi)部,對(duì)用戶與應(yīng)用系統(tǒng)只提供接口操作,數(shù)據(jù)記錄在物理存儲(chǔ)前進(jìn)行加密、解密,庫(kù)內(nèi)加密通常以存儲(chǔ)過程形式調(diào)用,密鑰以系統(tǒng)數(shù)據(jù)字典的形式保存在DBMS可以訪問的區(qū)域。在DBMS內(nèi)核實(shí)現(xiàn)加密,加密函數(shù)可以與DBMS內(nèi)部數(shù)據(jù)庫(kù)的訪問機(jī)制、權(quán)限控制、操縱機(jī)制等功能進(jìn)行有機(jī)結(jié)合。

目前大部分?jǐn)?shù)據(jù)庫(kù)廠商在其數(shù)據(jù)庫(kù)產(chǎn)品中提供加解密功能,如從Oracle 8開始,就提供DBMS-OBFUSCATION-TOOL-KIT的PI /SQI包,以實(shí)現(xiàn)對(duì)數(shù)據(jù)的加解密。0racle log開始支持DES、3DES、AES等加密算法,為用戶提供庫(kù)內(nèi)數(shù)據(jù)加密存儲(chǔ)手段。

庫(kù)內(nèi)加密方式的優(yōu)點(diǎn)是隱蔽性強(qiáng),加密手續(xù)整合到DBMS的功能中,封裝后的加密、解密方式對(duì)用戶及應(yīng)用系統(tǒng)實(shí)行了通明策略,與DBMS進(jìn)行了無(wú)縫對(duì)接。加密算法、加密粒度及加密
方式可以按照數(shù)據(jù)庫(kù)的特點(diǎn)進(jìn)行合理取舍。由于庫(kù)內(nèi)加密在DBMS的內(nèi)核進(jìn)行,庫(kù)內(nèi)加密對(duì)系統(tǒng)性能影響較大,除了要完成常規(guī)的功能外,還要對(duì)數(shù)據(jù)文件加密解密進(jìn)行處理,增加了數(shù)據(jù)庫(kù)服務(wù)器的負(fù)荷,因此需要選擇速度快性價(jià)比高的加解密的算法,不能為了加密和解密而犧牲系統(tǒng)性能。同時(shí),為了滿足加密粒度的需要,可以選擇加密的基本單位?;镜募用軉挝豢梢允菙?shù)據(jù)庫(kù)、表、記錄、字段、數(shù)據(jù)項(xiàng)等。庫(kù)內(nèi)加密還存在密鑰保管困難的問題,同時(shí)需要數(shù)據(jù)庫(kù)廠商的支持。

2、庫(kù)外加密

庫(kù)外加密是指加密、解密過程在DBMS外面進(jìn)行。DBMS所管理的是密文。加密、解密過程由客戶端或者專用服務(wù)器程序完成。如,在基于操作系統(tǒng)層的加密時(shí),可以利用管理文件的系統(tǒng)功能直接把存儲(chǔ)數(shù)據(jù)的文件實(shí)施加密。但基于操作系統(tǒng)的加密粒度是基于文件的,對(duì)數(shù)據(jù)庫(kù)中的表、記錄、字段無(wú)法控制加密。

庫(kù)外加密使數(shù)據(jù)庫(kù)服務(wù)器及DBMS的負(fù)載較少,密鑰和數(shù)據(jù)分開存放,網(wǎng)絡(luò)傳輸時(shí)可只傳輸密文。但庫(kù)外加密后的數(shù)據(jù)庫(kù)功能受限,加密后的數(shù)據(jù)無(wú)法正常索引,破壞完整性,使用約束規(guī)則無(wú)效,因此對(duì)于大型數(shù)據(jù)庫(kù)及管理系統(tǒng)而言,庫(kù)外加密喪失了原來(lái)數(shù)據(jù)庫(kù)提供的索引、約束規(guī)則等,是用戶不能接受的。

二、動(dòng)態(tài)變換加密原理

數(shù)據(jù)庫(kù)文件的加密、解密必須至少滿足性能及安全性的要求。加密解密過程不能過分繁鎖,不能占用太多資源,以免增加服務(wù)器的負(fù)擔(dān),從而影響性能。加密后的數(shù)據(jù)應(yīng)具有一定的安全性。

在對(duì)數(shù)據(jù)庫(kù)加密時(shí),可以有選擇性地對(duì)表內(nèi)部分關(guān)鍵字段進(jìn)行加密,其它字段內(nèi)容不變。動(dòng)態(tài)變換加密數(shù)據(jù)庫(kù)時(shí),只針對(duì)數(shù)據(jù)庫(kù)表的數(shù)值型字段加密。數(shù)據(jù)庫(kù)文件加密后,數(shù)據(jù)庫(kù)的數(shù)值型數(shù)據(jù)與未加密的數(shù)據(jù)相似,只是該數(shù)值已非真實(shí)數(shù)據(jù)。當(dāng)數(shù)據(jù)庫(kù)被入侵或數(shù)據(jù)庫(kù)整體被盜后,數(shù)據(jù)表能正常讀寫,使破壞者對(duì)數(shù)據(jù)庫(kù)已加密的事實(shí)不知情,即使知道數(shù)據(jù)庫(kù)已加密,也無(wú)法判斷數(shù)據(jù)的真實(shí)性,從而達(dá)到保密的目的。動(dòng)態(tài)變換加密技術(shù)僅能應(yīng)用于只要求加密數(shù)值型字段的環(huán)境,如IT經(jīng)濟(jì)類數(shù)據(jù)庫(kù),表內(nèi)的敏感數(shù)據(jù)一般是指數(shù)值型數(shù)據(jù),如單價(jià)、金額、數(shù)量、折扣等,其它字符型的貨物名稱、日期型的購(gòu)買日期等字段不屬于機(jī)密數(shù)據(jù),不參與加密。

假定表中m個(gè)可以公開而不必加密的字段(可以是字符型、數(shù)值型、日期型等),有n個(gè)需要加密的數(shù)值型字段,表中共有記錄s條。若所有字段都是要加密的數(shù)值字段,則設(shè)置一列自動(dòng)增長(zhǎng)的ID字段。

為了達(dá)到加密后數(shù)據(jù)能正常讀寫操作,僅對(duì)需要加密具有n個(gè)數(shù)值型的字段集N加密,由于要加密的字段有n個(gè),為了使每個(gè)字段每條記錄的密鑰不相同,即實(shí)行數(shù)據(jù)庫(kù)的元素級(jí)加密,本方法是從公開而不必加密且具有m個(gè)的字段M生成密鑰。

定義1 M={Mij},Mij表示第i條記錄第j個(gè)不必加密的字段明文值。

定義2N={Nii},Nij表示第i條記錄第j個(gè)需要加密的字段明文值。

定義3 K={Kij},Kij表示第i條記錄第j個(gè)加密的密匙,即Nij的對(duì)應(yīng)密鑰為Kij。

定義4 C={Cij},Cij表示第i條記錄第j個(gè)的對(duì)密文,即Nij的對(duì)應(yīng)密文為Cij。

由上述定義即有:

基于動(dòng)態(tài)變換技術(shù)的數(shù)據(jù)庫(kù)加密方法

稱為求密公式,利用Mij求出Kij所表示的密鑰。

式(2)稱為加密公式,在求得Cij后,用Cij改寫Nij的值即完成加密過程。

動(dòng)態(tài)變換技術(shù)在數(shù)據(jù)庫(kù)加密中的應(yīng)用

式(3)稱為解密公式,在知道密鑰、密文時(shí)通過f’可求出明文Nij。

動(dòng)態(tài)變換技術(shù)在數(shù)據(jù)庫(kù)加密中的應(yīng)用

為了能利用式(1)、式(2)、式(3)實(shí)施基于數(shù)據(jù)庫(kù)字段元素級(jí)的加密與解密,需要解決f、g、g'的算法問題。

1、密鑰的生成方法

基于數(shù)據(jù)庫(kù)的字段元素級(jí)加密就是以每條記錄的每個(gè)字段為基本單元進(jìn)行加密,這種加密方法具有最小的加密粒度,具有很好的靈活性和控制性,但各個(gè)字段的數(shù)據(jù)元素分別采用不同的密鑰加密,密鑰個(gè)數(shù)較多,即密鑰Kij=f(Mij)的個(gè)數(shù)為i×j,其數(shù)量巨大,若對(duì)每個(gè)密鑰進(jìn)行存儲(chǔ),必然會(huì)增大一倍以上的存儲(chǔ)空間,因此需要尋找一種算法,使其僅在加密、解密時(shí)才動(dòng)
態(tài)生成密鑰,既節(jié)省存儲(chǔ)空間,也增加安全性。

動(dòng)態(tài)生成密鑰的f應(yīng)滿足:①生成重復(fù)密鑰的概率趨于0,即使是相同明文但不在同一位置上的元素Mij,也應(yīng)生成出不同的密文;②生成的動(dòng)態(tài)密鑰要具有一定的復(fù)雜度。

對(duì)于Mij∈M,由于Mij1與Nij2不是一一對(duì)應(yīng)的,即j1與j2不一定相等,若1>j2,則令j2=(modj1);若j1<j2,則對(duì)j1重復(fù)填充j1,直至j1=j2。在j1= j2的情況下,Mij1與Nij2 一一對(duì)應(yīng),取Mij,Nij進(jìn)行運(yùn)算。

表中有s條記錄,在執(zhí)行時(shí)只要循環(huán)s次即可達(dá)到目的,故對(duì)表示第幾條記錄的i不必考察,只考察單條記錄即可。但是需要注意,i不是數(shù)據(jù)表的記錄號(hào),而是物理序列號(hào)(也稱物理記錄號(hào)),因?yàn)閿?shù)據(jù)表的普通記錄號(hào)是會(huì)附記錄的增加、刪除而變化,而數(shù)據(jù)表的物理序列號(hào)一經(jīng)存儲(chǔ)后,數(shù)據(jù)庫(kù)系統(tǒng)會(huì)分配一個(gè)永久物理號(hào),是不會(huì)變化的。如Oracle數(shù)據(jù)庫(kù)中可用RowID
關(guān)鍵字獲取,SQL Server可以設(shè)定自動(dòng)編號(hào)。

假定Mij中的i是已知值(在循環(huán)時(shí)已明確知道記錄號(hào)),則從Mij獲取密鑰源MK,使:

動(dòng)態(tài)變換技術(shù)在數(shù)據(jù)庫(kù)加密中的應(yīng)用

這時(shí)進(jìn)行了第一次變換,其中0是異或運(yùn)算符,Ri是擾動(dòng)系數(shù),擾動(dòng)系數(shù)R;由i、j、Mij,進(jìn)行按位運(yùn)算確定,R只需正向求出,無(wú)需求逆。接著進(jìn)行二次變換求所有動(dòng)態(tài)密鑰集Kij,得:

動(dòng)態(tài)變換技術(shù)在數(shù)據(jù)庫(kù)加密中的應(yīng)用

同理,Rj是擾動(dòng)系數(shù),擾動(dòng)系數(shù)Rj由i、j、Mij進(jìn)行邏輯與或運(yùn)算確定,Rj也只需正向求出,無(wú)需求逆。

2、加密算法和解密算法設(shè)計(jì)

已知Kij=f(Mij)及Nij,通過Cij=g(K,j,N,j)求Cij。此時(shí)關(guān)鍵在于確定g,使g算出的Cij還屬于正常的數(shù)值范圍,并且Cij相互之間無(wú)聯(lián)系,不能從一個(gè)密文推出另一個(gè)密文。

由于Nij是一個(gè)數(shù)值型數(shù)據(jù),且在一定的范圍內(nèi),假定合理范圍是在[-A,A]之間,則把K'ij=K,j( mod | A |),于是,Cij=K'ij+Nij為所求,這里不采用異或的原因是數(shù)值運(yùn)算,使其改寫
原值且無(wú)規(guī)律即達(dá)到加密目的。

由qj=K'ij+Nj得,Nii=g'(Kij,Cij)=Cij- K'ij= Cij -Kij(mod |A |),此為解密算法。

三、動(dòng)態(tài)變換技術(shù)在數(shù)據(jù)庫(kù)加密中的應(yīng)用

與密鑰協(xié)商技術(shù)相比,基于動(dòng)態(tài)變換的加密鑰的生成不必經(jīng)過復(fù)雜的運(yùn)算。動(dòng)態(tài)變換加密和解密方案中要求數(shù)據(jù)庫(kù)文件在加密后,不知情者能正常讀寫數(shù)據(jù)及相關(guān)的操作,但不清楚這是假
內(nèi)容,從而達(dá)到保密的目的。因此在具體的實(shí)現(xiàn)上,必須把數(shù)據(jù)庫(kù)文件加密程序、解密程序分別做成存儲(chǔ)過程或內(nèi)置類函數(shù),通過調(diào)用相應(yīng)的存儲(chǔ)過程或自定義函數(shù)對(duì)表內(nèi)數(shù)值型字段進(jìn)行加密及解密。數(shù)據(jù)庫(kù)的數(shù)據(jù)操縱語(yǔ)句為Insert、Update、Delete,查詢語(yǔ)句為Select;在執(zhí)行Insert、Update時(shí)運(yùn)行加密程序,即此時(shí)調(diào)用加密的函數(shù)即能在存儲(chǔ)數(shù)據(jù)前加密,Delete操作時(shí)不必加密,但作為條件獲取時(shí)可調(diào)用解密函數(shù)還原原值進(jìn)行判斷。在執(zhí)行查詢語(yǔ)句Select時(shí)需要調(diào)用解密函數(shù)進(jìn)行解密,使之得出的結(jié)果是真實(shí)有效的;如果在Select時(shí)不調(diào)用解密函數(shù),則得到的不是真實(shí)數(shù)據(jù)。

但是,動(dòng)態(tài)變換加密技術(shù)只負(fù)責(zé)對(duì)數(shù)據(jù)文件加密,無(wú)法阻止入侵者的入侵。入侵后,若對(duì)數(shù)據(jù)進(jìn)行了篡改,將會(huì)使數(shù)據(jù)失效,這與入侵者篡改未加密的數(shù)據(jù)的情況類似。

阻止入侵者篡改數(shù)據(jù)是無(wú)法做到的,但是若在數(shù)據(jù)表上增加一列原值校驗(yàn)字段,用于存放加密后該記錄所有字段的MD5值(也可提取其它摘要值或CRC碼),若入侵者篡改了某個(gè)值,則重新計(jì)算的MD5值將與存儲(chǔ)的值不一致,從而知道數(shù)據(jù)已被人篡改,若用CRC或海明碼甚至還可以對(duì)原值還原。

在加密后要注意更新MD5的值,可以直接把該功能寫人到加密函數(shù)中,把加密與保存MD5值進(jìn)行捆綁實(shí)現(xiàn)。

四、數(shù)據(jù)庫(kù)文件加密實(shí)驗(yàn)

選用SQL Server 2005為數(shù)據(jù)庫(kù)平臺(tái),以一個(gè)設(shè)備存貨表為例,按前面所述的方法進(jìn)行數(shù)據(jù)庫(kù)文件加密,加密前的數(shù)據(jù)表內(nèi)容如圖1所示。

動(dòng)態(tài)變換技術(shù)在數(shù)據(jù)庫(kù)加密中的應(yīng)用

在圖1中,假定字段sbbh(設(shè)備編號(hào))、sbmc(設(shè)備名稱)、ggxh(規(guī)格型號(hào))、dw(單位)的內(nèi)容可以公開,為數(shù)據(jù)集M,不必加密處理,字段dj(單價(jià))、sl(數(shù)量)是需要加密的內(nèi)容,為數(shù)據(jù)集N。

在數(shù)據(jù)庫(kù)內(nèi)部創(chuàng)建加密函數(shù)fun_jm,函數(shù)需接收兩個(gè)參數(shù),一個(gè)是數(shù)據(jù)集M,一個(gè)是被加密字段Nij。接收參數(shù)后,函數(shù)內(nèi)部對(duì)M進(jìn)行元素分拆,得到M“,i隨記錄號(hào)變化,j是元素序號(hào),此時(shí)利用式(1)、式(2)、式(3)按照第2節(jié)所述的原理實(shí)現(xiàn)。同理,解密函數(shù)fun_ujm也需接收上述兩參數(shù),按加密算法的逆過程操作一次即可。如對(duì)字段dj進(jìn)行加密時(shí)執(zhí)行[dbo].fun_jm
(“sbbh,sbmc,ggxh,dw”,dj),其中逗號(hào)是約定的元素分隔標(biāo)志,解密函數(shù)的調(diào)用方式為[ dbo].fun_ujm(“sbbh,sbmc,ggxh,dw”,dj)或[dbo].fun_ujm(“sbbh,sbmc,ggxh,dw”,sl),此時(shí)即返回dj或sl的原值。

經(jīng)加密后的數(shù)據(jù)表保存的結(jié)果如圖2所示,此時(shí)的dj、sl的值依賴于dj、sl的原值與所在記錄的sbbh、sbruc、ggxh、dw的內(nèi)容及其記錄號(hào)(物理號(hào)),無(wú)規(guī)律可循,其它未加密的字段內(nèi)容不變。

動(dòng)態(tài)變換技術(shù)在數(shù)據(jù)庫(kù)加密中的應(yīng)用

如果要更新dj、sl字段的內(nèi)容,必須先調(diào)用解密函數(shù)提取dj或sl字段的原值,按要求執(zhí)行運(yùn)算后再加密保存,它的調(diào)用要在同一表達(dá)式中進(jìn)行,如要對(duì)全部的dj提高100%,則執(zhí)行語(yǔ)句update表名set dj=[dbo].funjm(“sbbh, sbmc,ggxh,dw”,[dbo].fun_ujm(“sb-bh,sbmc,ggxh,dw”,“dj”)*(1+10%))即可。

小知識(shí)之密鑰協(xié)商

兩個(gè)或多個(gè)實(shí)體協(xié)商,共同建立會(huì)話密鑰,任何一個(gè)參與者均對(duì)結(jié)果產(chǎn)生影響,不需要任何可信的第三方(TTP)。