AES(ADVANCED ENCRYPTION STANDARD)是一种对称加解密算法。

以下内容字长均为4字节。

下图给出了AES加解密的流程,从图中可以看出:1)解密算法的每一步分别对应加密算法的逆操作,2)加解密所有操作的顺序正好是相反的。正是由于这几点(再加上加密算法与解密算法每步的操作互逆)保证了算法的正确性。加解密中每轮的密钥分别由种子密钥经过密钥扩展算法得到。算法中16字节的明文、密文和轮子密钥都以一个4x4的矩阵表示。

Work flow

Bytes

字节的每一位按{b7,  b6,  b6,  b2,  b3,  b3,  b2,  b1,  b0}\{b_{7},\ \ b_{6},\ \ b_{6},\ \ b_{2},\ \ b_{3},\ \ b_{3},\ \ b_{2},\ \ b_{1},\ \ b_{0}\}表示,

b(x)=b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+b0=i=07bixib(x)=b_{7}x^{7}+b_{6}x^{6}+b_{_5}x^{5}+b_{_4}x^{4}+b_{_3}x^{3}+b_{_2}x^{2}+b_{_1}x+b_{_0}=\sum_{i=0}^{7}b_{_i}x^{i}

因为二进制只能表示0和1,所以系数为偶数项的消除,奇数项保留为1。

Addition

例:

57+83=d4(x6+x4+x2+x+1)+(x7+x+1)=x7+x6+x4+x257 + 83 = d4\\ (x^{6}+x^{4}+x^{2}+x+1)+(x^{7}+x+1)\,=\,x^{7}+x^{6}+x^{4}+x^{2}

Multiplication

GF(28)GF(2^8)的乘法,为模为8次的不可约多项式乘法,在AES中,模为:

m(x)=x8+x4+x3+x+1={01}{1b}\begin{aligned} m(x)&=x^{8}+x^{4}+x^{3}+x+1\\ &=\{01\}\{1b\} \end{aligned}

5783=c1(x6+x4+x2+x+1)(x7+x+1)=x13+x11+x9+x8+x6+x5+x4+x3+1(x13+x11+x9+x8+x6+x5+x4+x3+1)mod(x8+x4+x3+x1+1)=x7+x6+157 \cdot 83 = c1\\ (x^{6}+x^{4}+x^{2}+x+1)(x^{7}+x+1)=x^{13}+x^{11}+x^{9}+x^{8}+x^{6}+x^{5}+x^{4}+x^{3}+1\\ (x^{13}+x^{11}+x^{9}+x^{8}+x^{6}+x^{5}+x^{4}+x^{3}+1)\bmod(x^{8}+x^{4}+x^{3}+x^{1}+1) = x^{7}+x^{6}+1

Multiplication by x

计算xb(x)x\cdot b(x)时可以转成x倍数进行计算:最高位不为1时,左移;为1时,左移然后异或0x1B(为GF(28)GF(2^8)的模值)。使用函数
xtime表示这一过程:

xb(x)=xtime{b(x)}=2b(x)={a6a5a4a3a2a1a00 , a7=0a6a5a4a3a2a1a00  1b, a70\begin{aligned} x \cdot b(x)&=xtime\{b(x)\}\\ &=2\cdot b(x)\\ &= \begin{cases} a_6a_5a_4a_3a_2a_1a_00\ ,\ a_7 = 0\\ a_6a_5a_4a_3a_2a_1a_00\ \oplus\ 1b ,\ a_7 \ne 0 \end{cases} \end{aligned}

例:

{57}{01}={57}{57}{02}=xtime{57}={ae}{57}{04}=xtime{ae}={47}{57}{08}=xtime{47}={8e}{57}{10}=xtime{8e}={07}{57}{20}=xtime{07}={0e}{57}{40}=xtime{0e}={1c}{57}{80}=xtime{1c}={38}5783=57ae38=c1\begin{aligned} \because \{57\}\cdot\{01\}&=\{57\}\\ \{57\}\cdot\{02\}&=xtime\{57\}=\{ae\}\\ \{57\}\cdot\{04\}&=xtime\{ae\}=\{47\}\\ \{57\}\cdot\{08\}&=xtime\{47\}=\{8e\}\\ \{57\}\cdot\{10\}&=xtime\{8e\}=\{07\}\\ \{57\}\cdot\{20\}&=xtime\{07\}=\{0e\}\\ \{57\}\cdot\{40\}&=xtime\{0e\}=\{1c\}\\ \{57\}\cdot\{80\}&=xtime\{1c\}=\{38\}\\ \therefore 57 \cdot 83 &= 57 \oplus ae\oplus 38\\ &=c1 \end{aligned}

Cipher

NbN_b: Number of columns(32-bit words).
NkN_k: Number of 32-bit words comprising the Cipher Key.
NrN_r: Number of rounds.
key-block-round_combinations

AES加密算法涉及4种操作:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])
begin
byte state[4,Nb]
state = in
AddRoundKey(state, w[0, Nb-1])
for round = 1 step 1 to Nr–1
SubBytes(state)
ShiftRows(state)
MixColumns(state)
AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])
end for
SubBytes(state)
ShiftRows(state)
AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])
out = state
end

