对称分组密码(中AES)_第1页
对称分组密码(中AES)_第2页
对称分组密码(中AES)_第3页
对称分组密码(中AES)_第4页
对称分组密码(中AES)_第5页
已阅读5页,还剩146页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

密码学

第四讲对称分组密码AESwzy@武汉大学高级加密标准AESAES的概况总体结构AES数学基础算法描述算法的实现安全性及评价补充内容:AES数学基础代数群、环、域模运算与剩余类多项式运算F2运算代数结构除法与余数剩余类定义比n小的非负整数集合为Zn:Zn={0,1,…,(n-1)}该集合被称为剩余类集,或模n的剩余类。

Zn是有乘法单位元的交换环。模8运算模7运算剩余类Zn是有乘法单位元的交换环。n为素数时,Zn中的每个非零元素都有乘法逆元,构成有限域。有限域的阶(元素的个数)必须是素数的幂pn,n为正整数,记为GF(pn)Z7对于模7的加法和乘法构成有限域GF(7)Z8对于模2的多项式加法和乘法构成有限域GF(23)多项式运算n次多项式多项式加法乘法12AES数学基础二元域F2运算举例+:0+0=0,0+1=1*:1*1=1/:1-1=1系数在二元域中的多项式运算既约多项式域F上的多项式f(x)被称为不可约的(既约的)当且仅当f(x)不能表示为两个多项式的积(两个多项式都在F上,次数都低于f(x)的次数)。与整数相似,一个不可约多项式也被称为素多项式。如GF(2)上的多项式f(x)=x4+1是可约的因为x4+1=(x+1)(x3+x2+x+1)

使用有限域GF(2n)的动机与给定的二进制位数所能表达的信息对应易于软硬件实现

但是,以2n为模的运算不一定构成有限域,如模8运算。非零元素1234567在Z8中的出现次数48412484在GF(23)中的出现次数7777777模8运算GF(23)运算GF(pn)运算有限域GF(pn)的构造方法该运算遵循基本代数规则中的普通多项式运算规则。系数运算以p为模,即遵循有限域Zp上的运算规则。如果乘法运算的结果是次数大于n-1的多项式,那么必须将其除以某个次数为n的既约多项式m(x)并取余式。对于多项式f(x),这个余数可表示为r(x)=f(x)modm(x)。GF(23)运算选择一个3次既约多项式只有两个满足条件的多项式:x3+x2+1和x3+x+1本例中选择既约多项式x3+x+1生成元为010阶为q的有限域F的生成元是一个元素,记作g,该元素的前q-1个幂构成了F的所有非零元素,即域F的元素为0,g0,…,gq-2。一个不可约多项式的根g是这个不可约多项式定义的有限域的生成元,即f(g)=0

GF(23)运算22AES数学基础GF(28)

运算GF(2)上的多项式运算,模11B:x8+x4+x3+x+

1举例+:(x2+1)+(x+1)=x2+x*:(x4+1)*(x4+x)=x8+x5+x4+x=x5+x3+1/:x*(x7+x3+x2+1)=x8+x4+x3+x=1映射:101+011=110,10001*10010=10100123AES数学基础F28上的多项式运算,模x4+1举例:101x2+011x2=110x2,101x2*011x2=1111x4=1111AES的数学基础(1)有限域GF(28)上定义了4种运算:“+”、“·”、“·xtime”和带系数的多项式乘运算“”。对字节b,用多项式表示为:

b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+b0“+”运算:两个字节相加,相当于字节的每一位简单异或。例:’57’+’83’=‘d4’(57)16=(01010111)2→x6+x4+x2+x+1(83)16=(10000011)2→x7+x+1’57’+’83’→(x6+x4+x2+x+1)+(x7+x+1)=x7+x6+x4+x2→(11010100)2=(d4)16AES的数学基础(2)“·”运算:选择一个不可约多项式:m(x)=x8+x4+x3+x+1,“·”运算为两多项式相乘后进行模m(x)的运算。例:’57’·’83’=‘c1’(57)16=(01010111)2→x6+x4+x2+x+1(83)16=(10000011)2→x7+x+1’57’·’83’→(x6+x4+x2+x+1)·(x7+x+1)mod(x8+x4+x3+x+1)=x13+x11+x9+x8+x7+x7+x5+x3+x2+

