數(shù)據(jù)庫關(guān)鍵敏感字段如何分級(jí)別加密

將數(shù)據(jù)庫中關(guān)鍵敏感字段根據(jù)其安全需求分為不同級(jí)別,用對稱加密算法對關(guān)鍵敏感字段分級(jí)別加密,其數(shù)據(jù)密鑰采用橢圓曲線加密算法保護(hù)。該方案將對稱加密算法、橢圓曲線公鑰加密算法和單向函數(shù)有機(jī)結(jié)合,實(shí)現(xiàn)了用戶使用權(quán)限和關(guān)鍵敏感字段的安全級(jí)別的關(guān)聯(lián)。用該方案建立的加密數(shù)據(jù)庫,不僅可以保證敏感數(shù)據(jù)的機(jī)密性和完整性,而且節(jié)省大量存儲(chǔ)空間和支持分級(jí)別權(quán)限訪問,保證了數(shù)據(jù)庫的高效可用性。

一、數(shù)據(jù)庫加密方案

新方案由系統(tǒng)初始化,數(shù)據(jù)庫中數(shù)據(jù)關(guān)鍵字段加密、數(shù)據(jù)加密密鑰的安全存儲(chǔ)、數(shù)據(jù)加密字段的解密4個(gè)階段組成。

1、系統(tǒng)初始化

令E是Ep上的橢圓曲線,P是E(Fp)上的點(diǎn),設(shè)P的階是素?cái)?shù)n,則集合(P)=(00P,2P,3P,…,(n-l)P)是由P生成的橢圓曲線循環(huán)子群。素?cái)?shù)P,橢圓曲線方程E,點(diǎn)P和階n構(gòu)成公開參數(shù)組。用戶ui私鑰是在區(qū)間[l,n-l]內(nèi)隨機(jī)選擇的正整數(shù)d,相應(yīng)的公鑰是Qi=dP。并將橢圓曲線參數(shù)組(p,E,P,n)保存在數(shù)據(jù)庫里。

2、數(shù)據(jù)庫中數(shù)據(jù)關(guān)鍵字段的加密

令Data-term-z代表數(shù)據(jù)Data中每個(gè)記錄的第l個(gè)字段屬于敏感信息,需以密文保存在數(shù)據(jù)庫,使數(shù)據(jù)Data中每個(gè)記錄的第l個(gè)字段一般用戶是不可見的(即不能訪問的),只有達(dá)到級(jí)別的用戶才能訪問它?,F(xiàn)假設(shè)有一數(shù)據(jù)Data中的記錄有α個(gè)字段Data-term-lλ(λ=1,2,…,d)屬于敏感信息,其安全級(jí)別需求從高到低的次序分別為Data-term-l1,Data-term-l2,…,Data-term-lα。數(shù)據(jù)庫按如下方式保存數(shù)據(jù)Data:

(1)隨機(jī)選取ko∈{0,1k},計(jì)算

 

為字段Data-term-lλ的加密密鑰;

(2)用密鑰kλ加密,得到Data-term-lλ的密文CData-term-lλ=Ekλ(Data -term-lλ);

(3)將數(shù)據(jù)Data的敏感信息字段Data-term-lλ(λ=1,2,…,α)以密文CData-term-lλ保存在數(shù)據(jù)庫中,其余字段信息仍以明文保存。

3、數(shù)據(jù)庫數(shù)據(jù)加密密鑰的安全存儲(chǔ)

假若授權(quán)用戶uj,能訪問數(shù)據(jù)Data的加密字段的最高級(jí)別是Data-term-lη,即只能訪問加密字段Data-term-lη,…,Data-term-lα,其中1<η≤α。服務(wù)器端Ui按如下操作存儲(chǔ)data數(shù)據(jù)的字段加密密鑰kλ

(1)從系統(tǒng)公用文件中讀取Uj的身份標(biāo)識(shí)IDj所對應(yīng)的公鑰Qj和系統(tǒng)公共參數(shù)params;

(2)隨機(jī)均勻地選取r∈[l,n-l],利用私鑰Sj計(jì)算c1=rp和C2=kη+rQj;

(3)將密文c=(CI,G)與Data保存在同一數(shù)據(jù)庫中。

4、數(shù)據(jù)加密字段的解密

當(dāng)Uj想訪問數(shù)據(jù)Data的保密字段時(shí),首先從加密數(shù)據(jù)庫中獲取(C1,Q),然后進(jìn)行如下處理:

(1)利用用戶Uj的私鑰d,(C1,C2)和公共參數(shù)組,計(jì)算出解密密鑰k= C2-dC1;

(2)用k分別計(jì)算加密字段CData-term-lη,…,CData-term-lα的解密密鑰

 

其中η≤τ≤α;

(3)用密鑰kτ,分別解密數(shù)據(jù)Data的加密字段CData-term-lτ,得到該字段的明文Data-term-lτ,=Dkτ(CData - term -lτ),其中η≤τ≤α。

在上述方案中,授權(quán)用戶Uj的合法訪問區(qū)域是加密字段CData-term-lτ,其中η≤τ≤α。Uj不能訪問只有高安全級(jí)別授權(quán)用戶訪問的加密字段CData-term-lτ,l≤τ≤η-1。H2(.)是安全單向的Hash函數(shù),因此,uj根據(jù)kη從kη=H2(kη-1)求解kη-1是一個(gè)難問題。

二、數(shù)據(jù)庫關(guān)鍵敏感字段分級(jí)別加密方案的分析

本方案是基于橢圓曲線的離散對數(shù)問題和Hash函數(shù)的安全性假設(shè)的,其安全性和效率分析如下:

