轉載請註明來源:http://blog.csdn.net/zhangyang0402/archive/2010/04/08/5465032.aspx
一、概述
在整個AES加密中,SBox被使用到了兩次:一次是在密鑰(Cipher Key)擴展生成輪密鑰(Round Key)的時候,另一次是輪加密的第一步字節替換(SubByte)。
根據FIPS 197,SBox的生成分兩步:
1.求GF(28)有限域內各元素的乘法逆元.(運用擴展歐幾里得算法)
2.用第1步的結果做仿射變換(Affine Transformation)
二、具體求解步驟
下面是求解過程,這裏這裏以第1列第0元素{10}爲例
1.求{10}在有限域GF(28)上的乘法逆元
{10}用多項式表示爲: x4
由擴展歐幾里得算法:
d |
X1 |
X2 |
X3 |
Y1 |
Y2 |
Y3 |
|
1 |
0 |
x8+x4+x3+x+1 |
0 |
1 |
x4 |
x4+1 |
0 |
1 |
x4 |
1 |
x4+1 |
x3+x+1 |
x |
1 |
x4+1 |
x3+x+1 |
x |
x5+x+1 |
x2+x |
x+1 |
x |
x5+x+1 |
x2+x |
x2+x+1 |
x6+ x5 + x4+ x2 |
1 |
Y2=x6+ x5 + x4+ x2 即{74},是{10}在GF(28)有限域上的逆元
2.{74}做仿射變換
B={74}=01110100
= b7b6b5b4b3b2b1b0
C={63}=01100011
=c7c6c5c4c3c2c1c0
B’=b’7b’6b’5b’4b’3b’2b’1b’0
由仿射變換定義,
b’0=b0⊕b4⊕b5⊕b6⊕b7⊕c0=0
b’1=b1⊕b5⊕b6⊕b7⊕b0⊕c1=1
b’2=b2⊕b6⊕b7⊕b0⊕b1⊕c2=0
b’3=b3⊕b7⊕b0⊕b1⊕b2⊕c3=1
b’4=b4⊕b0⊕b1⊕b2⊕b3⊕c4=0
b’5=b5⊕b1⊕b2⊕b3⊕b4⊕c5=0
b’6=b6⊕b2⊕b3⊕b4⊕b5⊕c6=1
b’7=b7⊕b3⊕b4⊕b5⊕b6⊕c7=1
B’=11001010={ca}
即{74}經仿射變換,結果爲{ca}
因此,在SBox中,第1行第0列元素的對應值爲{ca}。其他元素也可相繼求出。規定 {00}映射到其本身。