256比特位密钥扩展系统及方法

文档序号:7894794阅读:404来源:国知局
专利名称:256比特位密钥扩展系统及方法
技术领域
本发明属于安全技术领域,涉及数据加密,特别涉及高级加密标准AES中的密钥扩展方法,可用于网络通信。
背景技术
高级加密标准AES是美国国家标准技术研究所NIST旨在取代数据加密标准DES,于2001年11月公开的加密算法。目前,AES算法已广泛的应用于加密协议、通信终端以及 服务器等闻端广品中。AES算法采用了 Rijnddel对称密钥算法的子集,支持长度为128比特位的分组和长度为128、192和256比特位的密钥。该算法通过对初始密钥进行密钥扩展得到轮密钥,并用轮密钥对128位的数据块进行加密和解密。在AES算法中,根据初始密钥的长度不同,加密的轮数r有所不同;在初始密钥长度为128比特位、192比特位和256比特位的情况下,相应的轮数r分别为10、12和14。由于每一轮加密都需要不同的128比特位的轮密钥与数据块进行按位异或操作,而初始密钥长度只能为128比特位、192比特位或256比特位,无法为每轮加密提供不同的轮密钥,故该算法包含了密钥扩展算法,用于把初始密钥扩展成长度为1280比特位、1536比特位或1792比特位的数据串,从而生成加密所需要的所有轮密钥。目前广泛应用的密钥扩展方法有两种一种是《A Rijndael CryptoprocessorUsing Shared On-the-fly Key Scheduler》所使用的实时密钥扩展方法,即密钥扩展单元在进行密钥扩展的同时为加密进程提供轮密钥;这种方法的缺点在于轮密钥无法重用,因而对于数据量大、需要连续使用轮密钥的场合,持续执行密钥扩展操作所带来的功耗较大;另一种是《AES算法的一种优化的FPGA实现方法》所使用的预密钥扩展方法,即先进行密钥扩展生成所有的轮密钥并存储到内存中,再进行加密;在该方法中,由于加密流程要等待密钥扩展完成之后才能进行,从而增加了加密所需要的时间,降低了整个加密过程的效率。