(1)可以確保多個(gè)授權(quán)用戶對同一個(gè)加密字段進(jìn)行共享訪問,并且是分級(jí)別的訪問,只有高一層的用戶級(jí)別才可以對下一層的訪問。uj根據(jù)kη從kη=H2(kη-1)求解kη-1,是一個(gè)難問題。只有達(dá)到級(jí)別的用戶才能訪問它,并且可以訪問其級(jí)別以下的加密字段。采用對稱加密算法對關(guān)鍵字段加密,這樣授權(quán)用戶可以對加密字段進(jìn)行快速的解密,不影響系統(tǒng)運(yùn)行速度。因此只要通過自己的私鑰對密鑰的密文解密得到加密字段的密鑰,用心分別計(jì)算加密字段CData-term-lη,…,CData-term-lα的解密密鑰

 

其中η≤τ≤α,從而最終可以高效訪問明文數(shù)據(jù),達(dá)到對關(guān)鍵字段分級(jí)別訪問的目的,并防止越級(jí)訪問。

(2)密鑰的存儲(chǔ)安全。因?yàn)槊艽a系統(tǒng)的安全依賴于密鑰的安全,所以最好確保訪問密鑰的實(shí)體數(shù)量保持最少。通過限制密鑰在使用范圍為單一目的,可以減少需要訪問密鑰的實(shí)體數(shù)量,在數(shù)據(jù)庫加密系統(tǒng)中,這個(gè)要求的具體體現(xiàn)是密鑰只能用于單一的數(shù)據(jù)庫。本文通過kη得到同一級(jí)別中其他敏感字段的密鑰,保證了一字一密,同時(shí)kη用橢圓曲線加密算法加密,攻擊者面臨橢圓曲線對數(shù)問題,從而可以防止非法用戶去隨便加解密數(shù)據(jù)庫的數(shù)據(jù),保證了數(shù)據(jù)的完整性。

(3)可以抵抗已知密文攻擊。已知密文攻擊是以大量使用同一密鑰的數(shù)據(jù)作為基礎(chǔ)來進(jìn)行的,如果使用多個(gè)不同的密鑰對數(shù)據(jù)進(jìn)行加密,每個(gè)密鑰加密的數(shù)據(jù)量就會(huì)比較少,從而限制了這種攻擊的有效性。

(4)節(jié)省存儲(chǔ)空間。與當(dāng)前通用的密鑰長度1024比特的RSA加密方案相比,本文方案使用橢圓曲線加密算法達(dá)到與其同等的安全性,密鑰長度只需160比特。每個(gè)用戶的密鑰長度僅約為RSA方案的15.7%。此外,本文通過kη得到同一級(jí)別中其他敏感字段的密鑰,保證了一字一密,同時(shí)數(shù)據(jù)庫只要保存用戶的一個(gè)密鑰,極大地節(jié)省了存儲(chǔ)空間;且在系統(tǒng)加載密鑰時(shí),可以減少處理負(fù)荷,使得加解密速度快。

在奔騰處理器740(1.73 GHz)、內(nèi)存256 MB的SONY計(jì)算機(jī)上,使用數(shù)據(jù)庫Oracle9i,對數(shù)據(jù)設(shè)置6個(gè)密級(jí)I={1,2,3,4,5,6},筆者在局域網(wǎng)內(nèi)進(jìn)行了實(shí)驗(yàn)。與根據(jù)需要在各級(jí)為用戶設(shè)置不同密鑰相比,本文方案為每個(gè)用戶只保存一個(gè)密鑰的設(shè)計(jì)方式,在500個(gè)用戶使用的環(huán)境下,密鑰存儲(chǔ)空間節(jié)約了大約52.85%,但最高權(quán)限為i∈I級(jí)的用戶獲取第2級(jí)的解密數(shù)據(jù)是他獲取第(l一1)級(jí)的解密數(shù)據(jù)所需時(shí)間的
1.27倍左右,其中i∈I滿足1≤I≤i。這是因?yàn)榇蠖鄶?shù)普通用戶只需1個(gè)或2個(gè)級(jí)別的數(shù)據(jù)訪問權(quán)限,具有各個(gè)級(jí)別數(shù)據(jù)訪問權(quán)限的用戶十分少。在實(shí)驗(yàn)中,設(shè)置最高訪問級(jí)別為1—6級(jí)的用戶分別占總用戶數(shù)的60%,20%,10%,6%,3%和1%。而具有最高級(jí)別為i∈I的用戶在獲取第f級(jí)加密數(shù)據(jù)的解密密鑰時(shí),比獲取第(l-1)級(jí)加密數(shù)據(jù)的解密密鑰要多計(jì)算1次Hash函數(shù),這需要耗費(fèi)更多的時(shí)間。隨著高級(jí)別權(quán)限的用戶數(shù)目的增多,本文方案在節(jié)約密鑰存儲(chǔ)空間方面更有優(yōu)勢;而使用更高性能CPU的計(jì)算機(jī)作數(shù)據(jù)庫的服務(wù)器,將加快Hash函數(shù)的計(jì)算,提高系統(tǒng)的效率。

小知識(shí)之Hash函數(shù)

Hash,一般翻譯做"散列",也有直接音譯為"哈希"的,就是把任意長度的輸入(又叫做預(yù)映射, pre-image),通過散列算法,變換成固定長度的輸出,該輸出就是散列值。這種轉(zhuǎn)換是一種壓縮映射,也就是,散列值的空間通常遠(yuǎn)小于輸入的空間,不同的輸入可能會(huì)散列成相同的輸出,而不可能從散列值來唯一的確定輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數(shù)。