數(shù)據(jù)庫(kù)加密系統(tǒng)之ECDH與Rijndael加密算法應(yīng)用

為降低數(shù)據(jù)庫(kù)明文泄露的風(fēng)險(xiǎn),我們提出一種基于ECDH(Elliptic Curvc Diffie-Hellman)密鑰交換協(xié)議和Rijndael加密算法、將私鑰獨(dú)立于DBMS之外的數(shù)據(jù)庫(kù)加密方案。使用用戶可根據(jù)自己數(shù)據(jù)安全性需求,靈活選擇密鑰長(zhǎng)度參數(shù)。

一、ECDH協(xié)議與Rijndael加密算法

1、ECDH密鑰交換協(xié)議

ECDH是基于ECC(Elliptic Curve Cryptosystems,橢圓曲線密碼體制)的DH( Diffie-Hellman)密鑰交換算法。交換雙方可以在不共享任何秘密的情況下協(xié)商出一個(gè)密鑰。該算法可以使A/ice、Bob雙方在不共享任何秘密的情況下,協(xié)商出一個(gè)密鑰,且繼承了ECC密鑰長(zhǎng)度短、計(jì)算速度快和安全性能好等突出優(yōu)點(diǎn)。在Alice、Bob共享橢圓曲線E、大素?cái)?shù)階N、基點(diǎn)G參數(shù)的前提下,密鑰交換過(guò)程如下:

(1)Alice生成隨機(jī)整數(shù)a<N(私鑰),計(jì)算出公鑰A=axG。Bob生成隨機(jī)整數(shù)b<N(私鑰),計(jì)算出公鑰B=bxG。

(2)Alice與Bob雙方分別將公鑰A、B互相傳遞給對(duì)方。以此為基礎(chǔ),雙方分別接收到對(duì)方發(fā)送的A或B,并對(duì)算式Q=bxA、Q'= ax曰分別進(jìn)行計(jì)算。

經(jīng)過(guò)交換和結(jié)合,Alice、Bob得到:

Q=bxA =bx(axG)=(bxa)xG=(axb)xG=ax(bxG) =axB=Q’即共享密鑰Q。

設(shè)計(jì)方案將公鑰口保存到DB,用戶保存私鑰a.經(jīng)ECDH計(jì)算產(chǎn)生協(xié)議密鑰Q=axB,Q再經(jīng)轉(zhuǎn)換后,生成數(shù)據(jù)密鑰,由此避免了由數(shù)據(jù)庫(kù)泄露數(shù)據(jù)密鑰的風(fēng)險(xiǎn)。

2、Rijndael加密算法

Rijndael是一種在高級(jí)加密標(biāo)準(zhǔn)(AES)中使用的基本加密算法。

同時(shí)Rijndael還是一種對(duì)稱分組加密算法,具有分組長(zhǎng)度和密鑰長(zhǎng)度可變的靈活特性,即它可用128 bit、192 bit或256 bit的密鑰對(duì)以128 bit、192 bit或256 bit為分組的數(shù)據(jù)加密。該加密算法與許多分組加密算法一樣,用“輪”作為基本的變換單位,輪數(shù)(最小為10)隨著分組長(zhǎng)度和密鑰長(zhǎng)度的增加而增加。輪變換包括SubBytes0、ShiftRows0,MixColumns0及AddRoundKey0這4個(gè)不同的變換,而這些變換都是可逆的,以方便解密。

除此之外,Riindael加密算法在不同環(huán)境下具有良好的適應(yīng)性,內(nèi)存需求低,抗多種攻擊性能優(yōu)秀,這也是本文選擇Riindael加密算法加密數(shù)據(jù)庫(kù)數(shù)據(jù)的主要原因之一。

3、初始化向量

為了隱藏明文的統(tǒng)計(jì)特性和數(shù)據(jù)格式等關(guān)鍵參數(shù)以提高數(shù)據(jù)的安全性,.Net平臺(tái)提供了5種分組對(duì)稱加密算法模式:

(1)電子密碼AC(Electronic Code Book. ECB);

(2)密碼塊鏈(Cipher Block Chain,CBC);

(3)輸出反饋(Output Feedback, OFB);

(4)密碼反饋(Cipher Feedback,CFB);

(5)密碼文本竊用(Cipber Text Stealing,CTS)。

