數(shù)據(jù)庫中字符數(shù)據(jù)的模糊匹配加密方法

對于一些重要部門或敏感領(lǐng)域的數(shù)據(jù)庫,存在一個(gè)嚴(yán)重的不安全因素,即原始數(shù)據(jù)以可讀的形式存儲(chǔ)在數(shù)據(jù)庫中,這使得對于一些計(jì)算機(jī)內(nèi)行或內(nèi)部人員來說,可以輕易繞過用戶標(biāo)識(shí)和鑒定、存取控制、視圖、審計(jì)等基本安全技術(shù)。因此,非常有必要對數(shù)據(jù)庫中存儲(chǔ)的重要數(shù)據(jù)或敏感數(shù)據(jù)進(jìn)行加密處理,在數(shù)據(jù)受到真正的威脅前設(shè)置最后一道防御屏障。但是加密后大大影響了系統(tǒng)原有性能,使得大型數(shù)據(jù)庫加密在實(shí)際查詢應(yīng)用中基本不能實(shí)現(xiàn)。為此我們借鑒針對數(shù)值型數(shù)據(jù)的保序加密方法,提出針對字符數(shù)據(jù)的模糊匹配的加密方法。

一、針對數(shù)值型數(shù)據(jù)的保序加密方法

OPES( Order Preserving EncryptionScheme)是一種對于數(shù)值型數(shù)據(jù)保存順序的加密方法,它允許比較操作直接應(yīng)用在加密數(shù)據(jù)上,不用解密操作數(shù)。這樣,等式和范圍查詢以及MAX,MIN和COUNT查詢都可以直接應(yīng)用于加密數(shù)據(jù)。同樣的,GROUP BY和ORDERBY操作也能直接執(zhí)行。只有對一組數(shù)進(jìn)行SUM和AVG操作時(shí),才需要解碼數(shù)據(jù)值。而且加密后不影響系統(tǒng)的原有功能比如對數(shù)據(jù)庫的查詢、檢索、修改、更新。

OPES基本性質(zhì):

1、應(yīng)用OPES對加密數(shù)據(jù)查詢處理的結(jié)果是可靠而且完整的。既不存在假命中,也不會(huì)遺漏任何答案元組。避免了在代價(jià)昂貴和復(fù)雜的后處理過程中過濾無關(guān)元組。

2、OPES能夠很好地處理更新??梢孕薷臄?shù)據(jù)庫中列中的值或者可以在列中插入新值,不需要改變其他加密值。

3、OPES允許數(shù)據(jù)庫在加密表上建立索引,并且能夠很容易地整合到現(xiàn)有數(shù)據(jù)庫系統(tǒng)中。因?yàn)樵谠O(shè)計(jì)時(shí),它就運(yùn)用了像B樹這樣的索引結(jié)構(gòu)。數(shù)據(jù)庫被加密這對應(yīng)用程序是透明的。

三、針對字符數(shù)據(jù)的模糊匹配加密方法

1、針對字符數(shù)據(jù)的模糊匹配加密方法實(shí)例

在數(shù)據(jù)庫中檢索和查詢時(shí),對字符串最常見的操作是在使用like操作符時(shí)的模式匹配或是等式選擇。

例如:

例1:“找出大客戶名單中以‘J’開頭的所有客戶的姓名”

Select name from Customers

where name like 'J%’

例2:查詢姓名為‘Smith’的大客戶的聯(lián)系方式

Select telephone from Customers

where name ='Smith’

查詢數(shù)值型密文數(shù)據(jù)時(shí),可以通過保持原有明文數(shù)據(jù)順序來提高密文查詢響應(yīng)速度。查詢字符型密文數(shù)據(jù)時(shí),就可以通過模糊排序來保持明文數(shù)據(jù)的大致順序。

2、模糊匹配加密方法FMES

