張文錦+周榮+高燕
摘要:介紹AES算法的基本理論,并應用到具體軟件實現(xiàn)中。在AES算法實現(xiàn)中,預先存儲正反S盒查找表,提高算法執(zhí)行的運行速度;使用密文挪用技術,解決待處理數(shù)據長度不是分組長度整數(shù)倍的問題;提出優(yōu)化文件讀寫方案,使用多線程和緩存技術,提高系統(tǒng)加密解密的吞吐量。測試加密軟件的基本功能,并對軟件性能作量級測試。
關鍵詞:AES;加密;解密;密文挪用;分組密碼
DOIDOI:10.11907/rjdk.171097
中圖分類號:TP309.7
文獻標識碼:A 文章編號:1672-7800(2017)006-0180-03
0 引言
隨著信息化的推進,“互聯(lián)網+”應用不斷深入。信息化滲透到人們學習、工作、生活等各方面,為人們提供便利服務的同時,也面臨著信息安全的巨大挑戰(zhàn)。個人信息安全是信息安全的重要組成部分,個人電腦或U盤中毒丟失都會造成個人信息的泄露。創(chuàng)建一個保護用戶個人信息的工具具有重要意義。
1 AES算法簡介
1.1 算法背景
高級加密標準(即AES[1]),又稱Rijndael加密法,是一種區(qū)塊加密標準,用來替代原先的DES,已經被多方分析且廣泛應用。經過5年的甄選流程,高級加密標準由美國國家標準與技術研究院(NIST)于2001年11月26日發(fā)布于FIPS PUB 197,并在2002年5月26日成為有效的標準。2006年,高級加密標準已成為對稱密鑰加密中最流行的算法之一。
1.2 算法流程
AES加密算法的處理單元是分組,分組的128bit數(shù)據(16字節(jié))會按照順序賦值到4*4的狀態(tài)矩陣(state)中,所有變換都是基于狀態(tài)矩陣完成的。AES變換是多輪迭代的輪變換實現(xiàn)的,迭代次數(shù)與密鑰長度有關(以AES-128為說明)。輪變換包括4步變換,包括字節(jié)替換(SubBytes())、行變換(ShiftRows())、列混合(MixColumns()[2])和密鑰加(AddRoundKey())[3]。通過非線性變換、混合函數(shù)變換,將字節(jié)代換運算產生的非線性擴散,達到重復混合,使得加密完成后的分組擴散更均勻。輪密鑰擴展將原始密碼擴展成11組,每輪迭代使用不同的密鑰。加密流程如圖1所示。
2 算法實現(xiàn)
2.1 密鑰擴展
按照列優(yōu)先的方式將種子密鑰排列成4*4矩陣,矩陣每一列就可以稱為一個32bit的字。密鑰擴展的目的就是將種子密鑰由4個字擴展成44個字,每一輪加密需要4個字,為了方便描述,第一個字為w[0],第二個字為w[1]…依次類推,最后一個字為w[43]。
前4個字可以用種子密鑰初始化,然后,對數(shù)組w擴充40個新字。遞歸方式:
(1)若i不是4的倍數(shù),那么w[i]=w[i-4]^w[i-1]。
(2)若i是4的倍數(shù),那么w[i]=w[i-4]^T(w[i-1]);其中,T是一個函數(shù)。
函數(shù)T由3個部分組成:字循環(huán)、字節(jié)代換與輪常量異或。
(3)字循環(huán):將一個字中的4個字節(jié)分別向左移動一個字節(jié)。即[x0,x1,x2,x3]變換為[x1,x2,x3 ,x0]
(4)字節(jié)代換:即S盒置換。
(5)輪常量異或:將前兩步的結果與輪常量Rcon[j]進行異或。
2.2 S盒置換和逆S盒置換
S盒置換又稱字節(jié)代換。正S盒(Sbox),逆S盒(Inv Sbox)提前計算存儲在代碼中,字節(jié)代換可以簡化成一個簡單的查表操作。通過下標取出對應的值就是這個映射操作,如圖2所示。S盒置換使用正S盒,逆S盒置換使用逆S盒。
2.3 行移位變換與逆向行移位變換
行移位的功能是將字節(jié)矩陣通過簡單的左循環(huán)移位操作。當密鑰長為128bit,狀態(tài)矩陣的第i行左移i個字節(jié),如圖3所示。逆行移位就是還原行移位,狀態(tài)矩陣向右循環(huán)移位,狀態(tài)矩陣的第i行右移i個字節(jié)。
2.4 列混合變換和逆列混合變換
列混合算法:使用GF()域[4]算術特性替代
根據矩陣的乘法可知,在列混淆過程中,每個字節(jié)對應的值只與該列的4個值有關系。此處的乘法和加法都定義在GF(28)有限域上。
需要注意如下幾點:
(1)將某個字節(jié)的值乘2,即該值的二進制位左移一位,如果該值的最高位為1(即該數(shù)值不小于128),則還需要將移位后的結果異或00011011。
(2)乘法對加法滿足分配率,例如:07·S0,0=(01⊕02⊕04)·S0,0= S0,0⊕(02·S0,0)(04·S0,0)。
(3)此處矩陣乘法與矩陣的乘法不同,各個值在相加時使用的是模2加法(相當于是異或運算)。
逆列混合操作同樣使用GF()域上算術特性替代,只是多項式c(x)不同。
2.5 輪密鑰加
將128位輪密鑰與狀態(tài)矩陣中的數(shù)據進行按位異或操作。因為異或操作的逆操作即是本身,所以解密輪密鑰加也是本身。
3 軟件優(yōu)化
3.1 密文挪用
AES算法是分組加密算法,所以不可避免地要處理待處理數(shù)據不是分組數(shù)據的整數(shù)倍的問題。如果不處理這部分不夠的數(shù)據,那么加密解密以后得到的原始信息將在最后一個分組多出一部分錯誤信息,而沒有被賦值的數(shù)據往往就是內存中的垃圾值,從而影響正確信息的可讀性。本軟件在實現(xiàn)過程中采取的方法是“密文挪用”。
為了便于解釋,設分組長度為blen;待處理(加密/解密)的數(shù)據為d,長度為dlen;待處理剩余的數(shù)據為rd,長度為rdlen。已經處理數(shù)據s。加密實現(xiàn)過程如圖4所示。
(1)當rdlen>=blen,即剩余數(shù)據大于分組長度,轉2;否則,轉3。
(2)從rd的頭部取大小為blen的數(shù)據作加密操作,所得數(shù)據拼接到s尾部,轉1。
(3)若rdlen>0,即剩余數(shù)據不夠一個分組。在已經加密的數(shù)據s末尾取出大小為blen-rdlen的數(shù)據與rd拼接構成一個長度為blen的分組數(shù)據塊,對其加密并將結果拼接到已經加密數(shù)據(除被取出的blen-rdlen的數(shù)據)后,轉4。
(4)若relen==0,所有數(shù)據加密完成,結束加密。S為密文。
原文被分成n個組,第n個分組不足一個分組長度。前面n-2個分組直接加密即可,第n-1分組加密后要借給n分組然后對n分組加密。解密實現(xiàn)過程如圖5所示。
setp1:當rdlen>2*blen,轉2;否則,轉3。
setp2:rd的頭部取出blen長的數(shù)據做解密操作,結果拼接到s尾部,轉1。
setp3:當rdlen=2*blen,轉4;否則,轉5。
setp4:取出rdlen數(shù)據解密。直到rdlen==0;結果拼接到s尾部,轉6。
setp5:取出剩余數(shù)據rd末尾blen大小的數(shù)據塊(剩余的rd-blen大小數(shù)據塊記作rd)并作解密操作,得到數(shù)據塊data2;對剩余的待解密數(shù)據rd與data2的頭部b1en-rdlen的數(shù)據進行拼接、解密,得到data3。順序拼接s,data3,data2的末尾rdlen個位數(shù)據,得到完整解密數(shù)據、轉6。
setp6:所有密文均被解密成原文。結束解密。
說明:密文被分成n個分組,前n-2分組直接解密。結尾部分,先取出后面一個分組,然后n-1分組和解密完的前面部分組成一個分組解密,然后拼接起來。
3.2 多線程I/0優(yōu)化
文件讀取和加解密處理的速度是不匹配的。如每次處理一個分組就讀寫文件一次顯然會處于空等狀態(tài),而且多次打開關閉文件相當費時間,而待加密的文件也是可大可小的,可能是幾K的文本,也有可能遇到幾個G的圖像視頻等,全部讀取到內存中也是不可能的??紤]到以上問題,設置緩沖區(qū)。
文件處理過程如圖6所示,系統(tǒng)主進程實現(xiàn)加密解密操作,讀文件操作由文件讀進程實現(xiàn),寫文件操作由文件寫進程實現(xiàn)。待處理數(shù)據和待寫入文件數(shù)據緩沖區(qū)使用循環(huán)隊列實現(xiàn),主進程直接在緩存區(qū)讀取數(shù)據,并將數(shù)據存入寫緩沖區(qū)。
4 軟件運行測試
4.1 基本功能測試
測試文件test.txt。內容 “這是基于AES加密算法的測試用例,張文錦zhangwenjin”。加密結果如圖7。
進行解密操作能夠還原文件原來的內容。
4.2 性能測試
軟件處理大小不同文件的性能如表1。
5 結語
本文介紹了AES加密算法的實現(xiàn)原理和過程,并給出了算法密鑰加、行移位、S盒置換、列混合等關鍵操作的實現(xiàn)方法。在實際應用過程中應用密文挪用技術,巧妙處理分組問題,為了提高文件處理效率使用了緩沖區(qū)技術 。通過測試,加密軟件不但在功能上滿足要求,性能方面也令人滿意。
參考文獻:
[1]何明星,范平志.新一代私鑰加密標準AES進展與評述[J].計算機應用研究,2001,18(10):4-6.
[2]曾祥勇,張煥國.高級加密標準Mixcolumn變換設計分析[J].武漢大學學報:理學版,2003,49(5):597-600.
[3]何明星,林昊.AES算法原理及其實現(xiàn)[J].計算機應用研究,2001,18(10):4-6.
[4]Announcing the Advanced Encryption Standard(AES) [p].NIST,2001:1-53.
(責任編輯:陳福時)