SubBytes

S-Box:

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 B9 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

ShiftRows

第一行保持不变,第二行循环左移8比特,第三行循环左移16比特,第四行循环左移24比特

S[i][j]=S[i][(j+i)modNb],i[0,3],j[0,Nb)S'[i][j] = S[i][(j+i)\mod N_b], i\in[0,3],j\in[0,N_b)

ShiftRows

MixColumns

这一步的字节乘法是是基于有限域GF(28)GF(2^8)的多项式乘法的,它的不可约的多项式是:x8+x4+x3+x+1x^8 + x^4 + x^3 + x + 1

2(a7a6a5a4a3a2a1a0)={a6a5a4a3a2a1a00 , a7=0a6a5a4a3a2a1a00  00011011b, a702\cdot(a_7a_6a_5a_4a_3a_2a_1a_0) = \begin{cases} a_6a_5a_4a_3a_2a_1a_00\ ,\ a_7 = 0\\ a_6a_5a_4a_3a_2a_1a_00\ \oplus\ 00011011_b ,\ a_7 \ne 0 \end{cases}

3(a7a6a5a4a3a2a1a0)=(10b01b)(a7a6a5a4a3a2a1a0)=(10ba7a6a5a4a3a2a1a0)(a7a6a5a4a3a2a1a0)\begin{aligned} 3\cdot(a_7a_6a_5a_4a_3a_2a_1a_0) &= (10_b\oplus01_b)\cdot(a_7a_6a_5a_4a_3a_2a_1a_0)\\ &= (10_b \cdot a_7a_6a_5a_4a_3a_2a_1a_0) \oplus(a_7a_6a_5a_4a_3a_2a_1a_0) \end{aligned}

列混淆:逐列对数据进行在GF(28)GF(2^8)域上的乘和加,此操作主要提供扩散元素。

[So,cS1,cS2,cS3,c]=[02030101010203010101020303010102][S0,cS1,cS2,cS3,c],0c<Nb\begin{bmatrix} S'_{o,c}\\ S'_{1,c}\\ S'_{2,c}\\ S'_{3,c}\\ \end{bmatrix} = \begin{bmatrix} 02 & 03 & 01 & 01\\ 01 & 02 & 03 & 01\\ 01 & 01 & 02 & 03\\ 03 & 01 & 01 & 02\\ \end{bmatrix} \begin{bmatrix} S_{0,c}\\ S_{1,c}\\ S_{2,c}\\ S_{3,c}\\ \end{bmatrix} ,0\le c\lt N_b

S0,c=({02}  S0,c)({03}  S1,c)  S2,c  S3,cS1,c=S0,c({02}  S1,c)({03}  s2,c)  S3,cS2,c=S0,c  S1,c  ({02}  S2,c)  ({03}  S3,c)S3,c=({03}  S0,c)  S1,c  S2,c  ({02}  S3,c)\begin{aligned} S_{0,c}^{\prime}&=(\{02\}\cdot\;S_{0,c})\oplus(\{03\}\cdot\;S_{1,c})\oplus\;S_{2,c}\oplus\;S_{3,c}\\ S_{1,c}^{\prime}&=S_{0,c}\oplus(\{02\}\cdot\;S_{1,c})\oplus(\{03\}\cdot\;s_{2,c})\oplus\;S_{3,c}\\ S_{2,c}^{\prime}&=S_{0,c}\oplus\;S_{1,c}\oplus\;(\{02\}\cdot\;S_{2,c})\oplus\;(\{03\}\cdot\;S_{3,c})\\ S_{3,c}^{\prime}&=(\{03\}\cdot\;S_{0,c})\oplus\;S_{1,c}\oplus\;S_{2,c}\oplus\;(\{02\}\cdot\;S_{3,c}) \end{aligned}

AddRoundKey

先计算轮密钥,然后将上一步的结果与轮密钥异或。

AES KEY Expansion

轮密钥为4字长的线性数组,表示为:w[i], 0i<Nb×(Nr+1)w[i],\ 0\le i\lt N_b\times(N_r+1)

  • RotWord: RotWord是一种对一个字进行循环左移的操作,即将最左边的字节移到最右边,其他字节依次向左移动一位。

RotWord(Word[a0,a1,a2,a3])=Word[a1,a2,a3,a0]RotWord(Word[a_{0},a_{1},a_{2},a_{3}]) = Word'[a_{1},a_{2},a_{3},a_{0}]

  • SubWord: See reference SubBytes.

  • Rcon: 轮常数,长度为4个字节,与拓展密钥进行异或产生轮密钥,以增加扩展密钥的非线性性和随机性。

Rcon[i/Nk]=[xi1,{00},{00},{00}], i=Nk,2Nk,...NrNk, x={02} in GF(28).Rcon[i/N_{k}]=[x^{i-1},\{00\},\{00\},\{00\}],\ i=N_k,2N_k,...N_rN_k,\ x=\{02\}\ in\ GF(2^8).

其中xi1x^{i-1}表示为:xxGF(28)GF(2^8)域的幂。

Rcon[j]=[RCj, 0x00, 0x00, 0x00]AES128: RCj={0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36}AES192: RCj={0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}AES256: RCj={0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40}\begin{aligned} Rcon[j]&=[RC_j,\text{ 0x00, 0x00, 0x00}]\\ \text{AES128: }RC_j &= \text{\{0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36\}}\\ \text{AES192: }RC_j &= \text{\{0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80\}}\\ \text{AES256: }RC_j &= \text{\{0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40\}} \end{aligned}

RoundKey

add round key

将种子密钥按序排列,其中k0,k1,...,k15k_{0},k_{1},...,k_{15}依次表示种子密钥的一个字节;

w[i]={[k4i, k4i+1, k4i+2, k4i+3], 0i<4w[i4]g(w[i1]), imod4=0, i<Nb×(Nr+1)w[i4]w[i1], i<Nb×(Nr+1)w[i]= \begin{cases} [k_{4i},\ k_{4i+1},\ k_{4i+2},\ k_{4i+3}],\ 0\le i\lt 4\\ w[i-4]\oplus g(w[i-1]),\ i\mod 4 = 0,\ i\lt N_b\times(N_r+1)\\ w[i-4]\oplus w[i-1],\ i\lt N_b\times(N_r+1) \end{cases}

函数gg的流程说明:

  1. 将w循环左移8比特:RotWord
  2. 分别对每个字节做S盒置换:SubWord
  3. 与32比特的常量Rcon进行异或。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
KeyExpansion(byte key[4*Nk], word w[Nb*(Nr+1)], Nk)
begin
word temp
i = 0
while (i < Nk)
w[i] = word(key[4*i], key[4*i+1], key[4*i+2], key[4*i+3])
i = i+1
end while
i = Nk
while (i < Nb * (Nr+1))
temp = w[i-1]
if (i mod Nk = 0)
temp = SubWord(RotWord(temp)) xor Rcon[i/Nk]
else if (Nk > 6 and i mod Nk = 4)
temp = SubWord(temp)
end if
w[i] = w[i-Nk] xor temp
i = i + 1
end while
end

Inverse Cipher

解密为加密的逆过程,流程相似。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])
begin
byte state[4,Nb]
state = in
AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])
for round = Nr-1 step -1 downto 1
InvShiftRows(state)
InvSubBytes(state)
AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])
InvMixColumns(state)
end for
InvShiftRows(state)
InvSubBytes(state)
AddRoundKey(state, w[0, Nb-1])
out = state
end

