葉小艷
(廣州大學(xué)華軟軟件學(xué)院 網(wǎng)絡(luò)技術(shù)系,廣東 廣州 510990)
個(gè)人電腦的信息安全,側(cè)重于個(gè)人計(jì)算機(jī)內(nèi)部的信息管理。對(duì)重要文件進(jìn)行加密,是常用的信息管理策略。因此,運(yùn)用有效的信息加密策略,對(duì)個(gè)人電腦的安全具有重要的意義。傳統(tǒng)的文件加密方法一般有兩種[1]:一種是利用應(yīng)用軟件本身所帶的加密功能給文件加密,例如Word、Excel、Access、WPS、PDF文件都有自帶的加密功能。這種加密方法容易操作,是常用的文件加密方法。但它的缺點(diǎn)是只能針對(duì)部分格式的文件進(jìn)行加密解密。另一種是利用專門軟件的加密功能進(jìn)行加密。例如使用WinZip、WinRaR以及腳本編程對(duì)文件(夾)進(jìn)行加密。這類加密方法采用的是單向加密方法,加密速度顯然較慢,使用過(guò)程比較麻煩。
無(wú)論是用應(yīng)用軟件本身所帶的加密功能給文件加密,還是利用專門軟件的加密功能進(jìn)行加密,它們采取的都是基于單一模式加密算法的文件保護(hù)方案。這使得文件的保密性以及數(shù)據(jù)的完整性得不到很好地保護(hù)。另外大多數(shù)文件加密軟件只支持本地加密和本地解密。例如,文件夾加密超級(jí)大師只允許用戶在本地進(jìn)行加密、解密操作來(lái)防止別人盜取加密信息。當(dāng)加密數(shù)據(jù)必須轉(zhuǎn)移到別的計(jì)算機(jī)上進(jìn)行解密操作時(shí),解密操作將不會(huì)成功。
為了提高數(shù)據(jù)的保密性和完整性,最大限度地防止惡意用戶攻擊或用戶的錯(cuò)誤操作,提出一種基于AES算法和HASH認(rèn)證相結(jié)合的文件加密機(jī)制。在該機(jī)制中,對(duì)于需要加密的文件,加密軟件用文件流讀取的方式讀取文件,同時(shí)使用HASH認(rèn)證,并用AES算法進(jìn)行加密,密鑰使用即時(shí)生成策略,以用戶名、硬盤序列號(hào)和SALT生成的SALT值作為參數(shù)進(jìn)行保存,使得加密文件不僅能很好地保證文件的機(jī)密性和完整性,而且能夠在異地進(jìn)行解密,而不影響其安全性[2-6]。
AES算法是一種對(duì)稱密鑰加密體制算法,又稱Rijndael加密算法,是一種安全高效的加密算法[7]。這種加密體制中信息的發(fā)送方和接受方用同一個(gè)密鑰去加密和解密數(shù)據(jù),運(yùn)用了寬軌跡策略的設(shè)計(jì)策略,針對(duì)差分密碼分析和線性密碼分析原理提出的算法優(yōu)化。Rijndael是一種迭代分組算法,采用了可變的分組長(zhǎng)度和密鑰長(zhǎng)度。為了滿足AES算法的要求,對(duì)分組長(zhǎng)度和密鑰長(zhǎng)度進(jìn)行了限制,分別為:分組長(zhǎng)度128 bit,密鑰長(zhǎng)度128 bit/192 bit/256 bit,相應(yīng)的輪數(shù)為10/12/14[8]。
HASH認(rèn)證是利用HASH函數(shù)的消息認(rèn)證,就是將任意長(zhǎng)度的消息壓縮到某一固定長(zhǎng)度的消息摘要的函數(shù)進(jìn)行認(rèn)證,為數(shù)據(jù)的快速存取提供了一種方法,或者說(shuō)通過(guò)一種算法建立鍵值與真實(shí)值之間的對(duì)應(yīng)關(guān)系[9]。因?yàn)槊恳粋€(gè)真實(shí)值只能有一個(gè)鍵值,而一個(gè)鍵值可以對(duì)應(yīng)多個(gè)真實(shí)值,因此通過(guò)鍵值與真實(shí)值對(duì)應(yīng)的關(guān)系快速地在數(shù)組等條件中存取數(shù)據(jù)。HASH認(rèn)證不僅能夠提供口令相互認(rèn)證,而且克服了傳統(tǒng)單一模式加密算法的弱點(diǎn),有效地保護(hù)文件信息,并能有效防止他方攻擊,能很好地加強(qiáng)文件加密的安全性與提高解密的效率。
1.3.1 文件加密過(guò)程
文件加密的過(guò)程實(shí)際上就是把明文轉(zhuǎn)換為密文的過(guò)程。文件加密不但要保證文件的機(jī)密性,還需要保證文件的完整性。而保證數(shù)據(jù)完整的有效性方法就是使用消息認(rèn)證。AES算法和HASH認(rèn)證相結(jié)合的文件加密過(guò)程如下所述。
該加密方法的基本思想是改變?cè)次募?nèi)容,進(jìn)行混合加密。為此用二進(jìn)制方式讀取源文件,然后采用HASH認(rèn)證技術(shù)。假定通信雙方為A和B,當(dāng)A有要發(fā)送B的報(bào)文時(shí),計(jì)算該報(bào)文的散列值,散列值將作為消息摘要。由于散列值是輸入消息的函數(shù)值,只要輸入消息有任何改變,就會(huì)導(dǎo)致得到不同的散列值[10]。例如采用SHA-256算法,SHA-256算法輸入的是264-1位數(shù)據(jù),輸出的消息摘要是256位。然后使用Rijndael算法進(jìn)行加密,用加密后的數(shù)據(jù)覆蓋源文件,以達(dá)到加密和消息認(rèn)證的功能。
當(dāng)源文件加密后,消息認(rèn)證會(huì)對(duì)信息的完整性和真實(shí)性進(jìn)行驗(yàn)證,要求發(fā)送方A和接收方B共享一個(gè)秘密值S,發(fā)送方生成消息M和秘密值S的散列值,然后與消息M一起發(fā)送給對(duì)方[11],即:A→B:M‖[H(M‖S)];接收方B可以按照發(fā)送方相同的處理辦法生成消息M和秘密值S的散列值,兩者進(jìn)行比較,從而實(shí)現(xiàn)驗(yàn)證。該方法中秘密值S并不參與傳遞。因此,可以保證攻擊者無(wú)法偽造。然而,要使用加密算法確保數(shù)據(jù)的機(jī)密性,還需把加密機(jī)制與認(rèn)證機(jī)制相混合。Rijndael算法與HASH認(rèn)證混合加密過(guò)程模型如圖1所示。
圖1 混合加密模型
1.3.2 文件解密過(guò)程
文件解密包括基于本地和基于異地的兩種環(huán)境的解密。
(1)基于本地的文件解密。
本地文件解密,實(shí)際上是文件加密的逆過(guò)程。
如圖2所示,解密可以簡(jiǎn)單地看作密文轉(zhuǎn)化為明文的過(guò)程。
圖2 解密過(guò)程
在解密的過(guò)程中,要讀取附在加密文件中的SALT值、當(dāng)前硬盤序列號(hào)的X、Y值以及當(dāng)前用戶名,流程如圖3所示。
通過(guò)Rijndael算法與HASH認(rèn)證混合運(yùn)算得到256位的即時(shí)密鑰[12]。對(duì)加密文件數(shù)據(jù)進(jìn)行解密后,便得到了HASH函數(shù)認(rèn)證后的源文件數(shù)據(jù)了。然后分離HASH認(rèn)證部分和源文件的數(shù)據(jù),對(duì)源文件數(shù)據(jù)進(jìn)行完整性驗(yàn)證操作。生成HASH函數(shù)散列值后與HASH認(rèn)證的散列值相比較,便可判斷數(shù)據(jù)的完整性。最后,刪除文件名、SALT值、X、Y值。
圖3 本地解密流程
(2)基于異地的文件解密。
異地文件解密,顧名思義就是在非本地計(jì)算機(jī)上對(duì)加密數(shù)據(jù)進(jìn)行解密。
異地文件解密流程如圖4所示。
圖4 異地文件解密流程
①把用戶名和硬盤序列號(hào)簡(jiǎn)單地看作兩個(gè)8階矩陣,其中的元素為十六進(jìn)制數(shù)(0-F),這樣,一個(gè)矩陣就可以表示32字節(jié)的數(shù)據(jù),如果使用ASCII碼,則可以表示32個(gè)字母或數(shù)字(用戶名和硬盤序列號(hào)不會(huì)超過(guò)32個(gè)字節(jié))。其中,用戶名矩陣為A,硬盤序列號(hào)矩陣為B。當(dāng)用戶名和硬盤序列號(hào)的數(shù)據(jù)不足32位時(shí),就要進(jìn)行填充。填充的方法是先填充比特最高位F,其余填充0。填充完畢后,兩個(gè)矩陣分別存有256位的數(shù)據(jù)。
②根據(jù)SALT值、用戶名以及硬盤序列號(hào)得出一個(gè)256位的密鑰。在文件異地解密的過(guò)程中,因?yàn)橛脖P序列號(hào)是未知的,所以混合解密的算法與混合加密算法有所不同。
硬盤序列號(hào)矩陣的實(shí)對(duì)稱矩陣B1、B2可以用λ1、X和λ2、Y(λ1、X和λ2、Y分別是B1、B2對(duì)應(yīng)的最小特征值和對(duì)應(yīng)特征向量)代替,且B1、B2是不能由λ1、X和λ2、Y反推得到的[13]。保存λ1、X和λ2、Y值,便可以代替矩陣B。對(duì)λ1、X和λ2、Y進(jìn)行處理,便可以代替對(duì)B1、B2進(jìn)行處理[14]。從而得到異地文件解密的算法。
以用戶名0640109129,硬盤序列號(hào)081005FB0B00LGCM3SNA為例。
將用戶名轉(zhuǎn)化成ASCII碼的十六進(jìn)制表示:
3 0 3 6 3 4 3 0 3 1 3 0 3 9 3 1 3 2 3 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
將硬盤序列號(hào)轉(zhuǎn)化成ASCII碼的十六進(jìn)制表示:
3 0 3 8 3 1 3 0 3 0 3 5 4 6 4 2 3 0 4 2 3 0 3 0 4 C 4 7 4 3 4 D 3 3 5 3 4 E 4 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
得到:
K=
加密過(guò)程:(1)分解B矩陣,得到B1、B2:
分別計(jì)算B1、B2的λ1、X值和λ2、Y值(文中使用了athematica 5.0計(jì)算)。解得B1的特征值有:37.67863723027871(取最大特征值)。其對(duì)應(yīng)的特征向量為(X值):
{0.11768585809982075`,0.1074119768921271`,
0.1355670682574105`,0.13484618706555201`,
0.4214799748600844`,0.38710584297166695`,
0.28900995565292276`,0.7259667516656944`}
B2的特征值有:39.66680261555876(取最大特征值),其對(duì)應(yīng)的特征向量為(Y值):
{0.2050783476568194`,0.09100674266886734`,
0.17354467785099853`,0.27472793463327216`,
0.3906151655916963`,0.44295236831364776`,
0.24892415015479563`,0.6582683420290661`}
(2)計(jì)算出:
AC={{149,87,131,108,145,187,92,111},{122,112,83,70,91,170,97,117},{155,54,119,112,181,203,62,73},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}}
A1={{4,7,3,12,1,11,12,15},{10,13,3,6,11,10,1,5},{11,6,4,0,5,11,14,9},{0,0,0,13,0,0,0,0},{0,0,0,0,10,0,0,0},{0,0,0,0,0,5,0,0},{0,0,0,0,0,0,3,0},{0,0,0,0,0,0,0,13}}
解密過(guò)程:分為本地解密和異地解密兩種情況。
(1)本地解密狀態(tài)。
A1B1(B2Y)T={{6 830.46,3 031.12,5 780.18,9 150.25,13 010.1,14 753.2,8 290.81,21 924.7},{4 970.09,2 205.55,4 205.86,6 658.05,9 466.58,10 735,6 032.69,15 953.2},{5 954.44,2 642.38,5 038.86,7 976.71,11 341.5,12 861.1,7 227.5,19 112.8},{537.309,238.439,454.69,719.792,1 023.42,1 160.54,652.186,1 724.68},{1 291.87,573.288,1 093.23,1 730.62,2 460.64,2 790.34,1 568.07,4 146.7},{593.256,263.267,502.034,794.74,1 129.98,1 281.38,720.094,1 904.25},{265.752,117.932,224.889,356.008,506.181,574.002,322.57,853.02},{2 892.69,1 283.68,2 447.9,3 875.12,5 509.75,6 247.98,3 511.15,9 285.08}}
(2)異地解密狀態(tài)。
A1λ1X(λ2Y)T={{6 830.46,3 031.12,5 780.18,9 150.25,13 010.1,14 753.2,8 290.81,21 924.7},{4 970.09,2 205.55,4 205.86,6 658.05,9 466.58,10 735,6 032.69,15 953.2},{5 954.44,2 642.38,5 038.86,7 976.71,11 341.5,12 861.1,7 227.5,19 112.8},{537.309,238.439,454.69,719.792,1 023.42,1 160.54,652.186,1 724.68},{1 291.87,573.288,1 093.23,1 730.62,2 460.64,2 790.34,1 568.07,4 146.7},{593.256,263.267,502.034,794.74,1 129.98,1 281.38,720.094,1 904.25},{265.752,117.932,224.889,356.008,506.181,574.002,322.57,853.02},{2 892.69,1 283.68,2 447.9,3 875.12,5 509.75,6 247.98,3 511.15,9 285.08}}
由以上計(jì)算結(jié)果可得知A1B1(B2Y)T的值和A1λ1X(λ2Y)T的值相等。
經(jīng)過(guò)十六輪運(yùn)算,得到結(jié)果為:
A16={{11,1,12,13,13,14,2,7},{3,1,5,8,0,2,15,3},{12,4,12,6,11,2,7,5},{7,1,1,12,5,5,5,3},{9,10,13,12,1,3,12,2},{10,0,9,10,14,10,11,4},{3,10,12,11,2,15,0,8},{1,15,11,10,14,5,4,13}}
A1XORA16={{8,1,15,11,14,10,1,7},{0,0,6,8,3,11,12,2},{15,6,15,15,11,2,7,5},{7,1,1,12,5,5,5,3},{9,10,13,12,1,3,12,2},{10,0,9,10,14,10,11,4},{3,10,12,11,2,15,0,8},{1,15,11,10,14,5,4,13}}
由此獲得密鑰為:
文件加密軟件采用AES算法和HASH認(rèn)證相結(jié)合的加密方式對(duì)文件數(shù)據(jù)進(jìn)行加密。其機(jī)密性源于加密算法的實(shí)施。文件加密軟件采用密鑰長(zhǎng)度為256位的Rijndael算法[15]。該算法有效抵御窮舉搜索和抵抗線性密碼分析和差分密碼分析,并且該算法復(fù)雜度低、效率高,令文件加密軟件可以抵御被動(dòng)攻擊(截取),使得攻擊者在截取數(shù)據(jù)后,利用即時(shí)密鑰生成的密鑰管理方案,可以令攻擊者因不在本地計(jì)算機(jī)上進(jìn)行解密,而無(wú)法還原數(shù)據(jù)信息,從而更大地保證了加密數(shù)據(jù)的安全性。為保證數(shù)據(jù)完整性,文件加密軟件采用基于Hash散列函數(shù)的認(rèn)證,使得文件加密軟件在保證數(shù)據(jù)完整性中取得了不錯(cuò)效果,可以有效防止攻擊者對(duì)系統(tǒng)進(jìn)行主動(dòng)攻擊,包括偽造、篡改信息。但文中未對(duì)文件的存儲(chǔ)、備份和災(zāi)難恢復(fù)等進(jìn)行研究,下一步將從這些方面深入研究文件加密體制。