x+x6+x4+x2+x+1)mod(x8+x4+x3+x+1)

=(x13+x11+x9+x8+x6+x5+x4+x3+1)mod(x8+x4+x3+x+1)

=x7+x6+1→(11000001)2=(c1)16(x13+x11+x9+x8+x6+x5+x4+x3+1)mod(x8+x4+x3+x+1)

:X5+x3x8+x4+x3+x+1x13+x11+x9+x8+x6+x5+x4+x3+1x13+x9+x8+x6+x5x7+x6+1x11+x4+x3+1x11+x7+x6+x4+x3AES的数学基础(2)倍乘“xtime”运算:定义为x·b(x)modm(x)。例:xtime(57)=x(x6+x4+x2+x+1)modx8+x4+x3+x+1=x7+x5+x3+x2+x=’AE’按定义有:等价于:AES的数学基础(2)带系数的多项式乘运算“”:GF(28)上的多项式a(x)和b(x)相乘模x4+1的积(表示为c(x)=a(x)·b(x)x·b(x)=b2x3+b1x2+b0x1+b3modx4+1

高级加密标准AESAES的概况总体结构AES数学基础算法描述算法的实现安全性及评价一、AES的概况1、历史时间:1997年美国政府向社会公开征集高级数据加密标准(AES);1998年8月20日从应征的21个算法中选出15个。1999年8月又选中其中5个算法。2000年10月2日再选出1个算法。2001年11月26日接受其作为标准。2001年12月4日正式公布:FIPS-197。一、AES的概况2、AES产生的背景①1984年12月里根总统下令由国家保密局研制新密码标准,以取代DES。②1991年新密码开始试用并征求意见。民众要求公开算法,并去掉法律监督。

③1994年颁布新密码标准(EES)。④1995年5月贝尔实验室的博士生M.Blaze在PC机上用45分钟攻击法律监督字段获得成功。

⑤1995年7月美国政府放弃用EES加密数据。AES产生的背景1997年4月15日,NIST发起征集高级加密标准(AdvancedEncryptionStandard)AES的活动,活动目的是确定一个非保密的、可以公开技术细节的、全球免费使用的分组密码算法,作为新的数据加密标准。对AES的基本要求是:比三重DES快、至少与三重DES一样安全;无类别的;可公开的;无特权的;数据分组长度为128比特;密钥长度为128/192/256比特。AES产生的背景1998年6月NIST共收到21个提交的算法,在同年的8月首届AES会议上指定了15个候选算法。1999年3月22日第二次AES会议上,将候选名单减少为5个,这5个算法是MARS,RC6,Rijndael,SERPENT,和Twofish。AES产生的背景MARS(由IBM公司研究部门的一个庞大团队发布,对它的评价是算法复杂、速度快、安全性高)RC6(由RSA实验室发布,对它的评价是极简单、速度极快、安全性低)Rijndael(由JoanDaemen和VincentRijmen两位比利时密码专家发布,对它的评价是算法简洁、速度快、安全性好)Serpent(由RossAnderson,EliBiham和LarsKnudsen发布,对它的评价是算法简洁、速度慢、安全性极高)Twofish(由Counterpane公司一个庞大的团队发布,对它的评价是算法复杂、速度极快、安全性高)AES产生的背景从全方位考虑,Rijndael汇聚了安全,性能,效率,易用和灵活等优点,使它成为AES最合适的选择2000年10月NIST宣布Rijndael算法被选为高级加密标准2001年11月发布为联邦信息处理标准(FederalInformationProcessingStandard,FIPS),用于美国政府组织保护敏感信息的一种特殊的加密算法,即FIPSPUB197标准一、AES的概况⑥美国密码政策的变化

公开设计秘密设计公开设计3、设计原则

①安全性:抵抗所有已知攻击;

②实用性:适应各种环境,速度快;

③扩展性:分组长度和密钥长度可扩展。

DESEESAESDES和AES的比较DESAES日期1976年1999年分组大小64b128b、192b、256b密钥长度56b(有效长度)128b、192b、256b(可能更长)加密原语代替、置换代替、移位、位混合算法公开公开设计基本原理未公开公开选择过程保密保密,但接受公开评论来源IBM,由NSA加强比利时密码学家一、AES的概况4、整体特点

①分组密码:明文长度、密文长度、密钥长度可变(128/192/256等)。现在一般取128。

②面向二进制的密码算法:能够加解密任何形式的计算机数据。

③不是对合运算:加、解密使用不同的算法。④综合运用置换、代替、代数等多种密码技术⑤整体结构:基本轮函数加迭代。圈数可变,≥10分组长度(bit)128192256密钥长度(bit)128192256表1.分组长度和密钥长度的不同取值AES算法简介AES算法的轮数和明文分组长度及密钥长度的关系为:除最后一轮不做列混淆变换外,每一轮都经过4步相同的操作:轮数明文128b明文192b明文256b密钥128b101214密钥192b121214密钥256b141414Round(State,RoundKey){ByteSub(State);//S-盒

ShiftRow(State);//行循环左移

MixColumn(State);//列混淆变换

AddRoundKey(State,RoundKey);//与扩展密钥相异或}一、AES的概况5、应用

①许多国际组织采用为标准。②已经大范围应用。③产品形式:软件(嵌入式,应用软件)硬件(单片,插卡) Intel指令集6、结论只有通过实际应用的检验才能证明其安全。我们相信:经过全世界广泛分析的AES是不负众望的。二、总框图128位明文初始圈密钥加S盒变换行移位与列混淆圈密钥加128位密文迭代控制密钥圈密钥产生圈函数AES算法中的数据结构AES算法中进行运算的单位包括:1个字节1列1行用字节数组表示的整个加密块加密块数组中,n可以是3,5,7,所代表的加密块分别表示128bit,192bit和256bit。ai,ja0,ja1,ja2,ja3,jai,0ai,1…ai,3a0,2a0,3a1,2a1,3a2,2a2,3a0,0a0,1a1,0a1,1a2,0a2,1a3,0a3,1a3,2a3,3…a0,n…a1,n…a2,n…a3,nAES算法中的数据结构1、AES的数学基础是有限域GF(28)一个GF(2)上的8次既约多项式可生成一个GF(28)GF(28)的全体元素构成加法群,线性空间。GF(28)的非零元素构成乘法循环群。GF(28)中的元素有多种表示:字节次数低于8次的多项式指数形式

对数形式

GF(28)的特征为2。

三、数学基础有限域GF(28)上定义了4种运算:定义3-2:“+”加法定义3-3:“·”乘法定义3-5:“·xtime”x乘定义3-8:带系数的多项式乘运算“”三、数学基础49数学基础GF(28)

运算GF(2)上的多项式运算,模11B:x8+x4+x3+x+

1举例+:(x2+1)+(x+1)=x2+x*:(x4+1)*(x4+x)=x8+x5+x4+x=x5+x3+1/:x*(x7+x3+x2+1)=x8+x4+x3+x=1映射:101+011=110,10001*10010=101001三、数学基础2、AES的GF(28)表示AES采用的模多项式生成GF(28):

m(x)=x8+x4+x3+x+1AES采用GF(28)的多项式元素表示。

字节B=b7b6b5b4b3b2b1b0可表示成GF(2)上的多项式:

b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x1+b0

例:字节57=01010111的多项式表示:

01010111x6+x4+x2+x+1

三、数学基础2、AES的GF(28)表示加法:两元素多项式的系数按位模2加例2:57+83=D4(x6+x4+x2+x+1)⊕(x7+x+1)=x7+x6+x4+x2

乘法:两元素多项式相乘,模m(x)

例3:57×83=C1

(x6+x4+x2+x+1)×(x7+x+1)=x7+x6+1modm(x)

乘法单位元:字节01多项式1乘法逆元:设a(x)的逆元为b(x),则a(x)b(x)=1modm(x)。根据Euclid算法求出。

三、数学基础“·”运算:选择一个不可约多项式:m(x)=x8+x4+x3+x+1,“·”运算为两多项式相乘后进行模m(x)的运算。例:’57’·’83’=‘c1’(57)16=(01010111)2→x6+x4+x2+x+1(83)16=(10000011)2→x7+x+1’57’·’83’→(x6+x4+x2+x+1)·(x7+x+1)mod(x8+x4+x3+x+1)=x13+x11+x9+x8+x7+x7+x5+x3+x2+

x+x6+x4+x2+x+1)mod(x8+x4+x3+x+1)

=(x13+x11+x9+x8+x6+x5+x4+x3+1)mod(x8+x4+x3+x+1)

=x7+x6+1→(11000001)2=(c1)16三、数学基础(x13+x11+x9+x8+x6+x5+x4+x3+1)mod(x8+x4+x3+x+1)

:X5+x3x8+x4+x3+x+1x13+x11+x9+x8+x6+x5+x4+x3+1x13+x9+x8+x6+x5x7+x6+1x11+x4+x3+1x11+x7+x6+x4+x32、AES的GF(28)表示加法:两元素多项式的系数按位模2加例2:57+83=D4(x6+x4+x2+x+1)⊕(x7+x+1)=x7+x6+x4+x2

乘法:两元素多项式相乘,模m(x)

例3:57×83=C1

(x6+x4+x2+x+1)×(x7+x+1)=x7+x6+1modm(x)

乘法单位元:字节01多项式1乘法逆元:设a(x)的逆元为b(x),则a(x)b(x)=1modm(x)。根据Euclid算法求出。

三、数学基础例:求(x7+x+1)-1modm(x)2、AES的GF(28)表示

x乘法xtime:用x乘GF(28)的元素例:

xtime(57)=x(x6+x4+x2+x+1)=x7+x5+x3+x2+x

xtime(83)=x(x7+x+1)=x8+x2+xmodm(x)=x4+x3+x2+1若x7的系数=0,则为简单相乘:系数左移。若x7的系数=1,则取模m(x),加x8+x4+x3+x+1

三、数学基础倍乘“xtime”运算:定义为x·b(x)modm(x)。例:xtime(57)=x(x6+x4+x2+x+1)modx8+x4+x3+x+1=x7+x5+x3+x2+x=’AE’按定义有:等价于:三、数学基础3、AES的字表示一个字=4个字节一个字表示为系数取自GF(28)上的次数低于4次的多项式例:

字:57834AD157x3+83x2+4Ax+D1字加法:两多项式系数按位模2加

字乘法:设a和c是两个字,a(x)和c(x)是其字多项式,AES定义a和c的乘积为

b(x)=a(x)c(x)modx4+1

三、数学基础60数学基础F28上的多项式运算+和,模x4+1定义3-7:101x2+011x2=110x2定义3-8:101x2

011x2=1111x4=1111三、数学基础3、AES的字表示字乘法:设a(x)=a3x3+a2x2+a1x+a0c(x)=c3x3+c2x2+c1x+c0b(x)=b3x3+b2x2+b1x+b0则c(x)=a(x)b(x)modX4+1的系数:

c0=a0b0+a3b1+a2b2+a1b3c1=a1b0+a0b1+a3b2+a2b3c2=a2b0+a1b1+a0b2+a3b3c3=a3b0+a2b1+a1b2+a0b3

三、数学基础带系数的多项式乘运算“”:GF(28)上的多项式a(x)和b(x)相乘模x4+1的积(表示为c(x)=a(x)b(x)注意:X4modX4+1=1,X5modX4+1=X,X6modX4+1=X2三、数学基础带系数的多项式乘运算“”:GF(28)上的多项式a(x)和b(x)相乘模x4+1的积(表示为c(x)=a(x)b(x)modX4+1xb(x)=b2x3+b1x2+b0x1+b3modx4+1

三、数学基础3、AES的字表示字乘法:写成矩阵形式则

c0b0b3b2b1a0c1

=b1b0b3b2a1c2b2b1b0b3a2c3b3b2b1b0a3注意:1.x4+1是可约多项式,字c(x)不一定有逆;2.在AES中选择c(x)固定,且有逆。

三、数学基础3、AES的字表示字x乘法:p(x)=xa(x)modx4+1写成矩阵形式则

p0=00

00

00

01

a0p1=01

00

00

00

a1p2=00

01

00

00

a2p3=00

00

01

00

a3注意:因为模x4+1,字x乘法相当于字节循环移位;

三、数学基础3、AES的字表示字x乘法:p(x)=xa(x)modx4+1模x4+1,字x乘法相当于按字节循环移1个字节;推广——字xn乘法:p(x)=xna(x)modx4+1思考:相当于按字节循环移?个字节

三、数学基础四、AES的基本变换1、AES的数据处理单位

①字节;②字;③状态。2、状态

①加解密过程中的中间数据。

②以字节为元素的矩阵,或二维数组。AES算法加密部分的实现明文分组和密钥的组织排列方式01234567891011121314150481215913261014371115图1:以明文分组为128bits为例组成的阵列048121591326101437111504812162015913172126101418223711151923048121620242815913172125292610141822263037111519232731图2.以明文分组(或密钥)为128bits、192bits、256bits为例组成的阵列四、AES的基本变换2、状态

③符号:Nb-明密文所含的数据的字数。

Nk-密钥所含的数据的字数。

Nr-迭代圈数。④例:Nb=4时的状态Nk=4时的密钥数组

a0,0a0,1a0,2a0,3k0,0k0,1k0,2k0,3a1,0a1,1a1,2a1,3k1,0k1,1k1,2k1,3a2,0a2,1a2,2a2,3k2,0k2,1k2,2k2,3a3,0a3,1a3,2a3,3k3,0k3,1k3,2k3,3

四、AES的基本变换2、状态

⑤Nb、Nk、Nr之间的关系:

NrNb=4Nb=6Nb=8Nk=4101214Nk=6121214Nk=8141414

分组长度和密钥长度均为128bits时的Rijndael加密算法框图Data/KeyAdditionRnd0Rnd1Rnd8FinalRndKeySchedule密文Key明文四、AES的基本变换3、圈变换-加密轮函数

①标准圈变换:

Round(State,RoundKey)ByteSub(State);S盒变换

ShiftRow(State);行移位变换

MixColumn(State);列混淆变换

AddRoundKey(State,RoundKey)圈密钥加变换四、AES的基本变换3、圈变换-加密轮函数

②最后一圈的圈变换:

Round(State,RounKey)ByteSub(State);S盒变换

ShiftRow(State);行移位变换

AddRoundKey(State,RoundKey)圈密钥加变换注:最后一圈的圈变换中没有列混淆变换。用伪代码表示的Rijndael轮变换一般的轮变换Round(State,RoundKey){ByteSubstitution;ByteRotation;MixColumn;AddRounKey;}结尾轮变换FinalRound(State,RoundKey){ByteSubstituion;ByteRotation;AddRoundKey;}RijndaelRound的构成ByteSubstitutionByteRotationMixColumn+RoundKey一般的轮变换ByteSubstitutionByteRotation+RoundKey最后一轮的轮变换四、AES的基本变换4、S盒变换ByteSub(State)

①S盒变换是AES的唯一的非线性变换,是AES安全的关键。②AES使用16个相同的S盒,DES使用8个不相同的S盒。③AES的S盒有8位输入8位输出,DES的S盒有6位输入4位输出。

S盒(AES)S盒(DES)8864四、AES的基本变换4、S盒变换ByteSub(State)

④S盒变换:a)将输入字节用其GF(28)上的逆来代替;

b)对a)的结果作如下的仿射变换:(以x0-x7作输入,以y0-y7作输出。)ByteSubstitution

