AES中Sbox的生成

转载请注明来源:http://blog.csdn.net/zhangyang0402/archive/2010/04/08/5465032.aspx

一、概述

在整个AES加密中,SBox被使用到了两次:一次是在密钥(Cipher Key)扩展生成轮密钥(Round Key)的时候,另一次是轮加密的第一步字节替换(SubByte)

根据FIPS 197SBox的生成分两步:

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=b0b4b5b6b7c0=0

b’1=b1b5b6b7b0c1=1

b’2=b2b6b7b0b1c2=0

b’3=b3b7b0b1b2c3=1

b’4=b4b0b1b2b3c4=0

b’5=b5b1b2b3b4c5=0

b’6=b6b2b3b4b5c6=1

b’7=b7b3b4b5b6c7=1

B’=11001010={ca}

 

{74}经仿射变换,结果为{ca}

因此,在SBox中,第10元素的对应值为{ca}。其他元素也可相继求出。规定 {00}映射到其本身。

 

 

AES SBox的线性逼近表是一种用于分析AES加密算法的线性逼近攻击方法。它可以用于破解AES加密的密钥,是密码学领域常用的攻击方式之一。 线性逼近表的生成过程是这样的:首先,我们需要选取一组输入和输出的二进制比特串,这组比特串应该尽可能的多,以便于在逼近表观察到更多的线性关系。然后,我们需要计算输入和输出比特串之间的线性关系。这个线性关系通常表示为一个布尔函数,其输入比特串是布尔变量,输出比特串是函数的值。最后,我们需要计算这个布尔函数在所有可能输入上的期望值,这个期望值就是线性逼近表的表项。 具体地,计算线性逼近表的方法如下: 1. 选取一组尽可能多的输入和输出比特串。 2. 对于每一组输入和输出比特串,计算它们之间的线性关系。这个线性关系可以用一个布尔函数来表示。 3. 对于每一个可能的输入比特串,计算这个布尔函数在该输入上的期望值,即计算所有输出比特串的乘积之和,再除以总共的输出比特串的个数。这个期望值就是线性逼近表的表项。 计算出线性逼近表后,我们可以使用这个表来分析AES加密算法的密钥。具体地,我们可以将AES加密算法的SBox看作一个函数,该函数的输入是8比特的二进制数,输出也是8比特的二进制数。然后,我们可以将输入分为两个4比特的半字节,将输出分为两个4比特的半字节。对于每一组半字节,我们可以使用线性逼近表来计算它们之间的线性关系,并得到一个线性逼近值。最后,我们可以将两个半字节的线性逼近值相加,得到整个SBox的线性逼近值。 使用线性逼近表可以有效地分析AES加密算法的密钥。但是,由于线性逼近表只能找到线性关系,因此对于非线性的AES加密算法,线性逼近表的攻击效果可能会受到限制。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值