InvShiftRows

第一行保持不变,第二行循环右移8比特,第三行循环右移16比特,第四行循环右移24比特

S[i][j]=S[i][(ji+Nb)modNb],i[0,3],j[0,Nb)S'[i][j] = S[i][(j-i+N_b)\mod N_b], i\in[0,3],j\in[0,N_b)

InvShiftRows

InvSubBytes

Inverse S-Box:

x\y 0 1 2 3 4 5 6 7 8 9 A B C D E F
0 52 09 6A D5 30 36 A5 38 BF 40 A3 9E 81 F3 D7 FB
1 7C E3 39 82 9B 2F FF 87 34 8E 43 44 C4 DE E9 CB
2 54 7B 94 32 A6 C2 23 3D EE 4C 95 0B 42 FA C3 4E
3 08 2E A1 66 28 D9 24 B2 76 5B A2 49 6D 8B D1 25
4 72 F8 F6 64 86 68 98 16 D4 A4 5C CC 5D 65 B6 92
5 6C 70 48 50 FD ED B9 DA 5E 15 46 57 A7 8D 9D 84
6 90 D8 AB 00 8C BC D3 0A F7 E4 58 05 B8 B3 45 06
7 D0 2C 1E 8F CA 3F 0F 02 C1 AF BD 03 01 13 8A 6B
8 3A 91 11 41 4F 67 DC EA 97 F2 CF CE F0 B4 E6 73
9 96 AC 74 22 E7 AD 35 85 E2 F9 37 E8 1C 75 DF 6E
A 47 F1 1A 71 1D 29 C5 89 6F B7 62 0E AA 18 BE 1B
B FC 56 3E 4B C6 D2 79 20 9A DB C0 FE 78 CD 5A F4
C 1F DD A8 33 88 07 C7 31 B1 12 10 59 27 80 EC 5F
D 60 51 7F A9 19 B5 4A 0D 2D E5 7A 9F 93 C9 9C EF
E A0 E0 3B 4D AE 2A F5 B0 C8 EB BB 3C 83 53 99 61
F 17 2B 04 7E BA 77 D6 26 E1 69 14 63 55 21 0C 7D