该变换可以用一个256字节的表来实现B0,0B0,1B0,2B0,3B1,0B1,1B1,2B1,3B2,0B2,1B2,2B2,3B3,0B3,1B3,2B3,3A0,0A0,1A0,2A0,3A1,0A1,1A1,2A1,3A2,0A2,1A2,2A2,3A3,0A3,1A3,2A3,3取逆仿射变换四、AES的基本变换4、S盒变换ByteSub(State)

y010001111x01y111000111x11y211100011x20y3=11110001x3+0y411111000x40y501111100x51y600111110x61y700011111x70四、AES的基本变换4、S盒变换ByteSub(State)

④S盒变换

注意:S盒变换的第一步是把字节的值用它的乘法逆来代替,是一种非线性变换。由于系数矩阵中每列都含有5个1,这说明改变输入中的任意一位,将影响输出中的5位发生变化。由于系数矩阵中每行都含有5个1,这说明输出中的每一位,都与输入中的5位相关。四、AES的基本变换5、行移位变换ShiftRow(State)①行移位变换对状态的行进行循环移位。②第0行不移位,第1行移C1字节,第2行移C2字节,第3行移C3字节。③C1,C2,C3按表取值

NbC1C2C341236123ByteRotation04812159132610143711150481259131101426153711循环左移1字节循环左移2字节循环左移3字节四、AES的基本变换5、行移位变换ShiftRow(State)④行移位变换属于置换,本质在于把数据打乱重排。⑤AES的行移位变换属于线性变换。四、AES的基本变换6、列混淆变换MixColumn(State)①列混淆变换把状态的列视为GF(28)上的多项式a(x),乘以一个固定的多项式c(x),并模x4+1:b(x)=a(x)c(x)modx4+1其中,c(x)=03x3+01x2+01x+02②列混淆变换属于代替变换。③c(x)与x4+1互素,从而保证c(x)存在逆多项式d(x),而c(x)d(x)=1mod。只有逆多项式d(x)存在,才能正确进行解密。MixColumn

