數(shù)據(jù)庫字段分級的加密方案

數(shù)據(jù)庫字段分級的加密是對數(shù)據(jù)中的關鍵敏感字段分級別加密,用橢圓曲線加密算法加密數(shù)據(jù)密鑰,密鑰的管理是一種密鑰分離的安全理念,即要求一個密鑰只能用于一個單一的目標,其目的是盡可能減少訪問某一密鑰的實體的數(shù)量。

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

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

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

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

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

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

(1)隨機選取ko∈{0,1}k,計算數(shù)據(jù)庫字段分級的加密方案為字段Data-term-lλ的加密密鑰;

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

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

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

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

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

(2)隨機均勻地選取r∈[1,n-1],利用私鑰Sj計算C1= rP和q =kη+rQj;

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

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

當uj想訪問數(shù)據(jù)Data的保密字段時,首先從加密數(shù)據(jù)庫文件中獲取(C1,C2),然后進行如下處理:

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

(2)用kη分別計算加密字段CData-term-lη,…,CData-term- α的解密密鑰足,數(shù)據(jù)庫字段分級的加密方案,其中η≤τ≤α;

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

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

二、數(shù)據(jù)庫字段分級的加密方案分析

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

(1)可以確保多個授權用戶對同一個加密字段進行共享訪問,并且是分級別的訪問,只有高一層的用戶級別才可以對下一層的訪問。Uj根據(jù)足,從kη=H2(kη-1)求解kη-1,是一個難問題。只有達到級別的用戶才能訪問它,并且可以訪問其級別以下的加密字段。采用對稱加密算法對關鍵字段加密,這樣授權用戶可以對加密字段進行快速的解密,不影響系統(tǒng)運行速度。因此只要通過自己的私鑰對密鑰的密文解密得到加密字段的密鑰,用k。分別計算加密字段CData-term-lη,…,CData-term-lα的解密密鑰數(shù)據(jù)庫字段分級的加密方案,其中η≤τ≤α。從而最終可以高效訪問明文數(shù)據(jù),達到對關鍵字段分級別訪問的目的,并防止越級訪問。

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

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

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

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

小知識之橢圓曲線

在數(shù)學上,橢圓曲線為一代數(shù)曲線,被下列式子定義:Y的平方=X的三次方+AX+B其是無奇點的;亦即,其圖形沒有尖點或自相交。 若Y的平方=P(X),其中P為任一沒有重根的三次或四次多項式,然后可得到一虧格1的無奇點平面曲線,其通常亦被稱為橢圓曲線。更一般化地,一虧格1的代數(shù)曲線,如兩個三維二次曲面相交,即稱為橢圓曲線。