Advanced Encryption Standard,AES

(老師說考描述,跟Block與Key有多大跟size)


According to Fips197
Key length = 128 bits
Key length = 192 bits
Key length = 256 bits
Block length = 128 bits

Def:Rijndael是Daemen和Rijmen早期設計密碼的改良

第一種 第二種 第三種
Block 128bit 128bit 128bit
Key 128bit 192bit 256bit
Round 10 rounds 12 rounds 14 rounds

主要比之前feistel cipher強的地方為硬體軟體執行速度較快!

運算基本前提

加法:

偶1為0,奇1為1

乘法:

﹡irreducible polynomial is : X8+X4+X3+X+1 (超過256即mod 283)


運算有四種類型:

1.Substitute bytes:

Def:利用S-box來轉換每組byte,屬於非線性轉換.

例:95轉換後為2A

首先是找95的反元素(老師說他會給!!!!){95}-1 = 8A

然後將8A帶入這個內容之中,即可求得!

作法:8 A = 1000 1010,那麼依序放入b0~b7

乘上矩陣,再加上最後一排11000110

即可?o到...說實話這真的很難算...因為超過還要mod 283..

 

 

2.ShiftRows:

Def:列向前遞移轉換

簡單講就是row向前遞移

例:
遞移前
87 F2 4D 97
EC 6E 4C 90
4A C3 46 E7
8C D8 95 A6
遞移後
87 F2 4D 97
6E 4C 90 EC
46 E7 4A C3
A6 8C D8 95

原則:

第一列不動

第二列Shift 1位

第三列Shift 2 位

第四列Shift 3 位

 

3.MixColumns:

Def:將行乘上多項式後轉換

例:
運算前
87 F2 4D 97
6E 4C 90 EC
46 E7 4A C3
A6 8C D8 95
運算後
47 40 A3 4C
37 D4 70 9F
94 E4 3A 42
ED A5 A6 BC

 

舉例來說:

多項式挑選{03}x3 + {01}x2 + {01}x + {02}(此多項式參照FIPS 197.pdf)

那課本是從{02}乘上87開始的所以依序就為

(就好像變成{02}x3 + {03}x2 + {01}x + {01})

{02}•{87}xor{03}•{6E}xor{01}•{46}xor{01}•{A6}={47}

看不懂得其實就是把第一行的87、6E、46、A6分別帶入x3,x2 ,x,1

課本{01}的部份等於是乘1所以課本是不寫

(運算就是(02=0000 0010)•(87=1000 0111)相乘之後超過256除283)xor(03•EC相乘之後超過256除283)xor...etc這樣算出第一個47

第二個37則是將多項式再往右方向遞移一格變為{01}x3 + {03}x2 + {02}x + {01}

所以下個運算就為,{87}xor{02}•{6E}xor{03}•{46}xor{A6}={37}....etc

4.AddRoundKey:

Def:加一額外Round Key轉換

那個Round Key其實就是另外加一道矩陣

例:
Origin
47 40 A3 4C
37 D4 70 9F
94 E4 3A 42
ED A5 A6 BC
XOR
Round Key
AC 19 28 57
77 FA D1 5C
66 DC 29 00
F3 21 41 6A
=
Result
EB 59 8B 1B
40 2E A1 C3
F2 38 13 42
1E 84 E7 D2