根據(jù)數(shù)據(jù)庫中字符數(shù)據(jù)的這種查詢方式,為了保證查詢檢索的高效率,本文提出針對字符數(shù)據(jù)的模糊匹配的兩步加密方法:

首先,提取排序列字符串的第一個(gè)字符進(jìn)行排序加密;

其次,對排序列的每個(gè)數(shù)據(jù)項(xiàng)的剩余字符進(jìn)行仿射密碼加密。

假設(shè)排序列全部字符集為P,分為兩部分P1,P2。

(1)第一步:字符保序加密

提取加密列的字符串的第一個(gè)字符,組成一個(gè)明文字符集P1。按照OPES的方法保存這個(gè)字符集的原有順序并加密。事先給定一個(gè)目標(biāo)分布的樣本值集合,通過四個(gè)步驟,把輸入字符集轉(zhuǎn)換成密文字符集。

a、轉(zhuǎn)換:把所有輸入字符轉(zhuǎn)換成其ASCII值。

b、建模:根據(jù)ASCII值,把輸入分布和目標(biāo)分布制作成分段的線性樣條的模型。使得相同或相近的字符按照ASCII值劃分入相鄰的存儲(chǔ)桶中,用最小描述長度決定存儲(chǔ)桶的數(shù)目。

c、平鋪:明文字符集P根據(jù)特定的映射函數(shù)被轉(zhuǎn)換成一個(gè)“平面”字符集F,這樣F中的值均勻分布。

d、鏡像:由明文字符集和目標(biāo)樣本值求得一個(gè)匹配因子L,平面字符集F根據(jù)L被鏡像轉(zhuǎn)換成密碼字符集C。

表示為:

數(shù)據(jù)庫中字符數(shù)據(jù)的模糊匹配加密方法

這種單調(diào)性變化使得ASCII值能夠保存順序,從而使每個(gè)字符之間可以模糊排序。密鑰是映射函數(shù)的三個(gè)參數(shù)。

(2)第二步:仿射密碼加密

仿射密碼也稱為線性替換密碼,是多碼替代的特殊情形。本方法中采用的是Hill密碼,它是廣義仿射密碼的一個(gè)特例,其基本思想是將n個(gè)明文字母通過線性變換將它們轉(zhuǎn)換為n個(gè)密文字母,解密時(shí)只需做一次逆變換即可。

