AES加密算法的结构
AES-128使用128bits加密128bits的明文分组,数据和密钥均用一个 4 × 4 4 \times 4 4×4 的字节矩阵表示。AES是一个密钥迭代型密码算法,这意味着轮变换将会反复应用于状态,AES计算采用了10轮迭代,每一轮迭代使用一个轮密钥,轮密钥由密钥扩展算法产生。解密过程的工作原理与加密过程的工作原理类似,但是,解密过程必须以与加密过程相反的顺序应用各轮密钥,且使用轮变换的逆变换。
轮变换
轮变换包含4个步骤,分别为轮密钥加(AddRoundKey)、字节替换(SubBytes)、行移位变换(ShiftRows)和混合列变换(Mixcolumns)。
AES-128(byte in[16], byte out[16], word w[44])
byte state[4,4];
state = in;
AddRoundKey(state,w[0,3])
for round = 1 step 1 to 9
SubBytes(state)
ShiftRows(state)
Mixcolumns(state)
AddRoundKey(state, w[round * 4, (round + 1) * 4 -1])
end
SubBytes(state)
ShiftRows(state)
AddRoundKey(state, w[40, 43])
out = state;
轮密钥加(AddRoundKey)
本变换对轮密钥与状态进行异或操作。初始的AddRoundKey操作使用的轮密钥即算法本身的原密钥。轮密钥的长度等于数据分组的长度,即128比特。
例:
[ 87 F 2 4 D 97 6 E 4 C 90 E C 46 E 7 4 A C 3 A 6 8 C D 8 95 ] ⊕ [ 17 89 E 3 88 9 F 29 60 C E 5 A 94 D 6 2 E 24 64 61 2 A ] → [ 90 7 B A E 1 F F 1 65 F 0 22 1 C 73 9 C E D 82 E 8 B 9 B F ] { \left[ \begin{array}{cccc} 87&F2 & 4D & 97\\ 6E & 4C &90 & EC\\ 46 & E7 & 4A& C3 \\ A6& 8C & D8 & 95 \\ \end{array} \right ] \oplus \left[ \begin{array}{cccc} 17 & 89 & E3 & 88 \\ 9F & 29 & 60 & CE \\ 5A & 94 & D6 & 2E \\ 24 & 64 & 61 &2A \\ \end{array} \right ] \rightarrow \left[ \begin{array}{cccc} 90 & 7B & AE & 1F \\ F1 & 65 &F0 & 22\\ 1C & 73 & 9C & ED \\ 82 &E8 & B9 & BF \\ \end{array} \right ]}
876E46A6F24CE78C4D904AD897ECC395
⊕
179F5A2489299464E360D66188CE2E2A
→
90F11C827B6573E8AEF09CB91F22EDBF
字节替换(SubBytes)
本变换分别对状态的每一个字节进行替换,它是轮变换中唯一的非线性变换。该非线性变换也称为S盒。
输入字节形式为xy的S盒表(16进制)
x\y | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | f |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 63 | 7c | 77 | 7b | f2 | 6b | 6f | c5 | 30 | 01 | 67 | 2b | fe | d7 | ab | 76 |
1 | ca | 82 | c9 | 7d | fa | 59 | 47 | f0 | ad | d4 | a2 | af | 9c | a4 | 72 | c0 |
2 | b7 | fd | 93 | 26 | 36 | 3f | f7 | cc | 34 | a5 | e5 | f1 | 71 | d8 | 31 | 15 |
3 | 04 | c7 | 23 | c3 | 18 | 96 | 05 | 9a | 07 | 12 | 80 | e2 | eb | 27 | b2 | 75 |
4 | 09 | 83 | 2c | 1a | 1b | 6e | 5a | a0 | 52 | 3b | d6 | b3 | 29 | e3 | 2f | 84 |
5 | 53 | d1 | 00 | ed | 20 | fc | b1 | 5b | 6a | cb | be | 39 | 4a | 4c | 58 | cf |
6 | d0 | ef | aa | fb | 43 | 4d | 33 | 85 | 45 | f9 | 02 | 7f | 50 | 3c | 9f | a8 |
7 | 51 | a3 | 40 | 8f | 92 | 9d | 38 | f5 | bc | b6 | da | 21 | 10 | ff | f3 | d2 |
8 | cd | 0c | 13 | ec | 5f | 97 | 44 | 17 | c4 | a7 | 7e | 3d | 64 | 5d | 19 | 73 |
9 | 60 | 81 | 4f | dc | 22 | 2a | 90 | 88 | 46 | ee | b8 | 14 | de | 5e | 0b | db |
a | e0 | 32 | 3a | 0a | 49 | 06 | 24 | 5c | c2 | d3 | ac | 62 | 91 | 95 | e4 | 79 |
b | e7 | c8 | 37 | 6d | 8d | d5 | 4e | a9 | 6c | 56 | f4 | ea | 65 | 7a | ae | 08 |
c | ba | 78 | 25 | 2e | 1c | a6 | b4 | c6 | e8 | dd | 74 | 1f | 4b | bd | 8b | 8a |
d | 70 | 3e | b5 | 66 | 48 | 03 | f6 | 0e | 61 | 35 | 57 | 69 | 86 | c1 | 1d | 9e |
e | e1 | f8 | 98 | 11 | 69 | d9 | 8e | 94 | 9b | 1e | 87 | e9 | ce | 55 | 28 | df |
f | 8c | a1 | 89 | 0d | bf | e6 | 42 | 68 | 41 | 99 | 2d | 0f | b0 | 54 | bb | 16 |
例:
[ 87 F 2 4 D 97