第05-08讲 分组密码 现代密码学 讲解材料.ppt

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

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 行移位(ShiftRow) 行移位是将状态阵列的各行进行循环移位,不同状态行的位移量不同。 第0行不移动 第1行循环左移C1个字节 第2行循环左移C2个字节 第3行循环左移C3个字节 位移量C1、C2、C3的取值与Nb有关,由上表(表3.10)给出 行移位的逆(ShiftRow) 对状态阵列的后3列分别以位移量Nb-C1、Nb-C2、Nb-C3进行循环移位,使得第i行第j列的字节移位到(j+Nb-Ci) mod Nb。 例如Nb=4时 列混合(MixColumn) 将状态阵列的每个列视为GF(28)上的多项式 再与一个固定的多项式c(x)进行模x4+1乘法 c(x)=‘03’x3+‘01’x2+‘01’x+‘02’ c(x)是模x4+1可逆的多项式(即c(x)是与x4+1互素的),否则列混合变换就是不可逆的 列混合的逆(InvMixColumn) 列混合运算的逆运算是类似的,即每列都用一个特定的多项式d(x)相乘。d(x)满足 ‘03’x3+‘01’x2+‘01’x+’02’?d(x)=‘01’ 由此可得 d(x)=‘0B’x3+‘0D’x2+‘09’x+‘0E’ 轮密钥加及其逆(AddRoundKey) 轮密钥加是将轮密钥与状态进行逐比特异或 轮密钥由种子密钥通过密钥编排算法得到,轮密钥长度等于Nb。 状态State与轮密钥RoundKey的密钥加运算表示为 AddRoundKey (State, RoundKey) 密钥加运算的逆运算是其自身 综上所述,组成Rijndael轮函数的计算部件简捷快速,功能互补。轮函数的伪C代码如下: Round (State, RoundKey) { ByteSub (State); ShiftRow (State); MixColumn (State); AddRoundKey (State, RoundKey) } 结尾轮的轮函数与前面各轮不同,将MixColumn这一步去掉,其伪C代码如下: FinalRound (State, RoundKey) { ByteSub (State); ShiftRow (State); AddRoundKey (State, RoundKey) } 密钥编排 密钥编排指从种子密钥得到轮密钥的过程,它由密钥扩展和轮密钥选取两部分组成。其基本原则如下: 轮密钥的比特数等于分组长度乘以轮数加1; 密钥扩展:种子密钥被扩展成为扩展密钥; 轮密钥选取:轮密钥从扩展密钥中取,其中第1轮轮密钥取扩展密钥的前Nb个字,第2轮轮密钥取接下来的Nb个字,如此下去。 密钥扩展 扩展密钥是以4字节字为元素的一维阵列,表示为W[Nb* (Nr+1)],其中前Nk个字取为种子密钥,以后每个字按递归方式定义。扩展算法根据Nk≤6和Nk6有所不同。 当Nk≤6时的扩展算法 根据输入密钥得到W[0],W[1],W[2],…,W[Nk],作为扩展密钥的基础 扩展密钥: 对W数组中下标不为Nk的倍数的元素: W[i]=W[i-1]⊕W[i- Nk](i不为Nk的倍数)     对W数组中下标为4的倍数的元素: 将字W[i-1]的四个字节循环左移一个字节(RotByte) 基于S盒对RotByte(W[i-1])的每个字节进行S代替 结果与轮常数Rcon[i/Nk]相异或 再与W[i- Nk]异或 例如,当Nk=4时 当Nk≤6时的扩展算法 轮常数Rcon[i]的定义 Rcon[i]=(RC[i],‘00, ‘00, ‘00) RC[0]= ‘01’ RC[i]=2 ?(RC[i-1]) =xi-1 当Nk≤6时的扩展算法 KeyExpansion (byte Key[4*Nk] , W[Nb*(Nr+1)]) { for (i =0; i Nk; i ++) W[i]=(Key[4* i],Key[4* i +1],Key[4* i +2],Key[4* i +3] ); for (i =Nk; i Nb*(Nr+1); i ++) { temp=W[i-1]; if (i % Nk= =0) temp=SubByte (RotByte (temp))^Rcon[i /Nk]; W[i]=

文档评论(0)

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

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

1亿VIP精品文档

相关文档