設(shè)明文M= m1,m2….,mn∈Zqn,密文C= (c1,c2….,cn∈Zqn;,密鑰為Zq上的n×n階可逆方陣K=(kij)n×n其中方程組為:

數(shù)據(jù)庫中字符數(shù)據(jù)的模糊匹配加密方法

則Hill密碼處理為:

加密:C= Ek(m)=MK modq

解密:M= Dk(m)=CK-1 modq

實(shí)際中的Hill密碼處理是采用解方程式的方法把明文變成密文。先把明文字符集P2按數(shù)據(jù)項(xiàng)分組,第一個(gè)字符相同的字符串分為一組,不同的字符分為不同組,這樣無論有多少元組,整個(gè)數(shù)據(jù)庫最多分成26個(gè)方程式,再建立字母與數(shù)字的對應(yīng)關(guān)系來求解。本方法中字母與數(shù)字不采用順序排列,而是采用亂序表,以避免正向猜測攻擊,增加其安全性。密鑰是變換矩陣和亂序表。

(3)運(yùn)用FMES實(shí)現(xiàn)數(shù)據(jù)庫常規(guī)操作

在使用like操作符進(jìn)行模式匹配時(shí),第一步就可以保證結(jié)果的正確性。

在進(jìn)行等式選擇操作時(shí),先把查詢語句中的明文字符串進(jìn)行FMES兩步加密,然后和密文匹配。插入字符串時(shí),只需要保證明文字符串處在第一個(gè)字符相同的一組中即可。進(jìn)行刪除、更新操作中的第二步時(shí),先判斷除去第一個(gè)字符之后的剩余字符集p2處于26個(gè)組中的哪一個(gè)組,如果組中不只一個(gè)字符,即p2長度小于組中字符集個(gè)數(shù),那么以上方程組中某些項(xiàng)即為O,簡化了矩陣運(yùn)算。

3、必要性

本方法沒有采取對整個(gè)字符集整體排序加密,而是把字符串分為兩部分,只對每個(gè)字符串的第一個(gè)字符運(yùn)用OPES,大大降低了時(shí)空復(fù)雜度。而且兩步加密的FMES有以下兩個(gè)優(yōu)點(diǎn):

首先,兩步加密加大了非法用戶分析攻擊的難度,提高了算法安全性。

其次,第一步排序加密保證了相當(dāng)快的加密、解密響應(yīng)速度,保證了系統(tǒng)性能。

允許各種操作直接應(yīng)用在加密數(shù)據(jù)上,不用解密操作數(shù)。而且能夠很好得處理更新,不需要改變其后的加密值。第二步仿射密碼可以保證密碼空間的線性替代,其明文空間、密鑰空間和密文空間中的有限字符集都是一個(gè)線性映射的、而且是線性有序的。運(yùn)行速度快,并且有較好的抗頻率分析的功能。更重要的是,第二步加密后數(shù)據(jù)量沒有增加,數(shù)據(jù)長度不變,使得剩余字符能和第一個(gè)字符一一對應(yīng)。總之,兩步加密相輔相成、連接緊密,既保證了加密安全性,又保證了系統(tǒng)運(yùn)行性能。

4、安全性分析

一個(gè)加密模式的安全性在很大程度上取決于這個(gè)密碼系統(tǒng)是否能抵抗各種攻擊。

一般地,Hill密碼的強(qiáng)度在于完全隱藏了單字母的頻率,所以具有較好的抗頻率分析的功能。

對于敏感的字符型數(shù)據(jù),攻擊者沒必要根據(jù)加密值c來決定確切值p,它只需要獲得p的精密估計(jì)就可以破壞數(shù)據(jù)。例如在某數(shù)據(jù)庫Customers中,攻擊者也許不關(guān)心準(zhǔn)確的zipcode(郵政編碼),而只需要判斷這個(gè)zipcode是否在某段zipcode范圍之內(nèi),就能推導(dǎo)某客戶所在省份,從而暴露客戶的一系列具體信息。特別是字符串長度較短時(shí),字符串長度越短,越容易估測取值范圍,從而越容易暴露。尤其第一步(字符保序加密)中,取值是單個(gè)字符,分布斜度大,取值范圍很明顯為a—z,A~Z。因此很容易遭到統(tǒng)計(jì)分析破譯。對于一個(gè)單字符p,如果攻擊者有c%的可能性能夠估計(jì)到字符p位于區(qū)間[p1,p2]中,那么區(qū)間寬度(p2-p1)/區(qū)域?qū)挾?p)就稱為C%可信度上的暴露估計(jì)。這樣,攻擊者可以利用重復(fù)數(shù)據(jù)猜測區(qū)域分布。這個(gè)問題的解決方法是運(yùn)用多名碼方法,將一個(gè)給定明文值映射到一個(gè)加密值集合。

基本思想是修改平鋪階段。其中,每個(gè)存儲(chǔ)桶應(yīng)該映射到和存儲(chǔ)桶中點(diǎn)數(shù)成正比例的空間,在這個(gè)約束下計(jì)算每個(gè)存儲(chǔ)桶的比例系數(shù)時(shí),把重復(fù)數(shù)據(jù)都包括在點(diǎn)數(shù)內(nèi)。這樣,重復(fù)數(shù)據(jù)聚集的區(qū)域被成比例擴(kuò)散,這個(gè)區(qū)域內(nèi)相鄰明文值就被映射到平面數(shù)據(jù)庫中相對較遠(yuǎn)的位置。