这一运算作用在每一列上A0,0A0,1A0,2A0,3A1,0A1,1A1,2A1,3A2,0A2,1A2,2A2,3A3,0A3,1A3,2A3,3B0,0B0,1B0,2B0,3B1,0B1,1B1,2B1,3B2,0B2,1B2,2B2,3B3,0B3,1B3,2B3,3×C(X)6、列混淆变换MixColumn(State)b(x)=a(x)c(x)modx4+1写成矩阵形式

b0=02

03

01

01

a0b1=01

02

03

01

a1b2=01

01

02

03

a2b3=03

01

01

02

a3

四、AES的基本变换MixColumn运算举例87F24D976E4C90EC46E74AC3A68CD8954740A34C37D4709F94E43A42EDA5A6BC×C(X)MixColumn运算举例87F24D976E4C90EC46E74AC3A68CD8954740A34C37D4709F94E43A42EDA5A6BC×C(X)MixColumn运算举例87F24D976E4C90EC46E74AC3A68CD8954740A34C37D4709F94E43A42EDA5A6BC×C(X)MixColumn运算举例87F24D976E4C90EC46E74AC3A68CD8954740A34C37D4709F94E43A42EDA5A6BC×C(X)7、圈密钥加变换AddRoundKey()①

把圈密钥与状态进行模2相加。②圈密钥根据密钥产生算法产生。③圈密钥长度等于数据块长度。