除了模式(1)之外,其他4種模式都使用了初始化向量N來(lái)實(shí)現(xiàn)反饋這一安全性增強(qiáng)機(jī)制。即用一個(gè)密鑰和一個(gè)N對(duì)數(shù)據(jù)塊進(jìn)行加密轉(zhuǎn)換,再用N將上一個(gè)加密塊的信息混合到下一個(gè)加密塊,從而保證了密文的隱蔽性。

顯然,密文的生成與解密不僅要依賴密鑰,同時(shí)對(duì)N也有一定的依賴性,以CFB模式為例,實(shí)驗(yàn)證明了該加密模式具有良好的N敏感性。

二、數(shù)據(jù)庫(kù)加密系統(tǒng)結(jié)構(gòu)

為了避免由數(shù)據(jù)庫(kù)保管密鑰導(dǎo)致泄漏的潛在危險(xiǎn),數(shù)據(jù)庫(kù)加密設(shè)計(jì)方案采用了在DBMS外層實(shí)現(xiàn)的策略,由功能相互獨(dú)立的加密字典管理模塊和數(shù)據(jù)庫(kù)加密和解密引擎2個(gè)構(gòu)件組成。

1、加密字典管理模塊

加密字典用于記錄用戶對(duì)數(shù)據(jù)加密的相關(guān)信息,它通過(guò)界面接口,為用戶提供加密數(shù)據(jù)選項(xiàng)、加密操作及初始化向量等交互服務(wù)。設(shè)計(jì)方案中的加密字典包括tb_EncryptFields和tb_PublicKey2個(gè)表。

加密字典定義步驟如下:

(1)驗(yàn)證用戶合法性:系統(tǒng)接收到用戶輸入口令pwd后,用較安全的雜湊函數(shù)SHA256計(jì)算出256bit的N=SHA256(pwd),截取H的游64 bit,計(jì)算subHi=H.Substrirg(0,64)。與表1的字段sha.Pwd進(jìn)行比較,若邏輯值為1,則為合法用戶,否則,返回登錄頁(yè)面。

(2)分配公鑰:獲取表2的uld字段,并自動(dòng)為其分配系統(tǒng)公鑰pK。

(3)定義密鑰和IV長(zhǎng)度:依據(jù)rdd的權(quán)限,為每個(gè)可加密字段沒置密鑰長(zhǎng)度kL及IV長(zhǎng)度ivl,并存入表2。

為保證數(shù)據(jù)的安全,可擻據(jù)需要適時(shí)更新用戶口令并配置加密字典。更新婀須進(jìn)行備份并解密數(shù)據(jù)庫(kù),配置完成后,按照新的機(jī)制對(duì)數(shù)據(jù)庫(kù)實(shí)施加密操作。

2、數(shù)據(jù)庫(kù)加密引擎和解密引擎

數(shù)據(jù)庫(kù)加密和解密引擎是數(shù)據(jù)庫(kù)加密系統(tǒng)的核心構(gòu)件之一,其功能住子完成數(shù)據(jù)的加密和解密處理。

(1)加密

1)用戶登錄成功后,系統(tǒng)俄取片的后192 bit,計(jì)算subH2=H.Subsn-ing( 64,192),獲取用戶私鑰sK=SHA256(subliz)。

2)從表1獲取公鑰pK,用ECDH計(jì)算出該用戶加密數(shù)據(jù)的中問密鑰cK=ECDH(sK,pK)。

3)選取需加密字段fN,從表2中獲取該字段的加密密鑰挺度kL及IV長(zhǎng)度ivL等相關(guān)信息。

4)利用K= SHA256(c.K).Substring(0,k/)IV =cK.Siibstring(256 - ivL,ivL)計(jì)算加密該字段的密鑰K和初始化始化向域IV。

5)用Rijndael對(duì)字段JN進(jìn)行加密,得到密文C=En_RijndaeI(fN、K,lv)。

(2)解密

1)一4)與加密前4步相同:計(jì)算出需解密字段fN的密鑰K和切始化向量IV。

5)用Rijndael對(duì)字段JN進(jìn)行解密,得到明文De_ Rijndael(fn,K,IV)。

三、數(shù)據(jù)庫(kù)加密系統(tǒng)之ECDH與Rijndael加密算法應(yīng)用

基于.Net平臺(tái)的實(shí)驗(yàn)環(huán)境設(shè)置為Visual Siudi0 2008,SQL Server 2005;實(shí)驗(yàn)用機(jī)為Pen 3.0 GHz CPU,l GB內(nèi)存,操作系統(tǒng)為WindoWs XP;實(shí)驗(yàn)用的DB由DBGen自動(dòng)生成,大小為500 MB。