InvMixColumns

[S0,cS1,cS2,cS3,c]=[0e0b0d09090e0b0d0d090e0b0b0d090e][So,cS1,cS2,cS3,c],0c<Nb\begin{bmatrix} S'_{0,c}\\ S'_{1,c}\\ S'_{2,c}\\ S'_{3,c}\\ \end{bmatrix} = \begin{bmatrix} 0e & 0b & 0d & 09\\ 09 & 0e & 0b & 0d\\ 0d & 09 & 0e & 0b\\ 0b & 0d & 09 & 0e\\ \end{bmatrix} \begin{bmatrix} S_{o,c}\\ S_{1,c}\\ S_{2,c}\\ S_{3,c}\\ \end{bmatrix} ,0\le c\lt N_b

S0,c=({0e}  S0,c)({0b}  S1,c)({0d}  S2,c)  ({09}  S3,c)S1,c=({09}  S0,c)({0e}  S1,c)({0b}  S2,c)  ({0d}  S3,c)S2,c=({0d}  S0,c)({09}  S1,c)({0e}  S2,c)  ({0b}  S3,c)S3,c=({0b}  S0,c)({0d}  S1,c)({09}  S2,c)  ({0e}  S3,c)\begin{aligned} S_{0,c}^{\prime}&=(\{0e\}\cdot\;S_{0,c})\oplus(\{0b\}\cdot\;S_{1,c})\oplus(\{0d\}\cdot\;S_{2,c})\oplus\;(\{09\}\cdot\;S_{3,c})\\ S_{1,c}^{\prime}&=(\{09\}\cdot\;S_{0,c})\oplus(\{0e\}\cdot\;S_{1,c})\oplus(\{0b\}\cdot\;S_{2,c})\oplus\;(\{0d\}\cdot\;S_{3,c})\\ S_{2,c}^{\prime}&=(\{0d\}\cdot\;S_{0,c})\oplus(\{09\}\cdot\;S_{1,c})\oplus(\{0e\}\cdot\;S_{2,c})\oplus\;(\{0b\}\cdot\;S_{3,c})\\ S_{3,c}^{\prime}&=(\{0b\}\cdot\;S_{0,c})\oplus(\{0d\}\cdot\;S_{1,c})\oplus(\{09\}\cdot\;S_{2,c})\oplus\;(\{0e\}\cdot\;S_{3,c}) \end{aligned}

Inverse AddRoundKey

和上文步骤AddRoundKey一致。

