1、2023-4-271 第四章第四章 分组密码分组密码一、分组密码概述一、分组密码概述二、分组密码运行模式二、分组密码运行模式三、三、DESDES四、四、AESAES五、分组密码的分析五、分组密码的分析2023-4-272一、分组密码概述一、分组密码概述2023-4-273分组密码概述分组密码概述n分组密码是许多系统安全的一个重要组成部分。分组密码是许多系统安全的一个重要组成部分。可用于构造可用于构造n拟随机数生成器拟随机数生成器n流密码流密码n消息认证码消息认证码(MAC)MAC)和杂凑函数和杂凑函数n消息认证技术、数据完整性机构、实体认证协议以消息认证技术、数据完整性机构、实体认证协议以及单
2、钥数字签字体制的核心组成部分及单钥数字签字体制的核心组成部分。2023-4-274应用中对于分组码的要求应用中对于分组码的要求n安全性安全性n运行速度运行速度n存储量存储量(程序的长度、数据分组长度、高速缓程序的长度、数据分组长度、高速缓存大小存大小)n实现平台实现平台(硬、软件、芯片硬、软件、芯片)n运行模式运行模式2023-4-275分组密码概述分组密码概述 明文序列明文序列 x1,x2,xi,加密函数加密函数E:VnKVn 这种密码实质上是字长为这种密码实质上是字长为m的数字序列的代换密码的数字序列的代换密码。解密算法加密算法密钥k=(k0,k1,kt-1)密钥k=(k0,k1,kt-1
3、)明文明文x=(x0,x1,xm-1)明文明文x=(x0,x1,xm-1)密文密文x=(y0,y1,ym-1)2023-4-276分组密码概述分组密码概述n通常取通常取n=m。n若若nm,则为有数据扩展的分组密码。则为有数据扩展的分组密码。n若若n0,L(i)=L(i-1)1 if the first bit of L(i-1)is 0 L(i)=(L(i-1)1 if the last bit of L is 0,L(-1)=L1 xor 0 x80000000000000000000000000000043 otherwise.2023-4-2743比较和选用比较和选用nECB模式,简单、
4、高速,但最弱、易受重发攻击,模式,简单、高速,但最弱、易受重发攻击,一般不推荐。一般不推荐。nCBC适用于文件加密,但较适用于文件加密,但较ECB慢。安全性加强。慢。安全性加强。当有少量错误时,也不会造成同步错误。当有少量错误时,也不会造成同步错误。nOFB和和CFB较较CBC慢许多。每次迭代只有少数慢许多。每次迭代只有少数bit完成加密。若可以容忍少量错误扩展,则可换来完成加密。若可以容忍少量错误扩展,则可换来恢复同步能力,此时用恢复同步能力,此时用CFB。在字符为单元的流在字符为单元的流密码中多选密码中多选CFB模式。模式。nOFB用于高速同步系统,不容忍差错传播。用于高速同步系统,不容忍
5、差错传播。2023-4-2744三、三、美国数据加密标准美国数据加密标准DES(Data Encryption Standard)2023-4-2745美国制定数据加密标准简况美国制定数据加密标准简况n目的目的 通信与计算机相结合是人类步入信息社会的一个阶梯,通信与计算机相结合是人类步入信息社会的一个阶梯,它始于六十年代末,完成于它始于六十年代末,完成于90年代初。计算机通信网的形年代初。计算机通信网的形成与发展,要求信息作业标准化,安全保密亦不例外。只成与发展,要求信息作业标准化,安全保密亦不例外。只有标准化,才能真正实现网的安全,才能推广使用加密手有标准化,才能真正实现网的安全,才能推广使
6、用加密手段,以便于训练、生产和降低成本。段,以便于训练、生产和降低成本。2023-4-2746美国制定数据加密标准简况美国制定数据加密标准简况n美国美国NBS在在1973年年5月月15公布了征求建议。公布了征求建议。1974年年8月月27日日NBS再次出公告征求建议,对建议方案提出如下再次出公告征求建议,对建议方案提出如下要求:要求:n算法必须完全确定而无含糊之处;算法必须完全确定而无含糊之处;n算法必须有足够高的保护水准,即可以检测到威胁,算法必须有足够高的保护水准,即可以检测到威胁,恢复密钥所必须的运算时间或运算次数足够大;恢复密钥所必须的运算时间或运算次数足够大;n保护方法必须只依赖于密
7、钥的保密;保护方法必须只依赖于密钥的保密;n对任何用户或产品供应者必须是不加区分的。对任何用户或产品供应者必须是不加区分的。2023-4-2747美国制定数据加密标准简况美国制定数据加密标准简况nIBM公司在公司在1971年完成的年完成的LUCIFER密码密码(64 bit分组,代分组,代换换-置换,置换,128 bit密钥密钥)的基础上,改进成为建议的的基础上,改进成为建议的DES体体制制n1975年年3月月17日日NBS公布了这个算法,并说明要以它作为公布了这个算法,并说明要以它作为联邦信息处理标准,征求各方意见。联邦信息处理标准,征求各方意见。n1977年年1月月15日建议被批准为联邦标
8、准日建议被批准为联邦标准FIPS PUB 46,并并设计推出设计推出DES芯片。芯片。n1981年美国年美国ANSI 将其作为标准,称之为将其作为标准,称之为DEAANSI X3.92n1983年国际标准化组织年国际标准化组织(ISO)采用它作为标准,称作采用它作为标准,称作DEA-1 2023-4-2748美国制定数据加密标准简况美国制定数据加密标准简况nNSA宣布每隔宣布每隔5年重新审议年重新审议DES是否继续作为联邦标准,是否继续作为联邦标准,1988年(年(FIPS46-1)、)、1993年年(FIPS46-2),1998年不再重年不再重新批准新批准DES为联邦标准。为联邦标准。n虽然
9、虽然DES已有替代的数据加密标准算法,但它仍是迄今为止已有替代的数据加密标准算法,但它仍是迄今为止得到最广泛应用的一种算法,也是一种最有代表性的分组加得到最广泛应用的一种算法,也是一种最有代表性的分组加密体制。密体制。n1993年年4月,月,Clinton政府公布了一项建议的加密技术标准,政府公布了一项建议的加密技术标准,称作密钥托管加密技术标准称作密钥托管加密技术标准EES(Escrowed Encryption Standard)。算法属美国政府。算法属美国政府SECRET密级。密级。2023-4-2749美国制定数据加密标准简况美国制定数据加密标准简况nDES发展史确定了发展公用标准算法
10、模式,而发展史确定了发展公用标准算法模式,而EES的制定的制定路线与路线与DES的背道而驰。人们怀疑有陷门和政府部门肆意的背道而驰。人们怀疑有陷门和政府部门肆意侵犯公民权利。此举遭到广为反对。侵犯公民权利。此举遭到广为反对。n1995年年5月月AT&T Bell Lab的的M.Blaze博士在博士在PC机上用机上用45分分钟时间使钟时间使SKIPJACK的的 LEAF协议失败,伪造协议失败,伪造ID码获得成码获得成功。功。1995年年7月美国政府宣布放弃用月美国政府宣布放弃用EES来加密数据,只将来加密数据,只将它用于语音通信。它用于语音通信。n1997年年1月美国月美国NIST着手进行着手进
11、行AES(Advanced Encryption Standard)的研究,成立了标准工作室。的研究,成立了标准工作室。2001年年Rijndael被批准为被批准为AES标准。标准。2023-4-2750DES 算法算法n分组长度为分组长度为64 bits(8 bytes)n密文分组长度也是密文分组长度也是64 bits。n密钥长度为密钥长度为64 bits,有有8 bits奇偶校验,有效密钥长奇偶校验,有效密钥长度为度为56 bits。n算法主要包括:初始置换算法主要包括:初始置换IP、16轮迭代的乘积变换、轮迭代的乘积变换、逆初始置换逆初始置换IP-1以及以及16个子密钥产生器。个子密钥产
12、生器。2023-4-2751DES算法框图算法框图 输入 64 bit明文数据 初始置换IP 乘积变换 (16轮迭代)逆初始置换IP-1 64 bit密文数据 输出 标准数据加密算法2023-4-2752初始置换初始置换IPIPn将将64 bit明文的位置进行置换,得到一个乱序的明文的位置进行置换,得到一个乱序的64 bit明文组,而后分成左右两段,每段为明文组,而后分成左右两段,每段为32 bit,以以L0和和R0表示,表示,IP中各列元素位置号数相差为中各列元素位置号数相差为8,相当于将原明,相当于将原明文各字节按列写出,各列比特经过偶采样和奇采样置文各字节按列写出,各列比特经过偶采样和奇
13、采样置换后,再对各行进行逆序。将阵中元素按行读出构成换后,再对各行进行逆序。将阵中元素按行读出构成置换输出。置换输出。n逆初始置换逆初始置换IPIP-1-1。将将16轮迭代后给出的轮迭代后给出的64 bit组进行置组进行置换,得到输出的密文组。输出为阵中元素按行读得的换,得到输出的密文组。输出为阵中元素按行读得的结果。结果。nIP和和IPIP-1-1在密码意义上作用不大,它们的作用在于打乱在密码意义上作用不大,它们的作用在于打乱原来输入原来输入x x的的ASCII码字划分的关系,并将原来明文的码字划分的关系,并将原来明文的校验位校验位x8,x16,x64变成为变成为IP输出的一个字节。输出的一
14、个字节。2023-4-2753 Li-1(32bit)Ri-1(32bit)选择扩展运算 E 48 bit寄存器 按bit模2加密 48 bit寄存器 选择压缩运算 S 32 bit寄存器 置换运算 P 按bit模2和 Li(32bit)Ri(32bit)乘积变换框图乘积变换框图密钥产生器2023-4-2754乘积变换乘积变换n它是它是DES算法的核心部分。将经过算法的核心部分。将经过IP置换后的数据分成置换后的数据分成32 bit的左右两组,在迭代过程中彼此左右交换位置。的左右两组,在迭代过程中彼此左右交换位置。n每次迭代时只对右边的每次迭代时只对右边的32 bit进行一系列的加密变换,在此
15、进行一系列的加密变换,在此轮迭代即将结束时,把左边的轮迭代即将结束时,把左边的32 bit与右边得到的与右边得到的32 bit逐位逐位模模2相加,作为下一轮迭代时右边的段,并将原来右边未经相加,作为下一轮迭代时右边的段,并将原来右边未经变换的段直接送到左边的寄存器中作为下一轮迭代时左边变换的段直接送到左边的寄存器中作为下一轮迭代时左边的段。的段。n在每一轮迭代时,右边的段要经过在每一轮迭代时,右边的段要经过选择扩展运算选择扩展运算E E、密钥加密钥加密运算、选择压缩运算密运算、选择压缩运算S S、置换运算置换运算P P和左右混合运算和左右混合运算。2023-4-2755乘积变换乘积变换 选择扩
16、展运算选择扩展运算E E。将输入的将输入的32 bit Ri-1扩展成扩展成48 bit的输出,令的输出,令s表示表示E原输入数据比特的原下标,则原输入数据比特的原下标,则E的输出是将原下标的输出是将原下标s 0或或1(mod 4)的各比特重复一次得到的,即对原第的各比特重复一次得到的,即对原第32,1,4,5,8,9,12,13,16,17,20,21,24,25,28,29各位都重复一次各位都重复一次,实现数据扩实现数据扩展。将表中数据按行读出得到展。将表中数据按行读出得到48 bit输出。输出。密钥加密运算密钥加密运算。将子密钥产生器输出的。将子密钥产生器输出的48 bit子密钥子密钥k
17、i与选择与选择扩展运算扩展运算E输出的输出的48 bits数据按位模数据按位模2相加。相加。选择压缩运算选择压缩运算S S。将前面送来的将前面送来的48 bit数据自左至右分成数据自左至右分成8组,组,每组为每组为6 bit。而后并行送入而后并行送入8个个S一盒,每个一盒,每个S盒为一非线性代盒为一非线性代换网络,有换网络,有4个输出,运算个输出,运算S的框图在图的框图在图4-4-6中给出。中给出。p.186 图图4-4-6 选择压缩运算选择压缩运算S 置换运算置换运算P P。对对S1至至S8盒输出的盒输出的32 bit数据进行坐标置换,如图数据进行坐标置换,如图4-4-7所示。置换所示。置换
18、P输出的输出的32 bit数据与左边数据与左边32 bit即即Ri-1逐位模逐位模2相加,所得到的相加,所得到的32 bit作为下一轮迭代用的右边的数字段。并作为下一轮迭代用的右边的数字段。并将将Ri-1并行送到左边的寄存器,作为下一轮迭代用的左边的数并行送到左边的寄存器,作为下一轮迭代用的左边的数字段。字段。子密钥产生器。将子密钥产生器。将64 bit初始密钥经过初始密钥经过置换选择置换选择PC1PC1、循环移位循环移位置换、置换选择置换、置换选择PC2PC2给出每次迭代加密用的子密钥给出每次迭代加密用的子密钥ki,参看图参看图4-4-8。在。在64 bit初始密钥中有初始密钥中有8位为校验
19、位,其位置号为位为校验位,其位置号为8、16、32、48、56和和64。其余。其余56位为有效位,用于子密钥计算。将位为有效位,用于子密钥计算。将这这56位送入置换选择位送入置换选择PC1,参看图参看图4-4-9。经过坐标置换后分。经过坐标置换后分成两组,每级为成两组,每级为28 bit,分别送入分别送入C寄存器和寄存器和D寄存器中。在各寄存器中。在各次迭代中,次迭代中,C和和D寄存器分别将存数进行左循环移位置换,移寄存器分别将存数进行左循环移位置换,移位次数在表位次数在表4-4-2中给出。每次移位后,将中给出。每次移位后,将C和和D寄存器原存数寄存器原存数送给置换选择送给置换选择PC2,见图
20、见图4-4-10。置换选择。置换选择PC2将将C中第中第9、18、22、25位和位和D中第中第7、9、15、26位删去,并将其余数字置换位位删去,并将其余数字置换位置后送出置后送出48 bit数字作为第数字作为第i次迭代时所用的子密钥次迭代时所用的子密钥ki。p.186 p.186 图图4-4-7 置换运算置换运算P 图图4-4-8 子密钥产生器框图子密钥产生器框图 表表4-4-2 移位次数表移位次数表 第第i次迭代次迭代 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 循环左移次数循环左移次数 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1 p.
21、187 图图4-4-9 置换选择置换选择PC1 至此,我们已将至此,我们已将DES算法的基本构成作了介绍,加密过程可归算法的基本构成作了介绍,加密过程可归结如下:令结如下:令IP表示初始置换,表示初始置换,KS表示密钥运算,表示密钥运算,i为迭代次数为迭代次数变量,变量,KEY为为64 bit密钥,密钥,f为加密函数,为加密函数,表示逐位模表示逐位模2求和。求和。2023-4-2756选择压缩运算选择压缩运算S 6 bit 选择函数组选择函数组 4 bit 48 bit 寄存器32 bit 寄存器S1S2S3S4S5S6S7S82023-4-2757乘积变换乘积变换 置换运算置换运算P P。对
22、对S1至至S8盒输出的盒输出的32 bit数据进行坐数据进行坐标置换,置换标置换,置换P输出的输出的32 bit数据与左边数据与左边32 bit即即Ri-1逐位模逐位模2相加,所得到的相加,所得到的32 bit作为下一轮迭代用作为下一轮迭代用的右边的数字段。并将的右边的数字段。并将Ri-1并行送到左边的寄存器,并行送到左边的寄存器,作为下一轮迭代用的左边的数字段。作为下一轮迭代用的左边的数字段。子密钥产生器子密钥产生器。将将64 bit初始密钥经过初始密钥经过置换选择置换选择PC1PC1、循环移位置换、置换选择循环移位置换、置换选择PC2PC2给出每次迭代给出每次迭代加密用的子密钥加密用的子密
23、钥ki,2023-4-2758子密钥产生器框图子密钥产生器框图 密钥(64 bit)置换选择1,PC1置换选择2,PC2 Ci(28 bit)Di(28 bit)循环左移ti+1bit 循环左移ti+1bit除去第8,16,64位(8个校验位)ki2023-4-2759DES的的安全性安全性n互补性互补性。DES算法具有下述性质。若明文组算法具有下述性质。若明文组x逐位取逐位取补,密钥补,密钥k逐位取补,即逐位取补,即y=DESk(x),则有则有 这种互补性会使这种互补性会使DES在选择明文破译下所需的工在选择明文破译下所需的工作量减半。作量减半。n弱密钥和半弱密钥弱密钥和半弱密钥。DES算法
24、在每次迭代时都有一算法在每次迭代时都有一个子密钥供加密用。如果给定初始密钥个子密钥供加密用。如果给定初始密钥k,各轮的子各轮的子密钥都相同,即有密钥都相同,即有 k1=k2=k16 就称给定密钥就称给定密钥k为弱密钥为弱密钥(Weak key)。)(xDESyK2023-4-2760DES的的安全性安全性若若k为弱密钥,则有为弱密钥,则有 DESk(DESk(x)=x DESk-1(DESk-1(x)=x 即以即以k对对x加密两次或解密两次都可恢复出明文。其加密加密两次或解密两次都可恢复出明文。其加密运算和解密运算没有区别。运算和解密运算没有区别。弱密钥下使弱密钥下使DES在选择明文攻击下的搜
25、索量减半。在选择明文攻击下的搜索量减半。如果随机地选择密钥,弱密钥所占比例极小,而且稍加如果随机地选择密钥,弱密钥所占比例极小,而且稍加注意就不难避开。因此,弱密钥的存在不会危及注意就不难避开。因此,弱密钥的存在不会危及DES的的安全性。安全性。2023-4-2761DES的的安全性安全性密文与明文、密文与密钥的相关性密文与明文、密文与密钥的相关性。Meyer1978详细研究了详细研究了DES的输入明文与密文及密钥与的输入明文与密文及密钥与密文之间的相关性。表明每个密文比特都是所有明文比密文之间的相关性。表明每个密文比特都是所有明文比特和所有密钥比特的复合函数,并且指出达到这一要求特和所有密钥
26、比特的复合函数,并且指出达到这一要求所需的迭代次数至少为所需的迭代次数至少为5。Konheim1981用用 2检验证明,检验证明,迭代迭代8次后输出和输入就可认为是不相关的了次后输出和输入就可认为是不相关的了。2023-4-2762DES的的安全性安全性S S盒设计盒设计。DES靠靠S盒实现非线性变换。盒实现非线性变换。密钥搜索机密钥搜索机。对对DES安全性批评意见中,较为一致的看法是安全性批评意见中,较为一致的看法是DES的的密钥短了些。密钥短了些。IBM最初向最初向NBS提交的建议方案采用提交的建议方案采用112 bits密钥,但公布的密钥,但公布的DES标准采用标准采用64 bits密钥
27、。有人认密钥。有人认为为NSA故意限制故意限制DES的密钥长度。采用穷搜索对已经的密钥长度。采用穷搜索对已经对对DES构成了威胁构成了威胁2023-4-2763二重二重DES 用用DES进行两次加密,但这是否就意味着两重进行两次加密,但这是否就意味着两重DES加密的强度等价于加密的强度等价于112 bit密钥的密码的强度?密钥的密码的强度?答案是否定的。答案是否定的。中途相遇攻击法中途相遇攻击法(Meet-in-the-Middle Attack)由由Diffie和和Hellman1977最早提出,可以降低搜最早提出,可以降低搜索量其基本想法如下。若有明文密文对索量其基本想法如下。若有明文密文
28、对(xi,yi)满足满足 yi=Ek2Ek1xi 则可得则可得 z=Ek1xi=Dk2yi 2023-4-2764二重二重DES 图图4-14-1 中途相遇攻击示意图中途相遇攻击示意图 zEEDDxiyixizyi k1 k1k2k22023-4-2765中途相遇攻击中途相遇攻击给定一已知明密文对给定一已知明密文对(x1,y1),可按下述方法攻击。可按下述方法攻击。n以密钥以密钥k1的所有的所有256个可能的取值对此明文个可能的取值对此明文x1加密,并加密,并将密文将密文z存储在一个表中;存储在一个表中;n从所有可能的从所有可能的256个密钥个密钥k2中依任意次序选出一个对给中依任意次序选出一
29、个对给定的密文定的密文y1解密,并将每次解密结果解密,并将每次解密结果z在上述表中查在上述表中查找相匹配的值。一旦找到,则可确定出两个密钥找相匹配的值。一旦找到,则可确定出两个密钥k1和和k2;n以此对密钥以此对密钥k1和和k2对另一已知明文密文对对另一已知明文密文对(x2,y2)中的明中的明文文x2进行加密,如果能得出相应的密文进行加密,如果能得出相应的密文y2就可确定就可确定k1和和k2是所要找的密钥。是所要找的密钥。2023-4-2766中途相遇攻击中途相遇攻击n对于给定明文对于给定明文x,以两重以两重DES加密将有加密将有264个可能的密文。个可能的密文。n可能的密钥数为可能的密钥数为
30、2112个。所以,在给定明文下,将有个。所以,在给定明文下,将有2112/264=248个密钥能产生给定的密文。个密钥能产生给定的密文。n用另一对用另一对64bits明文密文对进行检验,就使虚报率降为明文密文对进行检验,就使虚报率降为248-64=2-16。n这一攻击法所需的存储量为这一攻击法所需的存储量为2568 Byte,最大试验的加密最大试验的加密次数次数2256=257。这说明破译双重。这说明破译双重DES的难度为的难度为257量级。量级。2023-4-2767三重三重DES加密加密加密:加密:y=Ek1Dk2Ek1 x解密:解密:x=Dk1Ek2Dk1yn称其为加密称其为加密-解密解
31、密-加密方案,简记为加密方案,简记为EDE(encrypt-decrypt-encrypt)。n此方案已在此方案已在ANSI X9.17和和ISO 8732标准中采用,并在标准中采用,并在保密增强邮递保密增强邮递(PEM)系统中得到利用。系统中得到利用。n破译它的穷举密钥搜索量为破译它的穷举密钥搜索量为2112 51035量级,而用差量级,而用差分分析破译也要超过分分析破译也要超过1052量级。此方案仍有足够的安全量级。此方案仍有足够的安全性。性。2023-4-2768四、AES2023-4-2769 AES提出提出n1997年年1月,美国月,美国NIST向全世界密码学界向全世界密码学界发出征
32、集发出征集21世纪高级加密标准(世纪高级加密标准(AESAdvanced Encryption Standard)算法算法的公告,并成立了的公告,并成立了AES标准工作研究室,标准工作研究室,1997年年4月月15日的例会制定了对日的例会制定了对AES的评的评估标准。估标准。n 2023-4-2770AES的要求(1)AES是公开的;是公开的;(2)AES为单钥体制分组密码;为单钥体制分组密码;(3)AES的密钥长度可变,可按需要增大;的密钥长度可变,可按需要增大;(4)AES适于用软件和硬件实现;适于用软件和硬件实现;(5)AES可以自由地使用,或按符合美国国家可以自由地使用,或按符合美国国
33、家标准(标准(ANST)策略的条件使用;策略的条件使用;2023-4-2771算法衡量条件n满足以上要求的满足以上要求的AES算法,需按下述条算法,需按下述条件判断优劣件判断优劣na.安全性安全性nb.计算计算效率效率nc.内内存要求存要求nd.使用使用简便性简便性ne.灵活性。灵活性。2023-4-2772AES的评审的评审n 1998年年4月月15日全面征集日全面征集AES算法的工作结束。算法的工作结束。1998年年8月月20日举行了首届日举行了首届AES讨论会,对涉及讨论会,对涉及14个国家的密码个国家的密码学家所提出的候选学家所提出的候选AES算法进行了评估和测试,初选并算法进行了评估
34、和测试,初选并公布了公布了15个被选方案,供大家公开讨论。个被选方案,供大家公开讨论。CAST-256,RC-6,CRYPTON-128,DEAL-128,FROG,DFC,LOKI-97,MAGENTA,MARS,HPC,RIJNDAEL,SAFER+,SERPENT,E-2,TWOFISH。n这些算法设计思想新颖,技术水平先进,算法的强度都这些算法设计思想新颖,技术水平先进,算法的强度都超过超过3-DES,实现速度快于实现速度快于3-DES。2023-4-2773AES的评审的评审n1999年年8月月9日日NIST宣布第二轮筛选出的宣布第二轮筛选出的5个个候选算法为:候选算法为:MARS(
35、C.Burwick等等,IBM),RC6TM(R.Rivest等等,RSA Lab.),RIJNDEAL(J.Daemen,比比),SERPENT(R.Anderson等,等,英、以、挪威英、以、挪威),TWOFISH(B.Schiener)。n2000年年10月月2日,日,NIST宣布宣布Rijndael作为新的作为新的AES2023-4-2774AES算法设计思想n抵抗所有已知的攻击;n在多个平台上速度快,编码紧凑;n设计简单。nRijndael没有采用Feistel结构,轮函数由3个不同的可逆均匀变换构成的,称为3个层n均匀变换是指状态的每个bit都用类似的方法处理2023-4-2775
36、轮函数的3层n线性混合层线性混合层n确保多轮之上的高度扩散;确保多轮之上的高度扩散;n非线性层非线性层n将具有最优的将具有最优的“最坏情况非线性特性最坏情况非线性特性”的的S盒并行使用;盒并行使用;n密钥加层密钥加层n单轮子密钥简单的异或到中间状态上,实现单轮子密钥简单的异或到中间状态上,实现一次性掩盖。一次性掩盖。2023-4-2776算法说明算法说明n分组和密钥长度可变,各自可独立指定为分组和密钥长度可变,各自可独立指定为128、192、256比特。比特。n状态状态n算法中间的结果也需要分组,称之为状态,状态可算法中间的结果也需要分组,称之为状态,状态可以用以字节为元素的矩阵阵列表示,该阵
37、列有以用以字节为元素的矩阵阵列表示,该阵列有4行,行,列数列数Nb为分组长度除为分组长度除32n种子密钥种子密钥n以字节为元素的矩阵阵列描述,阵列为以字节为元素的矩阵阵列描述,阵列为4行,列数行,列数Nk为密钥长度除为密钥长度除322023-4-2777算法说明算法说明n算法的输入、输出和算法的输入、输出和种子密钥种子密钥可看成字可看成字节组成的一维数组。节组成的一维数组。n下标范围下标范围n输入输出:输入输出:04Nb-1,n种子密钥:种子密钥:04Nk-12023-4-2778Nb=6和Nk=4的状态密钥阵列按此顺序放入和读出按此顺序放入和读出按此顺序放入按此顺序放入2023-4-2779
38、分组和阵列中元素对应关系分组和阵列中元素对应关系n分组下标分组下标nn阵列位置阵列位置(i,j)ni=n mod 4,j=n/4;n=i+4jn轮数轮数Nr与与Nb和和Nk对应关系对应关系Nb=4Nb=6Nb=8Nk=4101214Nk=6121214Nk=81414142023-4-2780轮函数轮函数n字节代换字节代换n行移位行移位n列混合列混合n密钥加密钥加2023-4-2781字节代换字节代换n非线性代换,独立地对状态的每个字节非线性代换,独立地对状态的每个字节进行,并且代换表进行,并且代换表(S盒盒)可逆,记为可逆,记为ByteSub(State),分两步分两步(1)将字节作为将字节
39、作为GF(28)上的元素映射到自上的元素映射到自己的逆元己的逆元(2)将字节做如下的将字节做如下的GF(2)上变换上变换2023-4-2782字节代换字节代换0110001111111000011111000011111000011111100011111100011111100011111100017654321076543210 xxxxxxxxyyyyyyyy2023-4-2783行移位行移位n将状态阵列的各行进行循环移位,不同行的移位量不同n0行:不动n1行:循环左移C1字节n2行:循环左移C2字节n3行:循环左移C3字节n记为:ShiftRow(State)2023-4-2784行移
40、位行移位n移位量与分组长度的关系移位量与分组长度的关系NbC1C2C34123612381342023-4-2785列混合列混合n将每列视为将每列视为GF(28)上多项式,与固定的上多项式,与固定的多项式多项式c(x)进行模进行模x4+1乘法乘法,要求要求c(x)模模x4+1可逆。可逆。n表示为表示为MixColumn(State)02010103)(23xxxxc2023-4-2786密钥加密钥加n轮密钥与状态进行逐比特异或。轮密钥与状态进行逐比特异或。n轮密钥由种子密钥通过密钥编排算法得轮密钥由种子密钥通过密钥编排算法得到到n轮密钥长度与分组密钥长度相同轮密钥长度与分组密钥长度相同n表示为表示为AddRoundKey(State,RoundKey)2023-4-2787轮函数的伪轮函数的伪C代码代码Round(State,RoundKey)ByteSub(State);ShiftRow(State);MixColumn(State);AddRoundKey(State,Roundkey);2023-4-2788结尾轮的轮函数结尾轮的轮函数Round(State,RoundKey)ByteSub(State);ShiftRow(State);AddRoundKey(State,Roundkey);