转载请注明来源: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}映射到其本身。