例如,明文值p映射到平面空間中的f,p+1映射到f'。加密p時(shí),可以隨機(jī)選擇一個(gè)區(qū)間[f,f']內(nèi)的值。這樣,p的加密值會(huì)均勻分布在區(qū)間[f,f']內(nèi)。把線性樣條產(chǎn)生的桶內(nèi)均勻性和比例系數(shù)產(chǎn)生的桶間均勻性結(jié)合起來,即使明文分布P1有重復(fù)數(shù)據(jù)的偏差分布,結(jié)果平鋪分布仍然是均勻的。這也是對OPES的改進(jìn)——在平鋪階段暴露出重復(fù)數(shù)據(jù)。利用這個(gè)擴(kuò)展,算法中可以通過轉(zhuǎn)換謂詞來選擇加密數(shù)據(jù)。

例如,選擇操作中把字符等式查詢轉(zhuǎn)換為范圍謂詞查詢。例如:

數(shù)據(jù)庫中字符數(shù)據(jù)的模糊匹配加密方法

這些過程對用戶來說是透明的。

5、密鑰管理

(1)原理

密碼學(xué)中常用的一個(gè)原則:在最壞的情況下要保證“秘密全部存在于密鑰之中”。密鑰的保密和安全管理就顯得尤為重要。本文的加密方法中,數(shù)據(jù)庫加密算法和密鑰第一次加密確定后,就不再更改,所以生存周期長,容易給攻擊者以可乘之機(jī)。兩個(gè)步驟加密的密鑰都是需要絕對保密的。所以需要采取公鑰加密系統(tǒng)對數(shù)據(jù)庫密鑰進(jìn)行二次加密。

數(shù)據(jù)庫系統(tǒng)的密鑰管理比網(wǎng)絡(luò)系統(tǒng)的管理更復(fù)雜,并且具有它自己獨(dú)特的特點(diǎn),即數(shù)據(jù)庫文件加密密鑰的時(shí)間不變和用戶不變性。到目前為止,討論比較多的是集中密鑰管理和子密鑰數(shù)據(jù)庫文件加密的密鑰管理。

集中密鑰管理中,若用戶想訪問數(shù)據(jù)庫數(shù)據(jù),必須輸入用戶標(biāo)識(shí)符(ID),由安全核實(shí)機(jī)構(gòu)對其核實(shí),看是否有訪問權(quán)。若有權(quán)訪問,則提供給相應(yīng)的數(shù)據(jù)加密密鑰,對所需數(shù)據(jù)解密后,供用戶使用。

這種密鑰管理方式,用戶使用方便、靈活,但由于這些密鑰都由安全管理人員控制,權(quán)利過分集中,同時(shí)在用戶遠(yuǎn)程訪問時(shí),數(shù)據(jù)必須要由網(wǎng)絡(luò)加密保護(hù)。本方法中改進(jìn)了這種方式,實(shí)行密鑰分散管理,即按照數(shù)據(jù)秘密等級把密鑰K分量化K1,K2,. - - -.,Kn,比如本方法中分為K1,K2,排序列字符串加密密鑰為K1,其余字符串常規(guī)加密密鑰為K2,K2還可以根據(jù)應(yīng)用,提出防欺詐的分散密鑰管理方法。

(2)密文數(shù)據(jù)庫簡化模型

假設(shè)數(shù)據(jù)庫模型簡化如下:數(shù)據(jù)庫D={d1,d2….,dn},d1代表安全級別相同、用同一數(shù)據(jù)加密密鑰加密的一類數(shù)據(jù),其安全級別記為j1。根據(jù)加密粒度的選擇,相應(yīng)的數(shù)據(jù)密鑰集KD={kd1,kd2…,,kdn),這樣密文數(shù)據(jù)庫可表示為C={(ci,ji)|ci=E(kdi,di),i=1,2,…,n)。

本方法中數(shù)據(jù)庫D={d1,d2},相應(yīng)的數(shù)據(jù)密鑰集K={K1,K2},密文數(shù)據(jù)庫可表示為C={(ci,ji)| ci=E(Ki,di),i=1,2)。以下的例子中,簡稱數(shù)據(jù)庫服務(wù)器管理員為A,用戶為B。

數(shù)據(jù)庫文件加密后,往往需要對不伺的用戶授以不同的使用權(quán)利。本方法中使用權(quán)限訪問表解決這一問題。權(quán)限訪問表以矩陣形式存儲(chǔ)。

當(dāng)且僅當(dāng)用戶i能夠訪問安全級別為1的數(shù)據(jù)類dj時(shí),表中對應(yīng)的元素就是密鑰認(rèn)證結(jié)果KA (Key Authentication)。這種方式類似于多級安全數(shù)據(jù)庫中的強(qiáng)制訪問控制策略。

(3)防欺詐的分散密鑰管理方法

數(shù)據(jù)庫服務(wù)器管理員A接到用戶B的請求,查詢權(quán)限訪問表,以確定用戶的訪問級別是K1還是K2。圖1、圖2、圖3中均以K來代表K1或K2,說明某用戶的密文訪問過程。

首先,利用單向散列函數(shù)進(jìn)行密鑰認(rèn)證,見圖1。如果和已知散列值相同,就證明了存儲(chǔ)在服務(wù)器上的密鑰的完整性和正確性。實(shí)際傳輸過程中的密鑰不是數(shù)據(jù)庫的真實(shí)密鑰K,而是K的散列碼值KA,這樣一旦在網(wǎng)絡(luò)傳輸過程中泄露KA或被篡改E(KA),攻擊者也不會(huì)直接得到數(shù)據(jù)庫的真實(shí)密鑰,進(jìn)一步提高了安全性。其次,通過雙向身份認(rèn)證,結(jié)合數(shù)據(jù)庫授權(quán)機(jī)制,把相應(yīng)密鑰分發(fā)給有權(quán)訪問相應(yīng)數(shù)據(jù)的用戶,即管理員A把密鑰KA加密后傳送給用戶B,見圖2。用戶B收到被加密的密鑰E(KA)后解密,見圖3。

數(shù)據(jù)庫中字符數(shù)據(jù)的模糊匹配加密方法

其中運(yùn)用公鑰加密系統(tǒng),使得用戶B相信確實(shí)是管理員A發(fā)送的密鑰,而且這個(gè)密鑰只有用戶B才能解密,不會(huì)發(fā)送到無關(guān)人員處。這就起到了防欺詐的作用,保證了把完整、真實(shí)的密鑰安全分配給授權(quán)用戶。

由于通用數(shù)據(jù)庫和安全數(shù)據(jù)庫設(shè)計(jì)理念和算法的不同,在數(shù)據(jù)庫系統(tǒng)之上加入B級安全機(jī)制會(huì)導(dǎo)致查詢性能大大降低。所以對加密數(shù)據(jù)進(jìn)行查詢處理還需要更加成熟的方法。本文提出的一種針對字符數(shù)據(jù)的模糊匹配的兩步加密算法,保證了敏感數(shù)據(jù)的安全性和完整性,也解決了系統(tǒng)性能問題,有很大的實(shí)際應(yīng)用前景。

小知識(shí)之Hill密碼

希爾密碼(Hill Password)是運(yùn)用基本矩陣論原理的替換密碼,由Lester S. Hill在1929年發(fā)明。每個(gè)字母當(dāng)作26進(jìn)制數(shù)字:A=0, B=1, C=2... 一串字母當(dāng)成n維向量,跟一個(gè)n×n的矩陣相乘,再將得出的結(jié)果模26。注意用作加密的矩陣(即密匙)在\mathbb_^n必須是可逆的,否則就不可能譯碼。只有矩陣的行列式和26互質(zhì),才是可逆的。