Modes

  1. Electronic Codebook Book(ECB)
    ECB
  2. Cipher Block Chaining (CBC)
    CBC
  3. Cipher FeedBack (CFB)
    CFB
  4. Output FeedBack (OFB)
    OFB
  5. Counter (CTR)
    CTR

Example

以下为AES-ECB-128加密例子:

Plain text: 32 43 f6 a8 88 5a 30 8d 31 31 98 a2 e0 37 07 34
Cipher key: 2b 7e 15 16 28 ae d2 a6 ab f7 15 88 09 cf 4f 3c
Cipher text: 39 25 84 1d 02 dc 09 fb dc 11 85 97 19 6a 0b 32

Openssl

1
echo 3243f6a8885a308d313198a2e0370734 | xxd -r -ps | openssl aes-128-ecb -e -K 2b7e151628aed2a6abf7158809cf4f3c -nopad | xxd

FirstRound

First AddRoundKey:

[328831e0435a3137f6309807a88da234][2b28ab097eaef7cf15d2154f16a6883c]=[19a09ae93df4c6f8e3e28d48be2b2a08]\begin{bmatrix} 32 & 88 & 31 & e0 \\ 43 & 5a & 31 & 37 \\ f6 & 30 & 98 & 07 \\ a8 & 8d & a2 & 34 \\ \end{bmatrix} \oplus \begin{bmatrix} 2b & 28 & ab & 09 \\ 7e & ae & f7 & cf \\ 15 & d2 & 15 & 4f \\ 16 & a6 & 88 & 3c \\ \end{bmatrix} = \begin{bmatrix} 19 & a0 & 9a & e9 \\ 3d & f4 & c6 & f8 \\ e3 & e2 & 8d & 48 \\ be & 2b & 2a & 08 \\ \end{bmatrix}

SecoundRound

SubBytes:

[sbox(1,9)sbox(a,0)sbox(9,a)sbox(e,9)sbox(3,d)sbox(f,4)sbox(c,6)sbox(f,8)sbox(e,3)sbox(e,2)sbox(8,d)sbox(4,8)sbox(b,e)sbox(2,b)sbox(2,a)sbox(0,8)]=[d4e0b81e27bfb44111985d52aef1e530]\begin{bmatrix} sbox(1,9) & sbox(a,0) & sbox(9,a) & sbox(e,9) \\ sbox(3,d) & sbox(f,4) & sbox(c,6) & sbox(f,8) \\ sbox(e,3) & sbox(e,2) & sbox(8,d) & sbox(4,8) \\ sbox(b,e) & sbox(2,b) & sbox(2,a) & sbox(0,8) \\ \end{bmatrix} = \begin{bmatrix} d4 & e0 & b8 & 1e \\ 27 & bf & b4 & 41 \\ 11 & 98 & 5d & 52 \\ ae & f1 & e5 & 30 \\ \end{bmatrix}

ShiftRows:

[d4e0b81e27bfb44111985d52aef1e530]=>[d4e0b81ebfb441275d52119830aef1e5]\begin{bmatrix} d4 & e0 & b8 & 1e \\ 27 & bf & b4 & 41 \\ 11 & 98 & 5d & 52 \\ ae & f1 & e5 & 30 \\ \end{bmatrix} => \begin{bmatrix} d4 & e0 & b8 & 1e \\ bf & b4 & 41 & 27 \\ 5d & 52 & 11 & 98 \\ 30 & ae & f1 & e5 \\ \end{bmatrix}

MixColumns:

[02030101010203010101020303010102][d4e0b81ebfb441275d52119830aef1e5]=[(02d4)(03bf)5d30(031e)2798(02e5)]=[04e0482866cbf8068119d326e59a7a4c]\begin{aligned} \begin{bmatrix} 02 & 03 & 01 & 01\\ 01 & 02 & 03 & 01\\ 01 & 01 & 02 & 03\\ 03 & 01 & 01 & 02\\ \end{bmatrix} \begin{bmatrix} d4 & e0 & b8 & 1e \\ bf & b4 & 41 & 27 \\ 5d & 52 & 11 & 98 \\ 30 & ae & f1 & e5 \\ \end{bmatrix} &= \begin{bmatrix} (02 \cdot d4) \oplus (03 \cdot bf) \oplus 5d \oplus 30 & \cdots & \cdots & \cdots \\ \vdots & \vdots &\ddots & \vdots\\ \\ \cdots & \cdots & \cdots & (03 \cdot 1e) \oplus 27 \oplus 98 \oplus (02 \cdot e5) \end{bmatrix}\\ &= \begin{bmatrix} 04 & e0 & 48 & 28 \\ 66 & cb & f8 & 06 \\ 81 & 19 & d3 & 26 \\ e5 & 9a & 7a & 4c \\ \end{bmatrix} \end{aligned}

  1. RotWord:

