用AVR匯編語言實(shí)現(xiàn)AES及其優(yōu)化
對于逆變化,其矩陣C要改變成相應(yīng)的D,即b(x)=d(x)*a(x)。
④ 密鑰加層運(yùn)算(addround)是將圈密鑰狀態(tài)中的對應(yīng)字節(jié)按位“異或”。
⑤ 根據(jù)線性變化的性質(zhì)[1],解密運(yùn)算是加密變化的逆變化。這里不再詳細(xì)敘述。
1.2 輪變化
對不同的分組長度,其對應(yīng)的輪變化次數(shù)是不同的,如表1所列。
表1 AES類型與基參數(shù)的關(guān)系
1.3 密鑰擴(kuò)展
AES算法利用外部輸入密鑰K(密鑰串的字?jǐn)?shù)為Nk),通過密鑰的擴(kuò)展程序得到共計(jì)4(Nr+1)字的擴(kuò)展密鑰。它涉及如下三個(gè)模塊:
① 位置變換(rotword)——把一個(gè)4字節(jié)的序列[A,B,C,D]變化成[B,C,D,A];
?、?S盒變換(subword)——對一個(gè)4字節(jié)進(jìn)行S盒代替;
③ 變換Rcon[i]——Rcon[i]表示32位比特字[xi-1,00,00,00]。這里的x是(02),如
Rcon[1]=[01000000];Rcon[2]=[02000000];Rcon[3]=[04000000]……
擴(kuò)展密鑰的生成:擴(kuò)展密鑰的前Nk個(gè)字就是外部密鑰K;以后的字W[[i]]等于它前一個(gè)字W[[i-1]]與前第Nk個(gè)字W[[i-Nk]]的“異或”,即W[[i]]=W[[i-1]]W[[i- Nk]]。但是若i為Nk的倍數(shù),則W[i]=W[i-Nk]Subword(Rotword(W[[i-1]]))Rcon[i/Nk]。
程序執(zhí)行的時(shí)候,主要調(diào)用以上幾個(gè)子程序,具體實(shí)現(xiàn)如下:
Keyexpansion:
rcall rotwoed
rcall subword
rcall Rcon
…
AES的加密與解密流程如圖1所示。
評論