1、加密效果與密鑰空間

以加密數(shù)據(jù)庫(kù)中的關(guān)鍵字段qst_coruent為例,如圖4明文數(shù)據(jù)所示。

設(shè)定十進(jìn)制192 bit的密鑰:

key= {82, 107, 98, 52, 106, 118. 85, 121, 47, 121, 101, 55,67, 100, 55, 107, 56, 57, 81, 81, 103, 81. 61, 61}以及128 bit初始化向量:

IV={70, 70, 248, 142, 245, 50, 255, 39, 187,9,222, 228,243, 212, 16, 129}

方案中的密鑰與用戶髓錄口令、系統(tǒng)公鑰及選擇的密鑰長(zhǎng)度相關(guān)。加密效果則與密鑰和初始化向量相關(guān)。該沒計(jì)方.案的密鑰空問依賴于Rijndael算法密鑰的長(zhǎng)度,即密鑰空問為2128、7192和2256,證明此密鑰空間足以抵抗窮舉攻擊。以192 bit密鑰為例,若采用每秒1千萬(wàn)億次的“天河一號(hào)"計(jì)算機(jī)進(jìn)行理淪耗時(shí)汁算,耗時(shí)約:

f= 2192/(lx 1030 x3 600x 24x365)=1.99 X1020千萬(wàn)億年。

同時(shí),Rijndael算法固有的特性及初始向撾的引入,使設(shè)計(jì)方案具有較強(qiáng)的抗差分攻出和統(tǒng)計(jì)攻擊能力。

2、密鑰敏感性

密鑰敏感性是指明文加密密鑰的微小變化會(huì)得到2種完全不同的密文,如果解密密鑰發(fā)生微小改變,會(huì)導(dǎo)致無(wú)法恢復(fù)出原始明文。以圖4的原始明文為例,驗(yàn)證本文方案密鑰的敏感性,在初始化向量不變的前提下,將加密密鑰的末位數(shù)l修改為2,即:

key={82, 107, 98, 52, 106, 118, 85, 121, 47, 121, 101, 55,67, 100,55, 107, 56, 57, 81, 81, 103, 81, 61, 62}

實(shí)驗(yàn)結(jié)果說(shuō)明,本文方案具有良好的密鑰敏感性。

3、加密效率分析

在忽略實(shí)驗(yàn)環(huán)境差異的條件下,加密過(guò)程所耗費(fèi)的時(shí)間越短,說(shuō)明該方案的效率越高。本文對(duì)密鑰長(zhǎng)度分別為128 bit、192 bit和256 bit時(shí),100條、500條、l 000條、5 000條、10 000條和20 000條記錄的批量加解密耗時(shí)進(jìn)行統(tǒng)計(jì),結(jié)果如表3所示,從中可以看出,密鑰長(zhǎng)度對(duì)加密和解密耗時(shí)影響非常小。當(dāng)密鑰長(zhǎng)度為256 bit時(shí),對(duì)20 000條記錄的加解密耗時(shí)分別是28.170 s和28.809 s,這一結(jié)果說(shuō)明在保證數(shù)據(jù)安全的前提下,系統(tǒng)時(shí)間資源的支出是可以接受的。顯然,加解密耗時(shí)與計(jì)算速度呈反比關(guān)系,機(jī)器配置越高,耗時(shí)越少。

該加密系統(tǒng)對(duì)各種數(shù)據(jù)庫(kù)的加密具有普適性,無(wú)須對(duì)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)進(jìn)行修改,即可實(shí)施加密操作。實(shí)驗(yàn)結(jié)果證明,本文設(shè)計(jì)的系統(tǒng)具有足夠大的密鑰空間、良好的密鑰敏感性和較高的加密效率。

小知識(shí)之?dāng)?shù)據(jù)庫(kù)加密系統(tǒng)數(shù)據(jù)庫(kù)加密系統(tǒng)是一款基于透明加密技術(shù)的數(shù)據(jù)庫(kù)防泄漏系統(tǒng),該產(chǎn)品能夠?qū)崿F(xiàn)對(duì)數(shù)據(jù)庫(kù)中的敏感數(shù)據(jù)加密存儲(chǔ)、訪問控制增強(qiáng)、應(yīng)用訪問安全、安全審計(jì)以及三權(quán)分立等功能。