发明内容
本发明的目的在于针对上述传统方法的不足,提出一种256比特位密钥扩展系统及方法,以兼顾密钥扩展的实时性以及轮密钥的可重用性,降低密钥扩展的功耗,提高密钥扩展的效率。为实现上述目的,本发明256比特位密钥扩展系统,包括扩展计数单元,用于对序号η进行加I操作,并将序号η输出;暂存单元,由位宽均为32比特的60个寄存器构成,用于暂存初始密钥和轮密钥,保证密钥扩展进程能够即时取用;轮密钥存储单元,采用位宽为32比特位,深度为60的双口 SDRDM,用于存储初始密钥和轮密钥,保证在密钥扩展进行的同时能够为加密流程实时的提供轮密钥,并保证对后续数据块进行加密时无需密钥扩展即可直接读取已存储轮密钥;
循环寄存器,用 于存储供字循环单元读取使用的32比特位的值;字循环单元,用于对循环寄存器中的值进行循环左移I个字节的操作,并将结果输出给替换寄存器;替换寄存器,用于存储供字节替换单元读取使用的32比特位的值;字节替换单元,用于根据序号η执行字节替换操作若序号η为0_5,则将替换寄存器中的值作为地址分为从第31位到第24位、从第23位到第16位、从第15位到第8位和从第7位到第O位这4个字节发送给S盒单元,并将S盒单元的返回值按照发送地址时的顺序从高到低组合后作为字节替换的一次输出,发送给异或单元;在替换寄存器被异或单元重新赋值之后,再执行一次上述操作,并将结果作为字节替换单元的二次输出,发送给异或单元;若序号η为6,则将替换寄存器中的值作为地址分为从第31位到第24位、从第23位到第16位、从第15位到第8位和从第7位到第O位这4个字节发送给S盒单元,并将S盒单元的返回值按照发送地址时的顺序从高到低组合后作为字节替换的一次输出,发送给异或单元;S盒单元,采用四个预存有S盒的R0M,用于将字节替换单元发送的四个地址在S盒中所对应的四个8比特位的值返回给字节替换单元;轮常数选择单元,用于根据序号n,从8个16进制的候选值0,1,2,4,8,10,20,40
中选出一个值输出给异或单元;异或寄存单元,包括位宽均为32比特位的O号寄存器、I号寄存器、2号寄存器、3号寄存器、4号寄存器、5号寄存器、6号寄存器和7号寄存器,用于存储异或单元所要使用的32比特位的值;异或单元,包括O号异或子单元、I号异或子单元、2号异或子单元、3号异或子单元、4号异或子单元、5号异或子单元、6号异或子单元和7号异或子单元,其中O号异或子单元、I号异或子单元、2号异或子单元和3号异或子单元用于进行按位异或操作,并将所得结果作为轮密钥输出给暂存单元,4号异或子单元、5号异或子单元、6号异或子单元和7号异或子单元则用于在序号η为0-5之间的整数值时,执行按位异或操作,并将所得结果作为新的轮密钥输出给暂存单元;循环控制单元,用于根据序号η决定下一步是停止还是继续进行密钥扩展进程,若序号η为7,则结束密钥扩展进程,若轮号为0-6范围内的值,则继续执行密钥扩展进程。为实现上述目的,本发明256比特位密钥扩展方法,包括如下步骤I)将对密钥扩展进程进行计数的变量定义为序号η,其取值范围分为0-6以外的整数域和0-6之间的整数域这两种情况;2)将序号η归零,开始密钥扩展进程;3)将初始密钥从高位到低位分为8个32比特位的值,再按此顺序同时将这8个32比特位的数据存入地址为0,1,2,3,4,5,6,7的寄存器和一个专用于存储轮密钥的双口SDRDM 中;4)执行字循环操作4. I)根据序号η确定寄存器地址d,若序号η为0_6之外的值,则寄存器地址d的值保持不变,否则按以下规律确定地址若序号η为O,则寄存器地址d为7 ;
序号η每增加I,寄存器地址d的值就增加8 ;4. 2)从寄存器地址d所对应的寄存器中取值赋给循环寄存器,将循环寄存器中的32比特位值循环左移一个字节,并输出到替换寄存器中;5)执行字节替换操作5. I)将替换寄存器中的值作为地址分为从第31位到第24位、从第23位到第16位、从第15位到第8位和从第7位到第O位这4个字节,分别发送给4个预存有S盒的R0M,这四个ROM再将接收到的地址值在S盒中对应的8比特位数值同时返回;
5. 2)将4个ROM返回的8比特位数值按照步骤5. I)中每个地址在原32比特位值中的位置从高到低的顺序,组合成一个新的32比特位的值作为字节替换操作的输出;6)执行按位异或操作,并存储轮密钥6.1)根据序号η确定寄存器地址eO, el, e2, e3,若序号η为0_6之外的值,贝丨J寄存器地址eO,el, e2, e3中的值均保持不变,否则按以下规律确定地址若序号η为0,则寄存器地址eO, el, e2, e3依次被赋值0,1,2,3 ;序号η每增加1,则寄存器地址e0,el,e2,e3的值均增加8 ;6. 2)从寄存器地址e0,el, e2, e3所对应的寄存器中取值,并分别赋给O号寄存器、I号寄存器、2号寄存器、3号寄存器;6. 3)根据序号η从8个16进制的候选值中选择轮常数值输出,即当序号η为0_6时,对应的轮常数值输出依次为1,2,4,8,10,20,40,否则,轮常数值输出为O ;6. 4)根据序号η确定寄存器地址f0,fl, f2, f3的值,若序号η为0-6之外的值,则寄存器地址f0,fl, f2, f3中的值均保持不变,否则按以下规律确定地址若序号η为0,则寄存器地址f0, fl, f2, f3依次被赋值8,9,10,11 ;序号η每增加1,则寄存器地址f0,f 1,f2,f3的值都增加8 ;6. 5)对O号寄存器中的值和字节替换操作的输出执行按位异或操作,用此结果再与轮常数值输出进行按位异或后,将所得结果作为轮密钥的第127位到96位存入寄存器地址f0所对应的寄存器和双口 SDRDM中;6. 6)对I号寄存器中的值和寄存器地址f0所对应的寄存器中的值执行按位异或操作,将所得结果作为轮密钥的第95位到64位存入寄存器地址Π所对应的寄存器和双口SDRDM 中;6. 7)对2号寄存器中的值和寄存器地址fl所对应的寄存器中的值执行按位异或操作,将所得结果作为轮密钥的第63位到32位存入寄存器地址f2所对应的寄存器和双口SDRDM 中;6. 8)对3号寄存器中的值和寄存器地址f2所对应的寄存器中的值执行按位异或操作,将所得结果存入替换寄存器中,并作为轮密钥的第31位到O位存入寄存器地址f3所对应的寄存器和双口 SDRDM中;此时完成了一个轮密钥的存储;7)若序号为0-5间的整数域之外的值,则直接跳过步骤8)和步骤9),直接执行步骤10);否则,继续执行步骤8);8)再次执行步骤5)中的字节替换操作,将结果作为字节替换的输出,供二次按位异或操作使用;9)执行二次按位异或操作,并存储轮密钥
9. I)根据序号η按以下规律确定寄存器地址e4, e5, e6, e7 若序号n为0,则寄存器地址e4,e5,e6,e7依次被赋值4,5,6,7 ;序号n每增加1,则寄存器地址e4,e5, e6, e7的值均增加8 ;9. 2)从寄存器地址e4,e5,e6和e7所对应的寄存器中取值,并分别赋给4号寄存器、5号寄存器、6号寄存器和7号寄存器; 9. 3)根据序号η按以下规律确定寄存器地址f4,f5,f6和f7的值若序号η为0,则寄存器地址f4,f5,f6和f7依次被赋值6,7,8,9,10,11 ;序号η每增加1,则寄存器地址f4,f5,f6和f7的值都增加8 ;9. 4)对4号寄存器中的值和步骤8)中字节替换操作的输出执行按位异或操作,将所得结果作为新的轮密钥的第127位到第96位存入寄存器地址f4所对应的寄存器和双口SDRDM 中;9. 5)对5号寄存器中的值和寄存器地址f4所对应的寄存器中的值执行按位异或操作,将所得结果作为新的轮密钥的第95位到第64位存入寄存器地址f5所对应的寄存器和双口 SDRDM中;9. 6)对6号寄存器中的值和寄存器地址f5所对应的寄存器中的值执行按位异或操作,将所得结果作为新的轮密钥的第63位到第32位存入寄存器地址f6所对应的寄存器和双口 SDRDM中;9. 7)对7号寄存器中的值和寄存器地址f6所对应的寄存器中的值执行按位异或操作,将所得结果作为新的轮密钥的第31位到第O位存入寄存器地址f7所对应的寄存器和双口 SDRDM中;此时完成了本循环中第二个轮密钥的存储。10)对序号η加I,若加I后的结果为7,则停止密钥扩展进程,否则重复步骤4)至步骤10)。本发明具有如下优点I)本发明通过简化密钥扩展循环的判断条件,以及减少密钥扩展的循环次数,与传统方法相比,在提高密钥扩展的效率的同时降低了密钥扩展的功耗。传统方法均采用高级加密标准AES中的密钥扩展算法,将初始密钥扩展得到的扩展密钥视作一个数组W[i] ,0 < i < 60,其中每个数组元素w[i]为轮密钥的一列,而编号i作为密钥扩展循环过程的主要参考对象;在初始密钥为256比特位的情况下,传统密钥扩展的循环依据编号i能否被8整除分成了两种情况,若编号i能被8整除,则w[i]=w[i-8] sub word(rot word(w [i -1 ])) rcon(i/8),否贝 lj, w[i]=w[i-8] w[i-l];其中,subword
表示对括号内的值进行字节替换操作,rotword表示对括号内的值进行字循环操作,rcon表示根据括号内的值选择轮常数;这种密钥扩展方法每循环一次仅产生轮密钥的一列,故而产生所有的14个轮密钥需要进行密钥扩展循环56次,且对条件“编号i是否能被8整除”的判断要进行56次,因而不仅效率较低,而且在实际应用中功耗也较大。本发明中,密钥扩展循环的判断条件仅有I个,就是序号η ;即在正常执行的情况下,序号η的取值为0-6之间的7个整数值,密钥扩展的循环过程是依据序号η来选择操作数以及执行字循环、字节替换和按位异或操作,这样的循环每次产生2个轮密钥;通过这种循环方式,本发明的密钥扩展方法只需循环7次,即可完成所有轮密钥的生成,而对于轮号的判断也只需进行7次,不仅简化了密钥扩展循环的判断条件,而且减少了密钥扩展的循环次数,从而在提高了密钥扩展的效率的同时降低了密钥扩展的功耗;
2)本发明具有较高的实用性;在实际应用中,由于环境以及电路故障等原因,可能造成序号η的值不在0-6之间的整数域内,从而使得整个密钥扩展过程都无法正常进行;对于这种情况,本发明中给出了对应的处理方式,使得其他的的操作不受序号η异常赋值的影响,从而降低了故障所带来的不良影响,提高了实用性;3)本发明通过暂存单元的定义,使得密钥扩展进程可以通过判定地址来选择性的读取暂存在其中的轮密钥,又通过运用寄存器地址d,e0,el,e2,e3,e4,e5,e6,e7,f0,Π,f2, f3,f4,f5,f6,f7的取值规律提高了密钥扩展中的运算操作数的选择和读取过程的效率;4)本发明由于将完成两个轮密钥扩展所需要的操作流程化,并在完成每个轮密钥扩展的同时,将轮密钥存入双口 SDRDM和暂存单元中,故在实时的为加密流程提供轮密钥的同时保证了轮密钥的可重用性,从而兼顾了高效率与低功耗;5)本发明通过使用4个S盒来完成字节替换,使得字节替换过程的实现易于并行实现,同时提高了密钥扩展的效率。


