概述
這里是波士頓大學(xué)的Howard Straubing做的一段很直白的動畫吹散。
AES加密過程是在一個4×4的字節(jié)矩陣上運(yùn)作,這個矩陣又稱為“體(state)”,其初值就是一個明文區(qū)塊(矩陣中一個
元素大小就是明文區(qū)塊中的一個Byte)古话。(Rijndael加密法因支持更大的區(qū)塊,其矩陣行數(shù)可視情況增加)加密時锁施,
各輪AES加密循環(huán)(除最后一輪外)均包含4個步驟:
- AddRoundKey—矩陣中的每一個字節(jié)都與該次回合密鑰(round key)做XOR運(yùn)算陪踩;每個子密鑰由密鑰生成方案產(chǎn)生杖们。
- SubBytes—通過一個非線性的替換函數(shù),用查找表的方式把每個字節(jié)替換成對應(yīng)的字節(jié)肩狂。
- ShiftRows—將矩陣中的每個橫列進(jìn)行循環(huán)式移位摘完。
- MixColumns—為了充分混合矩陣中各個直行的操作。這個步驟使用線性轉(zhuǎn)換來混合每內(nèi)聯(lián)的四個字節(jié)傻谁。最后一個加密循環(huán)中省略MixColumns步驟孝治,而以另一個AddRoundKey替換。
表2.2 AES密鑰長度與輪數(shù)的關(guān)系
密鑰長度 | 128 | 192 | 256 |
圈數(shù) | 10 | 12 | 14 |
S盒變換(SubBytes)
矩陣中的各字節(jié)通過一個8位的S-box進(jìn)行轉(zhuǎn)換栅螟。這個步驟提供了加密法非線性的變換能力荆秦。S-box與GF(28)上的乘法反元素有關(guān),已知具有良好的非線性特性力图。為了避免簡單代數(shù)性質(zhì)的攻擊步绸,S-box結(jié)合了乘法反元素及一個可逆的仿射變換矩陣建構(gòu)而成。此外在建構(gòu)S-box時吃媒,刻意避開了固定點(diǎn)與反固定點(diǎn)瓤介,即以S-box替換字節(jié)的結(jié)果會相當(dāng)于錯排的結(jié)果。AES算法中的S盒如圖2.2所示
例如一個字節(jié)為0x19赘那,經(jīng)過S盒變換查找n(1,9) = 0xd4,所以就替換為0xd4刑桑。
行變換 (ShiftRows)
ShiftRows描述矩陣的行操作。在此步驟中募舟,每一行都向左循環(huán)位移某偏移量祠斧。在AES中(區(qū)塊大小128位),第一行維持不變拱礁,第二行里的每個字節(jié)都向左循環(huán)移動一格琢锋。同理,第三行及第四行向左循環(huán)位移的偏移量就分別是2和3呢灶。經(jīng)過ShiftRows之后吴超,矩陣中每一豎列,都是由輸入矩陣中的每個不同列中的元素組成鸯乃。
列變換 (MixColumns)
在MixColumns步驟鲸阻,每一列的四個字節(jié)通過線性變換互相結(jié)合。每一列的四個元素分別當(dāng)作 的系數(shù)缨睡,合并即為GF(28)中的一個多項(xiàng)式鸟悴,接著將此多項(xiàng)式和一個固定的多項(xiàng)式在modulo 下相乘。此步驟亦可視為Rijndael有限域之下的矩陣乘法宏蛉。MixColumns函數(shù)接受4個字節(jié)的輸入遣臼,輸出4個字節(jié),每一個輸入的字節(jié)都會對輸出的四個字節(jié)造成影響拾并。因此ShiftRows和MixColumns兩步驟為這個密碼系統(tǒng)提供了擴(kuò)散性揍堰。
擴(kuò)展密鑰(AddRoundKey)
AES算法利用外部輸入密鑰K(密鑰串的字?jǐn)?shù)為Nk),通過密鑰的擴(kuò)展程序得到共計(jì)4(Nr+1)字的擴(kuò)展密鑰鹏浅。它涉及如下三個模塊:
(1)位置變換(rotword)——把一個4字節(jié)的序列[A,B,C,D]變化成[B,C,D,A];
(2)S盒變換(subword)——對一個4字節(jié)進(jìn)行S盒代替屏歹;
(3)變換Rcon[i]——Rcon[i]表示32位比特字[xi-1,00,00,00]隐砸。這里的x是(02),如 Rcon[1]=[01000000]蝙眶;Rcon[2]=[02000000]季希;Rcon[3]=[04000000]……
擴(kuò)展密鑰的生成:擴(kuò)展密鑰的前Nk個字就是外部密鑰K;以后的字W[[i]]等于它前一個字W[[i-1]]與前第Nk個字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]式塌。