[2b28ab097eaef7cf15d2154f16a6883c]=[w0w1w2w3]w0=2b7e1516w1=28aed2a6w2=abf71588w3=09cf4f3c\begin{bmatrix} 2b & 28 & ab & 09 \\ 7e & ae & f7 & cf \\ 15 & d2 & 15 & 4f \\ 16 & a6 & 88 & 3c \\ \end{bmatrix} = \begin{bmatrix} w_0 & w_1 & w_2 & w_3 \\ \end{bmatrix}\\ w_0 = 2b7e1516 \\ w_1 = 28aed2a6 \\ w_2 = abf71588 \\ w_3 = 09cf4f3c \\

KeyExpansion:

  1. RotWord:

RotWord(w3)=RotWord(09cf4f3c)=cf4f3c09\begin{aligned} RotWord(w_3)&=RotWord(09cf4f3c)\\ &=cf4f3c09 \end{aligned}

  1. SubWord:

SubWord(cf4f3c09)=sbox(c,f),sbox(4,f),sbox(3,c),sbox(0,9)=8a84eb01\begin{aligned} SubWord(cf4f3c09) &= sbox(c,f),sbox(4,f),sbox(3,c),sbox(0,9)\\ &=8a84eb01 \end{aligned}

  1. Rcon:

Rcon(0)=[01,00,00,00]8a84eb01Rcon(0)=8b84eb01Rcon(0) = [01,00,00,00] 8a84eb01 \oplus Rcon(0) = 8b84eb01

  1. XOR with w[i-Nk]

w4=8b84eb01w0=a0fafe17w5=a0fafe17w1=88542cb1w6=88542cb1w2=23a33939w5=23a33939w3=2a6c7605=>[a088232afa54a36cfe2c397617b13905]\begin{aligned} w_4&=8b84eb01 \oplus w_0\\ &=a0fafe17\\ w_5&=a0fafe17 \oplus w_1\\ &=88542cb1\\ w_6&=88542cb1 \oplus w_2\\ &=23a33939\\ w_5&=23a33939 \oplus w_3\\ &=2a6c7605 \end{aligned} => \begin{bmatrix} a0 & 88 & 23 & 2a \\ fa & 54 & a3 & 6c \\ fe & 2c & 39 & 76 \\ 17 & b1 & 39 & 05 \\ \end{bmatrix}\\

AddRoundKey:

[04e0482866cbf8068119d326e59a7a4c][a088232afa54a36cfe2c397617b13905]=[a4686b029c9f5b6a7f35ea50f22b4349]\begin{bmatrix} 04 & e0 & 48 & 28 \\ 66 & cb & f8 & 06 \\ 81 & 19 & d3 & 26 \\ e5 & 9a & 7a & 4c \\ \end{bmatrix} \oplus \begin{bmatrix} a0 & 88 & 23 & 2a \\ fa & 54 & a3 & 6c \\ fe & 2c & 39 & 76 \\ 17 & b1 & 39 & 05 \\ \end{bmatrix} = \begin{bmatrix} a4 & 68 & 6b & 02 \\ 9c & 9f & 5b & 6a \\ 7f & 35 & ea & 50 \\ f2 & 2b & 43 & 49 \\ \end{bmatrix}

2~9 Rounds

LastRound

最后一轮不需要MixColumn。

得到最终加密结果:

[3902dc1925dc116a8409850b1dfb9732]\begin{bmatrix} 39 & 02 & dc & 19 \\ 25 & dc & 11 & 6a \\ 84 & 09 & 85 & 0b \\ 1d & fb & 97 & 32 \\ \end{bmatrix}

References

[1] Federal Information. Specification for the ADVANCED ENCRYPTION STANDARD (AES) [S]. 2001.11.26.
[2] ReadingLover. 密码算法详解—AES [OL]. https://www.cnblogs.com/luop/p/4334160.html. 2017.11.19.
[3] Morris Dworkin. Recommendation for Block Cipher Modes of Operation Methods and Techniques [S]. 2001.12.