舒 濤
(四川省民族學(xué)院)
對(duì)于數(shù)據(jù)庫(kù)系統(tǒng)來(lái)說(shuō),數(shù)據(jù)存儲(chǔ)的安全性是必須解決的問(wèn)題,以防止數(shù)據(jù)的泄露、更改和破壞.當(dāng)前主流的大型數(shù)據(jù)庫(kù)系統(tǒng)如SQL Server、Oracle、DB2、Sybase、MySQL 等數(shù)據(jù)庫(kù)都提供了如身份識(shí)別、存取控制、隔離控制、數(shù)據(jù)庫(kù)審計(jì)等多種基于DBMS(Database Management System,數(shù)據(jù)庫(kù)管理系統(tǒng))的安全措施,但這些安全措施仍然難以有效阻止非法用戶通過(guò)竊取數(shù)據(jù)庫(kù)登錄密碼或利用操作系統(tǒng)和數(shù)據(jù)庫(kù)系統(tǒng)漏洞來(lái)繞過(guò)這些安全措施直接讀取或篡改數(shù)據(jù)庫(kù)中的內(nèi)容.為了防止用戶非法訪問(wèn)數(shù)據(jù)庫(kù)內(nèi)容,必須對(duì)數(shù)據(jù)庫(kù)中存儲(chǔ)的重要數(shù)據(jù)進(jìn)行加密保護(hù).
對(duì)于數(shù)據(jù)庫(kù)的加密主要有以下幾個(gè)層次[1]:
(1)在操作系統(tǒng)層加密.由于DBMS是在操作系統(tǒng)之上,操作系統(tǒng)是將數(shù)據(jù)庫(kù)文件作為普通文件進(jìn)行處理的,操作系統(tǒng)無(wú)法識(shí)別數(shù)據(jù)庫(kù)文件的數(shù)據(jù)結(jié)構(gòu),也就無(wú)法合理地利用自身的加密功能對(duì)數(shù)據(jù)庫(kù)庫(kù)文件進(jìn)行加密.因此,目前在操作系統(tǒng)層對(duì)數(shù)據(jù)庫(kù)文件進(jìn)行加密還很難實(shí)現(xiàn).
(2)在DBMS內(nèi)核中進(jìn)行加密.該方法在對(duì)數(shù)據(jù)庫(kù)文件進(jìn)行物理存取之前來(lái)完成加密工作.這種加密方式的優(yōu)點(diǎn)是功能強(qiáng)并且不會(huì)影響DBMS的功能,可以實(shí)現(xiàn)DBMS和加密功能之間的整合.其缺點(diǎn):一是加密和解密運(yùn)算均在服務(wù)器端進(jìn)行,加重了數(shù)據(jù)庫(kù)服務(wù)器的負(fù)擔(dān),二是由于加密是在DBMS內(nèi)核中實(shí)現(xiàn),必須數(shù)據(jù)庫(kù)廠商提供技術(shù)支持并取得DBMS內(nèi)核的相關(guān)資料,但實(shí)際上要做到這些并不容易.
(3)在DBMS外層實(shí)現(xiàn)加密.該方法是將在DBMS外層加上一個(gè)數(shù)據(jù)庫(kù)加密系統(tǒng),所有對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)先由這個(gè)系統(tǒng)進(jìn)行處理.該方法的優(yōu)點(diǎn)是不涉及DBMS內(nèi)核,并且在數(shù)據(jù)傳輸時(shí)是以密文進(jìn)行傳輸?shù)?缺點(diǎn)是會(huì)影響數(shù)據(jù)庫(kù)系統(tǒng)的功能和運(yùn)行效率.
針對(duì)以上在各個(gè)層次對(duì)數(shù)據(jù)庫(kù)進(jìn)行加密的優(yōu)缺點(diǎn),筆者采用不涉及數(shù)據(jù)庫(kù)系統(tǒng)本身,而只對(duì)記錄內(nèi)容進(jìn)行加密的方法.
在當(dāng)前信息安全領(lǐng)域用于數(shù)據(jù)加密的實(shí)用算法,按加密和解密是否使用同一密鑰或解密密鑰可由加密密鑰計(jì)算得出,可分為至對(duì)稱密鑰算法(Symmetric Algorithm)和非對(duì)稱密鑰算法(Asymmetric Algorithm)或稱公鑰算法(Public-Key Algorithm).
對(duì)稱密鑰算法的特點(diǎn)是加密和解密使用同一密鑰或者解密密鑰可由加密密鑰經(jīng)過(guò)計(jì)算得到.對(duì)稱密鑰算法根據(jù)加密方式不同分為序列算法和分組算法兩類.序列算法單獨(dú)加密每個(gè)位,它是通過(guò)將密鑰序列中每個(gè)位與每個(gè)明文位相加實(shí)現(xiàn)的,而分組算法則是每次使用相同的密鑰加密整個(gè)明文位分組來(lái)實(shí)現(xiàn).現(xiàn)在典型的對(duì)稱密鑰算法均是采用分組算法,如IDEA、DES、3DES、AES、RC5、RC6 等.
非對(duì)稱密鑰算法也稱公鑰算法,其特點(diǎn)是用作加密的密鑰與用作解密的密鑰不同,而且解密密鑰也不能通過(guò)加密密鑰計(jì)算得到.在典型的公開密鑰算法RSA中,數(shù)據(jù)即可以用公鑰加密用私鑰進(jìn)行解密,也可以用私鑰加密用公鑰進(jìn)行解密.
考慮到數(shù)據(jù)庫(kù)中數(shù)據(jù)量較大,數(shù)據(jù)訪問(wèn)也很頻繁,綜合考慮各種加密方法的安全性、加解密效率等多種因素,數(shù)據(jù)庫(kù)內(nèi)容加密宜采用對(duì)稱密鑰算法進(jìn)行加密,在本文中采用AES算法.
AES[2](Advanced Encryption Standard,高級(jí)加密標(biāo)準(zhǔn))是由美國(guó)國(guó)家標(biāo)準(zhǔn)和技術(shù)研究院(NIST)從1997年1月開始向全世界公開征集的用于代替DES(Data Encryption Standard,數(shù)據(jù)加密標(biāo)準(zhǔn))的數(shù)據(jù)加密標(biāo)準(zhǔn),并在2002年5月正式成為新的數(shù)據(jù)加密標(biāo)準(zhǔn).它選擇了由比利時(shí)科學(xué)家Joan Daemen和Vincent Rijmen提出的Rijndael算法作為加密算法.該算法是一種數(shù)據(jù)塊長(zhǎng)度和密鑰長(zhǎng)度均可進(jìn)行迭代分組的分組加密算法,密鑰長(zhǎng)度和數(shù)據(jù)分組長(zhǎng)度可分別為128、192、256位,而標(biāo)準(zhǔn)的AES密鑰長(zhǎng)度為128位.AES相對(duì)于DES有很強(qiáng)的加密強(qiáng)度,采用128位密鑰的AES是采用56位密鑰的DES的1021倍,且當(dāng)前尚未出現(xiàn)針對(duì)AES的有效破解方法.
AES的加密流程主要由輪密鑰加(Addroundkey)、字 節(jié) 置 換 (ByteSub)、行 移 動(dòng)(ShiftRow)、列混合(MixColumn)這四個(gè)基本的操作完成,其步驟是:首先將明文映射到一個(gè)4×4字節(jié)的狀態(tài)矩陣(State),并進(jìn)行初始密鑰加運(yùn)算;然后進(jìn)行 Nr次輪運(yùn)算,各輪都將進(jìn)行ByteSub、ShiftRow、MixColumn、Addroundkey 這 4個(gè)基本操作,但在第Nr輪不做MixColumn;最后將State中的明文映射為密文 .解密過(guò)程與加密過(guò)程類似,主要區(qū)別有:使用密鑰序列的順序不同、置換盒不同、行移動(dòng)方向不同、列混合系數(shù)不同,以及每輪變換中函數(shù)的使用順序不同.加密與解密流程如圖1所示.
AES算法主要由輪密鑰加(Addroundkey)、字節(jié)置換(ByteSub)、行移動(dòng)(ShiftRow)、列混合(MixColumn)四個(gè)基本的操作組成.
(1)字節(jié)置換(ByteSub).字節(jié)置換是一種非線形變換,該置換包含一個(gè)作用在狀態(tài)字節(jié)上的S-盒.S-盒置換是一個(gè)雙向映射,即256個(gè)可能的輸入元素都與一個(gè)輸出元素一一對(duì)應(yīng).這個(gè)屬性允許我們唯一地逆轉(zhuǎn)S-盒,這也是解密操作所需要的.在軟件實(shí)現(xiàn)中,S-盒通常使用一個(gè)擁有固定項(xiàng)的、256位乘8位的查找表來(lái)實(shí)現(xiàn).
(2)行移動(dòng)(ShiftRow).行移變換循環(huán)往復(fù)地將狀態(tài)矩陣的每一行的字節(jié)按如下方式循環(huán)移動(dòng):第二行向右移動(dòng)三個(gè)字節(jié),將第三行向右移動(dòng)兩個(gè)字節(jié),將第四行向右移動(dòng)一個(gè)字節(jié).在行移變換中,狀態(tài)矩陣的第一行保持不變.行移動(dòng)和列混合相互影響,經(jīng)過(guò)多輪變換后密碼信息將非常的混亂,增加了AES的擴(kuò)散性.
(3)列混合(MixColumn).該操作是一個(gè)線性變換,它混淆了狀態(tài)矩陣的第一列.由于每個(gè)輸入字節(jié)都影響了四個(gè)輸出字節(jié),列混合操作是AES中的主要擴(kuò)散元素,它與行移動(dòng)操作組合使得三輪以后,狀態(tài)矩陣的每個(gè)字節(jié)都依賴于所有16個(gè)明文字節(jié)成為可能.
(4)輪密鑰加(Addroundkey).該操作是通過(guò)輸入16字節(jié)的當(dāng)前狀態(tài)矩陣和長(zhǎng)度為128位的子密鑰,生成一個(gè)密鑰調(diào)度表.通過(guò)密鑰調(diào)度表中的前4行對(duì)狀態(tài)矩陣進(jìn)行按字節(jié)的XOR(異或)操作.
根據(jù)上述的加解密流程,下面采用偽Object Pascal語(yǔ)言對(duì)算法進(jìn)行描述.
數(shù)據(jù)庫(kù)管理系統(tǒng)要完成對(duì)數(shù)據(jù)庫(kù)文件的管理和使用,必須要能夠正確識(shí)別部分?jǐn)?shù)據(jù),因此,在對(duì)數(shù)據(jù)庫(kù)加密內(nèi)容進(jìn)行加密時(shí),不能對(duì)所有數(shù)據(jù)進(jìn)行加密.不能進(jìn)行加密的字段主要是以下三類:(1)索引字段;(2)表與表之間用于進(jìn)行關(guān)聯(lián)的字段;(3)具有主鍵約束和外鍵約束的字段.
數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行加密以后,數(shù)據(jù)庫(kù)管理系統(tǒng)的一些功能會(huì)受到限制甚至根本無(wú)法使用.受影響的功能主要有:(1)不能實(shí)現(xiàn)數(shù)據(jù)約束.(2)Select語(yǔ)句中的排序、統(tǒng)計(jì)類語(yǔ)句將不起作用.(3)數(shù)據(jù)庫(kù)管理系統(tǒng)中提供的系統(tǒng)函數(shù)無(wú)法對(duì)數(shù)據(jù)進(jìn)行加密處理.(4)一些數(shù)據(jù)庫(kù)管理工具中的開發(fā)功能將受到限制.
為了盡量減小數(shù)據(jù)加密后對(duì)數(shù)據(jù)管理的影響,針對(duì)上述受影響的功能,可采用一些措施進(jìn)行處理:
(1)解決不能實(shí)現(xiàn)數(shù)據(jù)約束的方法.增加一張數(shù)據(jù)表將已加密的字段的數(shù)據(jù)類型存放在該表中,再將這些已經(jīng)加密字段的類型都改成變長(zhǎng)的字符類型,在給查詢時(shí)再進(jìn)行恢復(fù).
(2)解決SQL語(yǔ)句、系統(tǒng)函數(shù)、開發(fā)功能受限的方法.在數(shù)據(jù)操作前先建立一張局部臨時(shí)表,然后將加密后的數(shù)據(jù)進(jìn)行解密后存儲(chǔ)到該臨時(shí)表中.以后對(duì)數(shù)據(jù)的操作都在這張臨時(shí)表中進(jìn)行,操作完成后應(yīng)將臨時(shí)表及時(shí)刪除,以免造成數(shù)據(jù)泄密.
數(shù)據(jù)庫(kù)安全、操作系統(tǒng)安全、網(wǎng)絡(luò)安全共同組成了當(dāng)今信息安全的核心.數(shù)據(jù)庫(kù)內(nèi)容加密能夠有效地保證數(shù)據(jù)的安全,即使非法用戶竊取了數(shù)據(jù),也難以得到所需的信息.另外,數(shù)據(jù)庫(kù)內(nèi)容加密后數(shù)據(jù)庫(kù)管理員也無(wú)法看到明文,從而大大提高了數(shù)據(jù)的安全性.本文在分析數(shù)據(jù)庫(kù)加密的層次、加密算法的基礎(chǔ)上提出了采用AES對(duì)數(shù)據(jù)庫(kù)內(nèi)容進(jìn)行加密的方法來(lái)提高數(shù)據(jù)庫(kù)的安全,并對(duì)數(shù)據(jù)庫(kù)內(nèi)容加密后對(duì)數(shù)據(jù)庫(kù)管理的影響進(jìn)行了分析并給出了解決方法.
[1] 趙曉峰.幾種數(shù)據(jù)庫(kù)加密方法的研究與比較[J].計(jì)算機(jī)技術(shù)與發(fā)展,2007(2):219-222.
[2] Christof Paar,Jan Pelzl.深入淺出密碼學(xué):常用加密技術(shù)原理與應(yīng)用[M].北京:清華大學(xué)出版社,2012.
[3] 魏嘉銀.多功能AES加密與解密軟件的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)與數(shù)字工程,2011(6):93-97.
[4] 陳鐵英,陳華,劉瑜.基于三層次的數(shù)據(jù)庫(kù)加密應(yīng)用系統(tǒng)[J].華中科技大學(xué)學(xué)報(bào)(自然科學(xué)版),2005(7):41-43,46.
[5] 弟宇鳴,陳榮樺,左廣霞.基于AES算法的加密模塊設(shè)計(jì)[J]. 電子設(shè)計(jì)工程,2013(2):53-55.