四、AES的基本变换A0,0A0,1A0,2A0,3A1,0A1,1A1,2A1,3A2,0A2,1A2,2A2,3A3,0A3,1A3,2A3,3K0,0K0,1K0,2K0,3K1,0K1,1K1,2K1,3K2,0K2,1K2,2K2,3K3,0K3,1K3,2K3,3+B0,0B0,1B0,2B0,3B1,0B1,1B1,2B1,3B2,0B2,1B2,2B2,3B3,0B3,1B3,2B3,3A3,3+K3,3=B3,3(mod2)①圈密钥根据密钥产生算法通过用户密钥得到。②密钥产生分两步进行:密钥扩展和圈密钥选择③密钥扩展将用户密钥扩展为一个扩展密钥。④密钥选择从扩展密钥中选出圈密钥。

五、圈密钥生成1、密钥扩展①密钥扩展产生扩展密钥。②用一个字元素的一维数组W[Nb*(Nr+1)]表示扩展密钥。

③用户密钥放在数组最开始的Nk个字中。④其它的字由它前面的字经过处理后得到。⑤有Nk≤6和Nk>6两种密钥扩展算法。

五、圈密钥生成1、密钥扩展⑴Nk≤6的密钥扩展①最前面的Nk个字是由用户密钥填充的。②之后的每一个字W[j]等于前面的字W[j-1]与Nk个位置之前的字W[j-Nk]的异或。③而且对于Nk的整数倍的位置处的字,在异或之前,对W[j-1]进行Rotl变换和ByteSub变换,再异或一个圈常数Rcon。