图I为本发明256比特位密钥扩展系统结构图;图2为本发明256比特位密钥扩展方法流程图;图3为本发明中的字循环操作子流程图;图4为本发明中的字节替换操作子流程图;图5为本发明中的按位异或操作子流程图;图6为本发明中的二次按位异或操作子流程图。
具体实施例方式参照图1,本发明基于高级加密标准AES的256比特位密钥扩展系统包括扩展计数单元I、暂存单元2、轮密钥存储单元3、循环寄存器4、字循环单元5、替换寄存器6、字节替换单元7、S盒单元8、轮常数选择单元9、异或寄存单元10、异或单元11、循环控制单元12,该S盒单元8包括4个预存有S盒的ROM 0号ROM、I号R0M、2号ROM和3号ROM ;该异或寄存单元10包括8个位宽为32比特位的寄存器0号寄存器、I号寄存器、2号寄存器、3号寄存器、4号寄存器、5号寄存器、6号寄存器和7号寄存器;该异或单兀11包括8个异或子单元0号异或子单元、I号异或子单元、2号异或子单元、3号异或子单元、4号异或子单元、5号异或子单元、6号异或子单元和7号异或子单元。其中扩展计数单元1,用于对序号η进行加I操作,并将序号η同时输出给循环控制单元12、轮常数选择单元9、字节替换单元7、异或单元11和暂存单元2。暂存单元2,由位宽均为32比特的60个寄存器构成,用于暂存初始密钥和轮密钥,保证密钥扩展进程能够即时取用,此外还用于根据序号η选择轮密钥输出给轮密钥存储单元3和异或寄存器单元10,其中的轮密钥,是指密钥扩展进程所产生的14个128比特位数,用于为高级加密标准AES中加密算法的每轮加密提供不同的128比特位数。
轮密钥存储单元3,采用位宽为32比特位,深度为60的双口 SDRAM,用于存储初始密钥和轮密钥,使得加密流程能够在密钥扩展进行的同时取得已存储的轮密钥,并保证后续数据加密时无需密钥扩展即可直接读取已存储轮密钥。
循环寄存器4,位宽为32比特位,用于存储供字循环单元5读取使用的值。字循环单元5,用于将循环寄存器4中的值进行循环左移I个字节并输出给替换寄存器6。替换寄存器6,用于存储供字节替换单元7读取使用的32比特位的值。字节替换单元7,用于根据序号η执行字节替换操作若序号η为0_5,则将替换寄存器6中的值作为地址分为从第31位到第24位、从第23位到第16位、从第15位到第8位和从第7位到第O位这4个字节发送给S盒单元8,并将S盒单元8的返回值按照发送地址时的顺序从高到低组合后输出给异或单元10 ;若序号η为6,则在一次循环中仅执行一次上述操作,不再执行第二次的字节替换。S盒单元8中的O号ROM、I号ROM、2号ROM和3号ROM均存有S盒,每个ROM位宽为8比特,深度为256,用于接收字节替换单元7发送过来的地址,并将地址在S盒中对应的值返回给字节替换单元7,其中O号ROM接收字节替换单元7发送过来的第31位到第24位的地址,并将该地址所对应的8比特位值输出给字节替换单元7 ;I号ROM接收字节替换单元7发送过来的第23位到第16位的地址,并将该地址所对应的8比特位值输出给字节替换单元7 ;2号ROM接收字节替换单元7发送过来的第15位到第8位的地址,并将该地址所对应的8比特位值输出给字节替换单元7 ;3号ROM接收字节替换单元7发送过来的第7位到第O位的地址,并将该地址所对应的8比特位值输出给字节替换单元7。轮常数选择单元9,用于根据序号n,从8个16进制的候选值0,1,2,4,8,10,20,40中选出一个值输出给异或单元11,即当序号η为0-6时,对应的输出依次为1,2,4,8,10,20,40,否则,输出为O ;其中,轮常数为AES标准中的密钥扩展算法所采用的概念,每个轮常数由序号η计算得来,因序号η取值范围有限,故直接采用计算结果作为轮常数的候选值,需要说明的是O并非轮常数值,而是为了防止序号η异常而设置的候选值。异或寄存单元10,包括位宽均为32比特位的O号寄存器、I号寄存器、2号寄存器、3号寄存器、4号寄存器、5号寄存器、6号寄存器和7号寄存器,用于存储异或单兀11所要使用的32比特位的值,其中,O号寄存器存储O号异或子单元所要使用的32比特位的值,I号寄存器存储I号异或子单元所要使用的32比特位的值,2号寄存器存储2号异或子单元所要使用的32比特位的值,3号寄存器存储3号异或子单元所要使用的32比特位的值,4号寄存器存储4号异或子单元所要使用的32比特位的值,5号寄存器存储5号异或子单元所要使用的32比特位的值,6号寄存器存储6号异或子单元所要使用的32比特位的值,7号寄存器存储7号异或子单元所要使用的32比特位的值。异或单元11中,O号异或子单元、I号异或子单元、2号异或子单元和3号异或子单元用于进行按位异或操作,并将所得结果作为轮密钥输出给暂存单元2,4号异或子单元、5号异或子单元、6号异或子单元和7号异或子单元则用于在序号η为0-5之间的整数值时,执行按位异或操作,并将所得结果作为新的轮密钥输出给暂存单元2 ; 其中是由O号异或子单元对O号寄存器中的值、字节替换单元7的输出和轮常数选择单元9的输出进行按位异或后,将所得结果作为轮密钥的第127位到第96位,同时输出给I号异或子单元和暂存单元2 ;由I号异或子单元将I号寄存器中的值和O号异或子单元的输出进行按位异或,并将结果作为轮密钥的第95位到第64位,同时输出给2号异或子单元和暂存单元2 ;由2号异或子单元将2号寄存器中的值和I号异或子单元的输出进行按位异或,并将结果作为轮密钥的第63位到第32位,同时输出给3号异或子单元和暂存单元2 ;由3号异或子单元将3号寄存器中的值和2号异或子单元的输出进行按位异或,并将结果作为轮密钥的第31位到第O位,同时输出给替换寄存器6和暂存单元2 ;此时完成了本循环的一个轮密钥的存储;若序号η为0-5之间的整数,则由4号异或子单元对4号寄存器中的值和字节替换单元7的二次输出进行按位异或,将所得结果作为另一个轮密钥的第127位到第96位,同时输出给5号异或子单元和暂存单元2 ;由5号异或子单元将5号寄存器中的值和4号异或子单元的输出进行按位异或,并将结果作为轮密钥的第95位到第64位,同时输出给6号异或子单元和暂存单元2 ;由6号异或子单元将6号寄存器中的值和5号异或子单元的输出进行按位异或,并将结果作为轮密钥的第63位到第32位,同时输出给7号异或子单元和暂存单元2 ;由7号异或子单元将7号寄存器中的值和6号异或子单元的输出进行按位异或,并将结果作为轮密钥的第31位到第O位,输出给暂存单元2,完成本次循环的第二个轮密钥的存储。循环控制单元12,根据序号η决定下一步是停止还是继续进行密钥扩展进程,若序号η为7,则结束密钥扩展进程,若轮号为0-6范围内的值,则继续执行密钥扩展进程。参照图2,本发明的256比特位密钥扩展方法,包括如下步骤步骤1,将对密钥扩展进程进行计数的变量定义为序号η,其取值范围分为0-6以外的整数域和0-6之间的整数域这两种情况。步骤2,将序号η归零,开始密钥扩展进程。步骤3,将初始密钥从高位到低位分为8个32比特位的值,再按此顺序同时将这8个32比特位的数据存入地址为0,I,2,3,4,5,6,7的寄存器和一个专用于存储轮密钥的双口 SDRAM 中。步骤4,执行字循环操作。参照图3,本步骤的实现如下4. I)根据序号η确定寄存器地址d,若序号η为0_6之外的值,则寄存器地址d的值保持不变,否则按以下规律确定地址若序号η为O,则寄存器地址d为7 ;序号η每增加1,寄存器地址d的值就增加8,例如,若序号η为1,则寄存器地址d的值就为15 ;若序号η为2,则寄存器地址d的值增加为23。4. 2)从寄存器地址d所对应的寄存器中取值赋给循环寄存器,将循环寄存器中的32比特位值循环左移一个字节,并输出到替换寄存器中。步骤5,执行字节替换操作。参照图4,本步骤的实现如下5. I)将替换寄存器中的值作为地址分为从第31位到第24位、从第23位到第16位、从第15位到第8位和从第7位到第O位这4个字节,并将第31位到第24位地址发送给O号ROM,将第23位到第16位地址发送给I号ROM,将第15位到第8位地址发送给2号ROM,将第7位到第O位地址发送给3号ROM,这4个ROM再分别将接收到的地址值在S盒中对应的4个8比特位数值输出。5. 2)将4个ROM的输出值按照步骤5. I)中发送地址时的顺序从高到低组合成一个32比特位的值作为 字节替换操作的输出,即将O号ROM、I号ROM、2号ROM和3号ROM的返回值依次作为最高字节、次高字节、第三字节和第四字节组合成32比特位的值。步骤6,执行按位异或操作。参照图5,本步骤的实现如下6.1)根据序号η确定寄存器地址eO, el, e2, e3,若序号η为0_6之外的值,贝丨J寄存器地址e0,el, e2, e3中的值均保持不变,否则按以下规律确定地址若序号η为0,则寄存器地址eO, el, e2, e3依次被赋值0,1,2,3 ;序号η每增加I,则寄存器地址e0,el,e2,e3的值均增加8,例如,若序号η为2,则寄存器地址eO的值为16,el的值为17,e2的值为18,e3的值为19 ;若序号η为3,则寄存器地址eO的值增加为24,eI的值增加为25,e2的值增加为26,e3的值增加为27 ;6. 2)从不同寄存器地址所对应的寄存器中取值赋给不同的寄存器6. 2a)从寄存器地址eO所对应的寄存器中取值赋给O号寄存器;6. 2b)从寄存器地址el所对应的寄存器中取值赋给I号寄存器;6. 2c)从寄存器地址e2所对应的寄存器中取值赋给2号寄存器;6. 2d)从寄存器地址e3所对应的寄存器中取值赋给3号寄存器;6. 3)根据序号η从8个16进制的候选值中选择轮常数值输出,即当序号η为0_6时,对应的轮常数值输出依次为1,2,4,8,10,20,40,否则,轮常数值输出为O ;6. 4)根据序号η确定寄存器地址f0,fl,f2,f3的值,若序号η为0_6之外的值,则寄存器地址f0,fl, f2, f3中的值均保持不变,否则按以下规律确定地址若序号η为0,则寄存器地址f0, fl, f2, f3依次被赋值8,9,10,11 ;序号η每增加1,则寄存器地址f0,fl, f2,f3的值都增加8,例如,若序号η为3,则寄存器地址f0的值为32、f I的值为33、f2的值为34、f3的值为35 ;若号η为4,则寄存器地址f0的值增加为40,fl的值增加为41,f2的值增加为42,f3的值增加为43 ;6. 5)对O号寄存器中的值和字节替换操作的输出执行按位异或操作,用此结果再与轮常数值输出进行按位异或后,将所得结果作为轮密钥的第127位到96位存入寄存器地址f0所对应的寄存器和双口 SDRDM中;6. 6)对I号寄存器中的值和寄存器地址f0所对应的寄存器中的值执行按位异或操作,将所得结果作为轮密钥的第95位到64位存入寄存器地址Π所对应的寄存器和双口SDRDM 中;6. 7)对2号寄存器中的值和寄存器地址fl所对应的寄存器中的值执行按位异或操作,将所得结果作为轮密钥的第63位到32位存入寄存器地址f2所对应的寄存器和双口SDRDM 中;6. 8)对3号寄存器中的值和寄存器地址f2所对应的寄存器中的值执行按位异或操作,将所得结果存入替换寄存器中,并作为轮密钥的第31位到O位存入寄存器地址f3所对应的寄存器和双口 SDRDM中;此时完成了一个轮密钥的存储;步骤7,若序号为0-5间的整数域之外的值,则直接跳过步骤8)和步骤9),直接执行步骤10);否则,继续执行步骤8);步骤8,再次执行步骤5)中的字节替换操作,将结果作为字节替换的输出供二次按位异或操作使用;步骤9,执行二次按位异或操作,并存储轮密钥。参照图6,本步骤的实现如下9. I)根据序号η按以下规律确定寄存器地址e4, e5, e6, e7 若序号n为0,则寄存器地址e4,e5,e6,e7依次被赋值4,5,6,7 ;序号η每增加I,则寄存器地址e4,e5,e6,e7的值均增加8,例如,若序号η为3,则寄存器地址e4,e5,e6,e7分别为28,29,30和31,若序号η为4,则e4的值增加为36,e5的值增加为37,e6的值增加为38,e7的值增加为39 ;9. 2)从寄存器地址e4,e5,e6和e7所对应的寄存器中取值,并分别赋给4号寄存器、5号寄存器、6号寄存器和7号寄存器;9. 3)根据序号η按以下规律确定寄存器地址f4,f5,f6和f7的值若序号η为0,则寄存器地址f4,f5,f6和f7依次被赋值12,13,14,15 ;序号η每增加1,则寄存器地址f4,f5,f6和f7的值都增加8 ;例如,当序号η为4时,寄存器地址f4,f5,f6和f7的值分别为44,45,46和47,当序号η为5时,f4的值增加为52,f5的值增加为53,f6的值增加为54,f7的值增加为55 ;9. 4)对4号寄存器中的值和步骤8)中字节替换操作的二次输出执行按位异或操作,将所得结果作为新的轮密钥的第127位到第96位存入寄存器地址f4所对应的寄存器和双口 SDRDM中;9. 5)对5号寄存器中的值和寄存器地址f4所对应的寄存器中的值执行按位异或操作,将所得结果作为新的轮密钥的第95位到第64位存入寄存器地址f5所对应的寄存器和双口 SDRDM中;9. 6)对6号寄存器中的值和寄存器地址f5所对应的寄存器中的值执行按位异或操作,将所得结果作为新的轮密钥的第63位到第32位存入寄存器地址f6所对应的寄存器和双口 SDRDM中;9. 7)对7号寄存器中的值和寄存器地址f6所对应的寄存器中的值执行按位异或操作,将所得结果作为新的轮密钥的第31位到第O位存入寄存器地址f7所对应的寄存器和双口 SDRDM中;此时完成了本循环中第二个轮密钥的存储。步骤10,对序号η加1,若加I后的结果为7,则停止密钥扩展进程,否则重复步骤
4)至步骤10)。本发明的密钥扩展方法的优势可以通过理论推导进一步说明推导1,令生成全部轮密钥所需时间为Tk ;且本发明采用《AES算法的一种优化的FPGA实现方法》的加密流程方法,所需时间为Tc ;则可知《AES算法的一种优化的FPGA实现方法》完成128比特位的数据加密所需总时间为Tk+Tc ;而在本发明中,因轮密钥扩展与AES加密流程同时进行,完成同样的128比特位的数据的加密所需要的总时间仅为Tc ;每加 密128比特位的数据,节省了 Tk ;因而本发明与《AES算法的一种优化的FPGA实现方法》中的密钥扩展方法相比,更高效。推导2,令本发明的方法在实际应用中产生14个轮密钥的功耗与《A RijndaelCryptoprocessor Using Shared On-the-fly Key Scheduler))中的正向密钥扩展方法产生12个轮密钥的功耗均为p;且待加密数据长度为X比特位,其中X > 128。如前所述,本发明中的轮密钥在产生之后会被存储到内存中,在完成第一个128比特位数据的加密之后,因后续数据所需轮密钥是相同的,故无需再进行密钥扩展,只需直接读取内存中的轮密钥即可;这样加密X比特位的数据,应用本发明的密钥扩展单元的功耗仅为P ;而对于《A Rijndael Cryptoprocessor Using Shared On-the-fly Key Scheduler》中的正向密钥扩展方法,每加密128比特位数据,均需进行密钥扩展;其加密X比特位数据的功耗则为;因而与《A Rijnddel Cryptoprocessor Using Shared On-the-fly Key12ο
Scheduler))中的正向密钥扩展方法相比,本发明功耗更低。
权利要求
1.一种256比特位密钥扩展系统,包括 扩展计数单元(I),用于对序号η进行加I操作,并将序号η输出; 暂存单元(2),由位宽均为32比特的60个寄存器构成,用于暂存初始密钥和轮密钥,保证密钥扩展进程能够即时取用; 轮密钥存储单元(3),采用位宽为32比特位,深度为60的双口 SDRDM,用于存储初始密钥和轮密钥,保证在密钥扩展进行的同时能够为加密流程实时的提供轮密钥,并保证对后续数据块进行加密时无需密钥扩展即可直接读取已存储轮密钥; 循环寄存器(4),用于存储供字循环单元(5)读取使用的32比特位的值; 字循环单元(5),用于对循环寄存器(4)中的值进行循环左移I个字节的操作,并将结果输出给替换寄存器(6); 替换寄存器出),用于存储供字节替换单元(7)读取使用的32比特位的值; 字节替换单元(7),用于根据序号η执行字节替换操作若序号η为0-5,则将替换寄存器¢)中的值作为地址分为从第31位到第24位、从第23位到第16位、从第15位到第8位和从第7位到第O位这4个字节发送给S盒单元⑶,并将S盒单元⑶的返回值按照发送地址时的顺序从高到低组合后作为字节替换的一次输出,发送给异或单元(11);在替换寄存器被异或单元重新赋值之后,再执行一次上述操作,并将结果作为字节替换单元(7)的二次输出,发送给异或单元(11);若序号η为6,则将替换寄存器¢)中的值作为地址分为从第31位到第24位、从第23位到第16位、从第15位到第8位和从第7位到第O位这4个字节发送给S盒单元(8),并将S盒单元(8)的返回值按照发送地址时的顺序从高到低组合后作为字节替换的一次输出,发送给异或单元(11); S盒单元(8),采用四个预存有S盒的ROM,用于将字节替换单元(7)发送的四个地址在S盒中所对应的四个8比特位的值返回给字节替换单元(7); 轮常数选择单元(9),用于根据序号n,从8个16进制的候选值0,1,2,4,8,10,20,40中选出一个值输出给异或单元(11); 异或寄存单元(10),包括位宽均为32比特位的O号寄存器、I号寄存器、2号寄存器、3号寄存器、4号寄存器、5号寄存器、6号寄存器和7号寄存器,用于存储异或单元(11)所要使用的32比特位的值; 异或单元(11),包括O号异或子单元、I号异或子单元、2号异或子单元、3号异或子单元、4号异或子单元、5号异或子单元、6号异或子单元和7号异或子单元,其中,O号异或子单元、I号异或子单元、2号异或子单元和3号异或子单元用于进行按位异或操作,并将所得结果作为轮密钥输出给暂存单元(2),4号异或子单元、5号异或子单元、6号异或子单元和7号异或子单元则用于在序号η为0-5之间的整数值时,执行按位异或操作,并将所得结果作为新的轮密钥输出给暂存单元(2); 循环控制单元(12),用于根据序号η决定下一步是停止还是继续进行密钥扩展进程,若序号η为7,则结束密钥扩展进程,若轮号为0-6范围内的值,则继续执行密钥扩展进程。
2.根据权利要求I所述的256比特位密钥扩展系统,其中所述的4个S盒,分别为O号ROM、I 号 ROM、2 号 ROM 和 3 号 ROM ; O号R0M,采用位宽为8比特,深度为256,且预存有S盒的R0M,用于接收字节替换单元(7)发送过来的第31位到第24位的地址,并将该地址所对应的8比特位值输出给字节替换单元⑵; I号ROM,采用位宽为8比特,深度为256,且预存有S盒的ROM,用于接收字节替换单元(7)发送过来的第23位到第16位的地址,并将该地址所对应的8比特位值输出给字节替换单元⑵; 2号ROM,采用位宽为8比特,深度为256,且预存有S盒的ROM,用于接收字节替换单元(7)发送过来的第15位到第8位的地址,并将该地址所对应的8比特位值输出给字节替换单元⑵;3号ROM,采用位宽为8比特,深度为256,且预存有S盒的ROM,用于接收字节替换单元(7)发送过来的第7位到第O位的地址,并将该地址所对应的8比特位值输出给字节替换单 元(7) ο
3.根据权利要求I所述的256比特位密钥扩展系统,其中异或寄存单元(10)存储异或单元(11)所要使用的32比特位的值,是用O号寄存器存储O号异或子单元所要使用的32比特位的值,用I号寄存器存储I号异或子单元所要使用的32比特位的值,用2号寄存器存储2号异或子单元所要使用的32比特位的值,用3号寄存器存储3号异或子单元所要使用的32比特位的值,用4号寄存器存储4号异或子单元所要使用的32比特位的值,用5号寄存器存储5号异或子单元所要使用的32比特位的值,用6号寄存器存储6号异或子单元所要使用的32比特位的值,用7号寄存器存储7号异或子单元所要使用的32比特位的值。
4.根据权利要求I所述的256比特位密钥扩展系统,其中所述的O号异或子单元、I号异或子单元、2号异或子单元和3号异或子单元用于进行按位异或操作,并将所得结果作为轮密钥输出给暂存单元(2),是由O号异或子单元对O号寄存器中的值、字节替换单元(11)的输出和轮常数选择单元(9)的输出进行按位异或后,将所得结果作为轮密钥的第127位到第96位,同时输出给I号异或子单元和暂存单元(2);由I号异或子单元将I号寄存器中的值和O号异或子单元的输出进行按位异或,并将结果作为轮密钥的第95位到第64位,同时输出给2号异或子单元和暂存单元(2);由2号异或子单元将2号寄存器中的值和I号异或子单元的输出进行按位异或,并将结果作为轮密钥的第63位到第32位,同时输出给3号异或子单元和暂存单元(2);由3号异或子单元将3号寄存器中的值和2号异或子单元的输出进行按位异或,并将结果作为轮密钥的第31位到第O位,同时输出给替换寄存器(6)和暂存单元(2);此时完成了本循环的一个轮密钥的存储;
5.根据权利要求I所述的256比特位密钥扩展系统,其中所述的4号异或子单元、5号异或子单元、6号异或子单元和7号异或子单元用于在序号η为0-5之间的整数值时,执行按位异或操作,并将所得结果作为新的轮密钥输出给暂存单元(2),是由4号异或子单元对4号寄存器中的值和字节替换单元(11)的二次输出进行按位异或,将所得结果作为另一个轮密钥的第127位到第96位,同时输出给5号异或子单元和暂存单元(2);由5号异或子单元将5号寄存器中的值和4号异或子单元的输出进行按位异或,并将结果作为轮密钥的第95位到第64位,同时输出给6号异或子单元和暂存单元(2);由6号异或子单元将6号寄存器中的值和5号异或子单元的输出进行按位异或,并将结果作为轮密钥的第63位到第32位,同时输出给7号异或子单元和暂存单元(2);由7号异或子单元将7号寄存器中的值和6号异或子单元的输出进行按位异或,并将结果作为轮密钥的第31位到第O位,输出给暂存单元(2),完成本次循环的第二个轮密钥的存储。
6.根据权利要求1所述的256比特位密钥扩展系统,其中所述的轮密钥,是指密钥扩展 进程所产生的14个128比特位数,用于为高级加密标准AES中加密算法的每轮加密提供不 同的128比特位数。
7.一种256比特位密钥扩展方法,包括如下步骤.1)将对密钥扩展进程进行计数的变量定义为序号n,其取值范围分为0-6以外的整数 域和0-6之间的整数域这两种情况;.2)将序号n归零,开始密钥扩展进程;.3)将初始密钥从高位到低位分为8个32比特位的值,再按此顺序同时将这8个32比 特位的数据存入地址为0,1,2,3,4,5,6,7的寄存器和一个专用于存储轮密钥的双口 SDRDM 中;.4)执行字循环操作.4. 1)根据序号n确定寄存器地址d,若序号n为0-6之外的值,则寄存器地址d的值保 持不变,否则按以下规律确定地址若序号n为0,则寄存器地址d为7 ;序号n每增加1,寄存器地址d的值就增加8 ;.4.2)从寄存器地址d所对应的寄存器中取值赋给循环寄存器,将循环寄存器中的32比 特位值循环左移一个字节,并输出到替换寄存器中;.5)执行字节替换操作.5.1)将替换寄存器中的值作为地址分为从第31位到第24位、从第23位到第16位、从 第15位到第8位和从第7位到第0位这4个字节,分别发送给4个预存有S盒的ROM,这四 个ROM再将接收到的地址值在S盒中对应的8比特位数值同时返回;.5.2)将4个ROM返回的8比特位数值按照步骤5. 1)中每个地址在原32比特位值中的 位置从高到低的顺序,组合成一个新的32比特位的值作为字节替换操作的输出;.6)执行按位异或操作,并存储轮密钥.6.1)根据序号n确定寄存器地址eO,el, e2, e3,若序号n为0_6之外的值,则寄存器 地址eO,el, e2, e3中的值均保持不变,否则按以下规律确定地址若序号n为0,则寄存器地址eO,el, e2, e3依次被赋值0,1,2,3 ;序号n每增加1,则寄存器地址e0,el,e2,e3的值均增加8 ;.6. 2)从寄存器地址e0,el,e2,e3所对应的寄存器中取值,并分别赋给0号寄存器、1号 寄存器、2号寄存器、3号寄存器;.6. 3)根据序号n从8个16进制的候选值中选择轮常数值输出,即当序号n为0_6时, 对应的轮常数值输出依次为1,2,4,8,10,20,40,否则,轮常数值输出为0 ;.6. 4)根据序号n确定寄存器地址f0,fl,f2, f3的值,若序号n为0_6之外的值,则寄 存器地址f0,fl, f2, f3中的值均保持不变,否则按以下规律确定地址若序号n为0,则寄存器地址f0,fl,f2,f3依次被赋值8,9,10,11 ;序号n每增加1,则寄存器地址f0,fl,f2,f3的值都增加8 ;.6. 5)对0号寄存器中的值和字节替换操作的输出执行按位异或操作,用此结果再与轮 常数值输出进行按位异或后,将所得结果作为轮密钥的第127位到96位存入寄存器地址f0 所对应的寄存器和双口 SDRDM中;. 6.6)对I号寄存器中的值和寄存器地址fO所对应的寄存器中的值执行按位异或操作,将所得结果作为轮密钥的第95位到64位存入寄存器地址Π所对应的寄存器和双口 SDRDM中; . 6.7)对2号寄存器中的值和寄存器地址fl所对应的寄存器中的值执行按位异或操作,将所得结果作为轮密钥的第63位到32位存入寄存器地址f2所对应的寄存器和双口 SDRDM中; .6.8)对3号寄存器中的值和寄存器地址f2所对应的寄存器中的值执行按位异或操作,将所得结果存入替换寄存器中,并作为轮密钥的第31位到O位存入寄存器地址f3所对应的寄存器和双口 SDRDM中;此时完成了一个轮密钥的存储; .7)若序号为0-5间的整数域之外的值,则直接跳过步骤8)和步骤9),直接执行步骤10);否则,继续执行步骤8); .8)再次执行步骤5)中的字节替换操作,将结果作为字节替换的输出供二次按位异或操作使用; . 9)执行二次按位异或操作,并存储轮密钥 .9. I)根据序号η按以下规律确定寄存器地址e4, e5, e6, e7 若序号n为0,则寄存器地址e4,e5,e6,e7依次被赋值4,5,6,7 ; 序号η每增加1,则寄存器地址e4,e5, e6, e7的值均增加8 ;. 9. 2)从寄存器地址e4,e5,e6和e7所对应的寄存器中取值,并分别赋给4号寄存器、5号寄存器、6号寄存器和7号寄存器; . 9. 3)根据序号η按以下规律确定寄存器地址f4,f5,f6和f7的值 若序号η为0,则寄存器地址f4,f5,f6和f7依次被赋值6,7,8,9,10,11 ; 序号η每增加1,则寄存器地址f4,f5,f6和f7的值都增加8 ; . 9.4)对4号寄存器中的值和步骤8)中字节替换操作的输出执行按位异或操作,将所得结果作为新的轮密钥的第127位到第96位存入寄存器地址f4所对应的寄存器和双口SDRDM 中; .9. 5)对5号寄存器中的值和寄存器地址f4所对应的寄存器中的值执行按位异或操作,将所得结果作为新的轮密钥的第95位到第64位存入寄存器地址f5所对应的寄存器和双口 SDRDM 中; . 9. 6)对6号寄存器中的值和寄存器地址f5所对应的寄存器中的值执行按位异或操作,将所得结果作为新的轮密钥的第63位到第32位存入寄存器地址f6所对应的寄存器和双口 SDRDM 中; .9. 7)对7号寄存器中的值和寄存器地址f6所对应的寄存器中的值执行按位异或操作,将所得结果作为新的轮密钥的第31位到第O位存入寄存器地址f7所对应的寄存器和双口SDRDM中;此时完成了本循环中第二个轮密钥的存储。
.10)对序号η加I,若加I后的结果为7,则停止密钥扩展进程,否则重复步骤4)至步骤10)。
全文摘要
本发明公开了一种基于高级加密标准AES的256比特位密钥扩展系统及方法,主要解决现有256比特AES加密算法中密钥扩展过程的低效率以及高功耗问题。其实现过程是在密钥扩展的第一轮对初始密钥进行存储,取前4列作为该轮密钥扩展的轮密钥,并进行字循环、字节替换、按位异或操作;根据序号n执行新一次字节替换和二次按位异或操作;将两次按位异或操作结果作为轮密钥存储在本地寄存器和外部存储单元中,供加密流程读取使用;之后每轮都对前一轮所得轮密钥重复上述操作,直到得到所有14个轮密钥,结束密钥扩展。本发明能够兼顾密钥扩展的实时性以及轮密钥的可重用性,实现高效率和低功耗的密钥扩展,适用于AES加密算法的256比特密钥扩展过程。
文档编号H04L9/06GK102647272SQ20121013316
公开日2012年8月22日 申请日期2012年5月2日 优先权日2012年5月2日
发明者史江一, 李康, 赵哲斐, 赵彦尚, 邸志雄, 郝跃 申请人:西安电子科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1