杨波,_《现代密码学(第2版)》第三章 3.6节.ppt

杨波,_《现代密码学(第2版)》第三章 3.6节.ppt

  1. 1、本文档共68页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
杨波,_《现代密码学(第2版)》第三章 3.6节

证明:这是引理3.1和引理3.2的直接推论。 注意到在引理3.3所描述的逆变换中,第2步到第4步在形状上很像加密算法的轮函数,这将是解密算法的轮函数。注意到结尾轮只有3个计算部件,因此可以得到如下定理。 定理3.2 Rijndael密码的解密算法为顺序完成以下操作:初始的密钥加;(Nr-1)轮迭代;一个结尾轮。其中解密算法的轮函数为 InvRound (State, RoundKey) { InvByteSub (State); InvShiftRow (State); InvMixColumn (State); AddRoundKey (State, RoundKey) } 解密算法的结尾轮为 InvFinalRound (State, RoundKey) { InvByteSub (State); InvShiftRow (State); AddRoundKey (State, RoundKey) } 设加密算法的初始密钥加、第1轮、第2轮、…、第Nr轮的子密钥依次为 k(0), k(1), k(2), …, k(Nr-1), k(Nr) 则解密算法的初始密钥加、第1轮、第2轮、…、第Nr轮的子密钥依次为 k(Nr), InvMixColumn (k(Nr-1)), InvMixColumn (k(Nr-2)), …, InvMixColumn (k(1)), k(0)。 证明:这是上述3个引理的直接推论。 综上所述,Rijndael密码的解密算法与加密算法的计算网络相同,只是将各计算部件换为对应的逆部件。 The end! Thanks 2. 轮函数 Rijndael的轮函数由4个不同的计算部件组成,分别是: 字节代换(ByteSub) 行移位(ShiftRow) 列混合(MixColumn) 密钥加(AddRoundKey) (1)字节代换(ByteSub) 字节代换是非线形变换,独立地对状态的每个字节进行。代换表(即S-盒)是可逆的,由以下两个变换的合成得到: ① 首先,将字节看作GF(28)上的元素,映射到自己的乘法逆元,‘00’映射到自己。 ② 其次,对字节做如下的(GF(2)上的,可逆的)仿射变换: 上述S-盒对状态的所有字节所做的变换记为 ByteSub (State) ByteSub的逆变换由代换表的逆表做字节代换,可通过如下两步实现: 首先进行仿射变换的逆变换,再求每一字节在GF(28)上逆元。 图3.19 字节代换示意图 (2) 行移位(ShiftRow) 行移位是将状态阵列的各行进行循环移位,不同状态行的位移量不同。第0行不移动,第1行循环左移C1个字节,第2行循环左移C2个字节,第3行循环左移C3个字节。位移量C1、C2、C3的取值与Nb有关,由表3.10给出。 图3.20 行移位示意图 行移位运算记为ShiftRow (State) ShiftRow的逆变换是对状态阵列的后3行分别以位移量Nb-C1、Nb-C2、Nb-C3进行循环移位,使得第i行第j列的字节移位到(j+Nb-Ci) mod Nb。 (3)列混合(MixColumn) 在列混合变换中,将状态阵列的每个列视为GF(28)上的多项式,再与一个固定的多项式c(x)进行模x4+1乘法。当然要求c(x)是模x4+1可逆的多项式,否则列混合变换就是不可逆的,因而会使不同的输入分组对应的输出分组可能相同。Rijndael的设计者给出的c(x)为(系数用十六进制数表示): c(x)=‘03’ x3+‘01’ x2+‘01’ x+‘02’ c(x)是与x4+1互素的,因此是模x4+1可逆的。列混合运算也可写为矩阵乘法。设b(x)= c(x) a(x),则 这个运算需要做GF(28)上的乘法,但由于所乘的因子是3个固定的元素02、03、01,所以这些乘法运算仍然是比较简单的。 对状态State的所有列所做的列混合运算记为 MixColumn(State) 图3.21是列混合运算示意图。 图3.21 列混合运算示意图 列混合运算的逆运算是类似的,即每列都用一个特定的多项式d(x)相乘。 d(x)满足 (‘03’x3+‘01’x2+‘01’x+‘02’) d(x)=‘01’ 由此可得 d(x)=‘0B’x3+‘0D’x2+‘09’x+‘0E’ (4) 密钥加(AddRoundKey) 密钥加是将轮密钥简单地与状态进行逐比特异或。轮密钥由种子密钥通过密钥编排算法得到,轮密钥长度等于分组长度Nb。 状态State与轮密钥RoundKey的密钥加运算表示为

文档评论(0)

cgtk187 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档