五、圈密钥生成五、圈密钥生成W0W1W2…WNk-1WNkWNk+1…

用户密钥

当j不是Nk的整数倍时:

Wj=Wj-Nk⊕Wj-1当j是Nk的整数倍时:Wj=Wj-Nk⊕ByteSub(Rotl(Wj-1))⊕Rcon[j/Nk];

Wi-4Wi-3Wi-2Wi-1WiByteSubstituionByteRotate+Rcons+Keyexpansion4=<i<4(Rnd+1)imod4=0imod4!=0说明:

Rotl是一个字里的字节以字节为单位循环左移位函数,设W=(A,B,C,D),则Rotl(W)=(B,C,D,A)。圈常数Rcon与Nk无关,且定义为:

Rcon[i]=(RC[i],‘00’,‘

00’,‘

00’)RC[1]=‘01’RC[i]=xtime(RC[i-1])

五、圈密钥生成密钥扩展K0,0K0,1K0,2K0,3K1,0K1,1K1,2K1,3K2,0K2,1K2,2K2,3K3,0K3,1K3,2K3,3K0K1K2K3K0K1K2K3K4K5K6K7+++K0K1K2K3K4K5K6K7ByteSubstitutionByteRotate+Rcon102

KeyExpansion

KeyLength<=192bit2、圈密钥选择

根据分组的大小,依次从扩展密钥中取出圈密钥。前面的Nb个字作为圈密钥0,接下来的Nb个字作为圈密钥1。…

WW0W1

…WNb-1WNb…

W2Nb-1…

第一圈密钥第二圈密钥

五、圈密钥生成

轮密钥选取W0W1W2W3W4W5W6W7W8W9W10W11W12轮密钥0轮密钥1轮密钥21、密钥扩展⑵Nk>6的密钥扩展说明:与Nk≤6的密钥扩展相比,Nk>6的密钥扩展的不同之处在于:如果j被Nk除的余数=4,则在异或之前,对W[j-1]进行ByteSub变换。

五、圈密钥生成106

KeyExpansion

KeyLength=256bit六、AES的加密算法AES的加密算法由以下部分组成:①一个初始圈密钥加变换。②Nr-1圈的圈变换。③最后一圈变换。Rijndael加密及解密的标准结构Block,KeyLength=128bitsPlaintext(128bits)ByteSubstitutionMixColumn+Ciphertext(128bits)K0Kii=10ByteRotationfori=1to10Ciphertext(128bits)K10InvMixCoumnInvByteRotationInvByteSubstitution++Ki+Plaintext(128bits)i=9fori=9to0加密解密六、AES的加密算法Encryption(State,CipherKey)

{

KeyExpansion(CipherKey,RoundKey)AddRoundKey(State,RoundKey)For(I=1;I<Nr;I++)Round(State,RoundKey){ByteSub(State);ShiftRow(State);MixColumn(State);AddRoundKey(State,RoundKey)}六、AES的加密算法FinalRound(State,RoundKey){ByteSub(State);ShiftRow(State);AddRoundKey(State,RoundKey);}}注意:

第一步和最后一步都用了圈密钥加,因为任何没有密钥参与的变换都是容易被攻破的。AES算法的一般描述

算法可逆是对加密算法的基本要求。AES的加密算法不是对合运算,解密算法与加密算法不同。AES的巧妙之处:虽然解密算法与加密算法不同,但解密算法与加密算法的结构相同。把加密算法的基本运变换成逆变换,便得到解密算法。

七、AES的基本逆变换AES的各个基本变换都是可逆的。1、圈密钥加变换的逆就是其本身

(AddRoundKey)-1=AddRoundKey2、行移位变换的逆是状态的后三行分别移位Nb-C1,Nb-C2,Nb-C3个字节。

七、AES的基本逆变换3、列混淆变换的逆因为列混淆变换是把状态的每一列都乘以一个固定的多项式c(x):b(x)=a(x)c(x)modx4+1所以列混淆变换的逆就是状态的每列都乘以c(x)的逆多项式d(x):

d(x)=(c(x))-1modx4+1c(x)=03x3+01x2+01x+02d(x)=0Bx3+0Dx2+09x+0E七、AES的基本逆变换4、S盒变换的逆首先进行逆仿射变换;再把每个字节用其在GF(28)中的逆来代替。

七、AES的基本逆变换S盒的逆仿射变换:

00100101y01x0

10010010y11x101001001y20x210100100y30x3

01010010y4⊕0=x4

00101001y51x510010100y61x601001010y70x7

七、AES的基本逆变换5、解密的密钥扩展解密的密钥扩展与加密的密钥扩展不同;解密的密钥扩展定义如下:①加密算法的密钥扩展。②把InvMixColumn应用到除第一和最后一圈外的所有圈密钥上。七、AES的基本逆变换6、逆圈变换标准逆圈变换

Inv_Round(State,Inv_RoundKey){Inv_ByteSub(State);Inv_ShiftRow(State);Inv_MixColunm(State);AddRoundKey(State,Inv_RoundKey);}七、AES的基本逆变换6、逆圈变换最后一圈的逆变换:

Inv_FinalRound(State,Inv_RoundKey){Inv_ByteSub(State);Inv_ShiftRow(State);AddRoundKey(State,Inv_RoundKey);}

七、AES的基本逆变换八、AES的解密算法加密算法不是对合运算:

(AES)-1≠AES解密算法的结构与加密算法的结构相同解密中的变换为加密算法变换的逆变换,且密钥扩展策略稍有不同。八、AES的解密算法Decryption(State,CipherKey){Inv_KeyExpansion(CipherKey,Inv_RoundKey);AddRoundKey(State,Inv_RoundKey);For(I=1;I<Nr;I++)Inv_Round(State,Inv_RoundKey);{Inv_ByteSub(State);Inv_ShiftRow(State);Inv_MixColumn(State);AddRoundKey(State,Inv_RoundKey;}

八、AES的解密算法Inv_FinalRound(State,Inv_RoundKey){InvByteSub(State);InvShiftRow(State);AddRoundKey(State,Inv_RoundKey);}}九、AES的实现适应多种环境,高效,方便是AES的突出优点。由于AES的基本运算由ByteSub、MixColumn、ShiftRow和AddRoundKey变换构成,因此AES的实现主要是这些变换的实现。其中ShiftRow和AddRoundKey的实现比较容易,因此主要是ByteSub和MixColumn变换的实现问题。有了这些基本运算的实现,便可以有效地实现整个AES。九、AES的实现实现方法:软件硬件软件方法:基于算法描述基于查表

九、AES的实现1、基于算法描述的软件实现AES的算法描述是一种程序化的描述,便于实现。AES的四种基本变换都比较简单,便于实现。用C语言仿照算法描述,可方便地实现。这种实现的速度不是最快的!九、AES的实现2、基于查表的软件实现用查表实现算法是一种高效的软件设计方法。。时空折换是信息科学的基本策略。用查表实现算法,就是用空间换取时间。目前计算机系统的存储空间大、而且便宜,为查表实现算法提供了物资基础。九、AES的实现2、基于查表的软件实现①S盒的实现实现S盒变换的最快方法是,直接计算出S盒的变换的结果,并存储造表,使用时时直接查表。因为ByteSub变换是字节函数,所以表的规模不大,只含256个元素。注意:解密时用的是逆S盒,因此共需要造两个S盒表。S盒表逆S盒表

①列混淆变换MixColumn的实现b(x)=a(x)c(x)modx4+1写成矩阵形式

b0=02

03

01

01

a0b1=01

02

03

01

a1b2=01

01

02

03

a2b3=03

01

01

02

a3主要运算是GF(28)上的乘法GF(28)的非零元素构成循环群,可通过加法和查表实现乘法。

九、AES的实现②列混淆变换MixColumn的实现注意:解密需要逆变换a(x)=b(x)d(x)modx4+1d(x)=0Bx3+0Dx2+09x+0E写成矩阵形式

a0=0E

0B

0D

09

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论