CN102647272B - 256比特位密钥扩展系统及方法 - Google Patents
256比特位密钥扩展系统及方法 Download PDFInfo
- Publication number
- CN102647272B CN102647272B CN201210133163.8A CN201210133163A CN102647272B CN 102647272 B CN102647272 B CN 102647272B CN 201210133163 A CN201210133163 A CN 201210133163A CN 102647272 B CN102647272 B CN 102647272B
- Authority
- CN
- China
- Prior art keywords
- xor
- value
- register
- address
- subelements
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Storage Device Security (AREA)
Abstract
本发明公开了一种基于高级加密标准AES的256比特位密钥扩展系统及方法,主要解决现有256比特AES加密算法中密钥扩展过程的低效率以及高功耗问题。其实现过程是:在密钥扩展的第一轮对初始密钥进行存储,取前4列作为该轮密钥扩展的轮密钥,并进行字循环、字节替换、按位异或操作;根据序号n执行新一次字节替换和二次按位异或操作;将两次按位异或操作结果作为轮密钥存储在本地寄存器和外部存储单元中,供加密流程读取使用;之后每轮都对前一轮所得轮密钥重复上述操作,直到得到所有14个轮密钥,结束密钥扩展。本发明能够兼顾密钥扩展的实时性以及轮密钥的可重用性,实现高效率和低功耗的密钥扩展,适用于AES加密算法的256比特密钥扩展过程。
Description
技术领域
本发明属于安全技术领域,涉及数据加密,特别涉及高级加密标准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比特位密钥扩展系统,包括:
扩展计数单元,用于对序号n进行加1操作,并将序号n输出;
暂存单元,由位宽均为32比特的60个寄存器构成,用于暂存初始密钥和轮密钥,保证密钥扩展进程能够即时取用;
轮密钥存储单元,采用位宽为32比特位,深度为60的双口SDRDM,用于存储初始密钥和轮密钥,保证在密钥扩展进行的同时能够为加密流程实时的提供轮密钥,并保证对后续数据块进行加密时无需密钥扩展即可直接读取已存储轮密钥;
循环寄存器,用于存储供字循环单元读取使用的32比特位的值;
字循环单元,用于对循环寄存器中的值进行循环左移1个字节的操作,并将结果输出给替换寄存器;
替换寄存器,用于存储供字节替换单元读取使用的32比特位的值;
字节替换单元,用于根据序号n执行字节替换操作:若序号n为0-5,则将替换寄存器中的值作为地址分为从第31位到第24位、从第23位到第16位、从第15位到第8位和从第7位到第0位这4个字节发送给S盒单元,并将S盒单元的返回值按照发送地址时的顺序从高到低组合后作为字节替换的一次输出,发送给异或单元;在替换寄存器被异或单元重新赋值之后,再执行一次上述操作,并将结果作为字节替换单元的二次输出,发送给异或单元;若序号n为6,则将替换寄存器中的值作为地址分为从第31位到第24位、从第23位到第16位、从第15位到第8位和从第7位到第0位这4个字节发送给S盒单元,并将S盒单元的返回值按照发送地址时的顺序从高到低组合后作为字节替换的一次输出,发送给异或单元;
S盒单元,采用四个预存有S盒的ROM,用于将字节替换单元发送的四个地址在S盒中所对应的四个8比特位的值返回给字节替换单元;
轮常数选择单元,用于根据序号n,从8个16进制的候选值:0,1,2,4,8,10,20,40中选出一个值输出给异或单元;
异或寄存单元,包括位宽均为32比特位的0号寄存器、1号寄存器、2号寄存器、3号寄存器、4号寄存器、5号寄存器、6号寄存器和7号寄存器,用于存储异或单元所要使用的32比特位的值;
异或单元,包括0号异或子单元、1号异或子单元、2号异或子单元、3号异或子单元、4号异或子单元、5号异或子单元、6号异或子单元和7号异或子单元,其中0号异或子单元、1号异或子单元、2号异或子单元和3号异或子单元用于进行按位异或操作,并将所得结果作为轮密钥输出给暂存单元,4号异或子单元、5号异或子单元、6号异或子单元和7号异或子单元则用于在序号n为0-5之间的整数值时,执行按位异或操作,并将所得结果作为新的轮密钥输出给暂存单元;
循环控制单元,用于根据序号n决定下一步是停止还是继续进行密钥扩展进程,若序号n为7,则结束密钥扩展进程,若轮号为0-6范围内的值,则继续执行密钥扩展进程。
为实现上述目的,本发明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确定寄存器地址e0,e1,e2,e3,若序号n为0-6之外的值,则寄存器地址e0,e1,e2,e3中的值均保持不变,否则按以下规律确定地址:
若序号n为0,则寄存器地址e0,e1,e2,e3依次被赋值0,1,2,3;
序号n每增加1,则寄存器地址e0,e1,e2,e3的值均增加8;
6.2)从寄存器地址e0,e1,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,f1,f2,f3的值,若序号n为0-6之外的值,则寄存器地址f0,f1,f2,f3中的值均保持不变,否则按以下规律确定地址:
若序号n为0,则寄存器地址f0,f1,f2,f3依次被赋值8,9,10,11;
序号n每增加1,则寄存器地址f0,f1,f2,f3的值都增加8;
6.5)对0号寄存器中的值和字节替换操作的输出执行按位异或操作,用此结果再与轮常数值输出进行按位异或后,将所得结果作为轮密钥的第127位到96位存入寄存器地址f0所对应的寄存器和双口SDRDM中;
6.6)对1号寄存器中的值和寄存器地址f0所对应的寄存器中的值执行按位异或操作,将所得结果作为轮密钥的第95位到64位存入寄存器地址f1所对应的寄存器和双口SDRDM中;
6.7)对2号寄存器中的值和寄存器地址f1所对应的寄存器中的值执行按位异或操作,将所得结果作为轮密钥的第63位到32位存入寄存器地址f2所对应的寄存器和双口SDRDM中;
6.8)对3号寄存器中的值和寄存器地址f2所对应的寄存器中的值执行按位异或操作,将所得结果存入替换寄存器中,并作为轮密钥的第31位到0位存入寄存器地址f3所对应的寄存器和双口SDRDM中;此时完成了一个轮密钥的存储;
7)若序号为0-5间的整数域之外的值,则直接跳过步骤8)和步骤9),直接执行步骤10);否则,继续执行步骤8);
8)再次执行步骤5)中的字节替换操作,将结果作为字节替换的输出,供二次按位异或操作使用;
9)执行二次按位异或操作,并存储轮密钥:
9.1)根据序号n按以下规律确定寄存器地址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)根据序号n按以下规律确定寄存器地址f4,f5,f6和f7的值:
若序号n为0,则寄存器地址f4,f5,f6和f7依次被赋值6,7,8,9,10,11;
序号n每增加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位到第0位存入寄存器地址f7所对应的寄存器和双口SDRDM中;此时完成了本循环中第二个轮密钥的存储。
10)对序号n加1,若加1后的结果为7,则停止密钥扩展进程,否则重复步骤4)至步骤10)。
本发明具有如下优点:
1)本发明通过简化密钥扩展循环的判断条件,以及减少密钥扩展的循环次数,与传统方法相比,在提高密钥扩展的效率的同时降低了密钥扩展的功耗。
传统方法均采用高级加密标准AES中的密钥扩展算法,将初始密钥扩展得到的扩展密钥视作一个数组W[i],0≤i<60,其中每个数组元素w[i]为轮密钥的一列,而编号i作为密钥扩展循环过程的主要参考对象;在初始密钥为256比特位的情况下,传统密钥扩展的循环依据编号i能否被8整除分成了两种情况,若编号i能被8整除,则 否则, 其中,subword表示对括号内的值进行字节替换操作,rotword表示对括号内的值进行字循环操作,rcon表示根据括号内的值选择轮常数;这种密钥扩展方法每循环一次仅产生轮密钥的一列,故而产生所有的14个轮密钥需要进行密钥扩展循环56次,且对条件“编号i是否能被8整除”的判断要进行56次,因而不仅效率较低,而且在实际应用中功耗也较大。
本发明中,密钥扩展循环的判断条件仅有1个,就是序号n;即在正常执行的情况下,序号n的取值为0-6之间的7个整数值,密钥扩展的循环过程是依据序号n来选择操作数以及执行字循环、字节替换和按位异或操作,这样的循环每次产生2个轮密钥;通过这种循环方式,本发明的密钥扩展方法只需循环7次,即可完成所有轮密钥的生成,而对于轮号的判断也只需进行7次,不仅简化了密钥扩展循环的判断条件,而且减少了密钥扩展的循环次数,从而在提高了密钥扩展的效率的同时降低了密钥扩展的功耗;
2)本发明具有较高的实用性;
在实际应用中,由于环境以及电路故障等原因,可能造成序号n的值不在0-6之间的整数域内,从而使得整个密钥扩展过程都无法正常进行;对于这种情况,本发明中给出了对应的处理方式,使得其他的的操作不受序号n异常赋值的影响,从而降低了故障所带来的不良影响,提高了实用性;
3)本发明通过暂存单元的定义,使得密钥扩展进程可以通过判定地址来选择性的读取暂存在其中的轮密钥,又通过运用寄存器地址d,e0,e1,e2,e3,e4,e5,e6,e7,f0,f1,f2,f3,f4,f5,f6,f7的取值规律提高了密钥扩展中的运算操作数的选择和读取过程的效率;
4)本发明由于将完成两个轮密钥扩展所需要的操作流程化,并在完成每个轮密钥扩展的同时,将轮密钥存入双口SDRDM和暂存单元中,故在实时的为加密流程提供轮密钥的同时保证了轮密钥的可重用性,从而兼顾了高效率与低功耗;
5)本发明通过使用4个S盒来完成字节替换,使得字节替换过程的实现易于并行实现,同时提高了密钥扩展的效率。
附图说明
图1为本发明256比特位密钥扩展系统结构图;
图2为本发明256比特位密钥扩展方法流程图;
图3为本发明中的字循环操作子流程图;
图4为本发明中的字节替换操作子流程图;
图5为本发明中的按位异或操作子流程图;
图6为本发明中的二次按位异或操作子流程图。
具体实施方式
参照图1,本发明基于高级加密标准AES的256比特位密钥扩展系统包括:扩展计数单元1、暂存单元2、轮密钥存储单元3、循环寄存器4、字循环单元5、替换寄存器6、字节替换单元7、S盒单元8、轮常数选择单元9、异或寄存单元10、异或单元11、循环控制单元12,该S盒单元8包括4个预存有S盒的ROM:0号ROM、1号ROM、2号ROM和3号ROM;该异或寄存单元10包括8个位宽为32比特位的寄存器:0号寄存器、1号寄存器、2号寄存器、3号寄存器、4号寄存器、5号寄存器、6号寄存器和7号寄存器;该异或单元11包括8个异或子单元:0号异或子单元、1号异或子单元、2号异或子单元、3号异或子单元、4号异或子单元、5号异或子单元、6号异或子单元和7号异或子单元。其中:
扩展计数单元1,用于对序号n进行加1操作,并将序号n同时输出给循环控制单元12、轮常数选择单元9、字节替换单元7、异或单元11和暂存单元2。
暂存单元2,由位宽均为32比特的60个寄存器构成,用于暂存初始密钥和轮密钥,保证密钥扩展进程能够即时取用,此外还用于根据序号n选择轮密钥输出给轮密钥存储单元3和异或寄存器单元10,其中的轮密钥,是指密钥扩展进程所产生的14个128比特位数,用于为高级加密标准AES中加密算法的每轮加密提供不同的128比特位数。
轮密钥存储单元3,采用位宽为32比特位,深度为60的双口SDRAM,用于存储初始密钥和轮密钥,使得加密流程能够在密钥扩展进行的同时取得已存储的轮密钥,并保证后续数据加密时无需密钥扩展即可直接读取已存储轮密钥。
循环寄存器4,位宽为32比特位,用于存储供字循环单元5读取使用的值。
字循环单元5,用于将循环寄存器4中的值进行循环左移1个字节并输出给替换寄存器6。
替换寄存器6,用于存储供字节替换单元7读取使用的32比特位的值。
字节替换单元7,用于根据序号n执行字节替换操作:若序号n为0-5,则将替换寄存器6中的值作为地址分为从第31位到第24位、从第23位到第16位、从第15位到第8位和从第7位到第0位这4个字节发送给S盒单元8,并将S盒单元8的返回值按照发送地址时的顺序从高到低组合后输出给异或单元10;若序号n为6,则在一次循环中仅执行一次上述操作,不再执行第二次的字节替换。
S盒单元8中的0号ROM、1号ROM、2号ROM和3号ROM均存有S盒,每个ROM位宽为8比特,深度为256,用于接收字节替换单元7发送过来的地址,并将地址在S盒中对应的值返回给字节替换单元7,其中:
0号ROM接收字节替换单元7发送过来的第31位到第24位的地址,并将该地址所对应的8比特位值输出给字节替换单元7;
1号ROM接收字节替换单元7发送过来的第23位到第16位的地址,并将该地址所对应的8比特位值输出给字节替换单元7;
2号ROM接收字节替换单元7发送过来的第15位到第8位的地址,并将该地址所对应的8比特位值输出给字节替换单元7;
3号ROM接收字节替换单元7发送过来的第7位到第0位的地址,并将该地址所对应的8比特位值输出给字节替换单元7。
轮常数选择单元9,用于根据序号n,从8个16进制的候选值:0,1,2,4,8,10,20,40中选出一个值输出给异或单元11,即当序号n为0-6时,对应的输出依次为1,2,4,8,10,20,40,否则,输出为0;其中,轮常数为AES标准中的密钥扩展算法所采用的概念,每个轮常数由序号n计算得来,因序号n取值范围有限,故直接采用计算结果作为轮常数的候选值,需要说明的是0并非轮常数值,而是为了防止序号n异常而设置的候选值。
异或寄存单元10,包括位宽均为32比特位的0号寄存器、1号寄存器、2号寄存器、3号寄存器、4号寄存器、5号寄存器、6号寄存器和7号寄存器,用于存储异或单元11所要使用的32比特位的值,其中,0号寄存器存储0号异或子单元所要使用的32比特位的值,1号寄存器存储1号异或子单元所要使用的32比特位的值,2号寄存器存储2号异或子单元所要使用的32比特位的值,3号寄存器存储3号异或子单元所要使用的32比特位的值,4号寄存器存储4号异或子单元所要使用的32比特位的值,5号寄存器存储5号异或子单元所要使用的32比特位的值,6号寄存器存储6号异或子单元所要使用的32比特位的值,7号寄存器存储7号异或子单元所要使用的32比特位的值。
异或单元11中,0号异或子单元、1号异或子单元、2号异或子单元和3号异或子单元用于进行按位异或操作,并将所得结果作为轮密钥输出给暂存单元2,4号异或子单元、5号异或子单元、6号异或子单元和7号异或子单元则用于在序号n为0-5之间的整数值时,执行按位异或操作,并将所得结果作为新的轮密钥输出给暂存单元2;其中是由0号异或子单元对0号寄存器中的值、字节替换单元7的输出和轮常数选择单元9的输出进行按位异或后,将所得结果作为轮密钥的第127位到第96位,同时输出给1号异或子单元和暂存单元2;由1号异或子单元将1号寄存器中的值和0号异或子单元的输出进行按位异或,并将结果作为轮密钥的第95位到第64位,同时输出给2号异或子单元和暂存单元2;由2号异或子单元将2号寄存器中的值和1号异或子单元的输出进行按位异或,并将结果作为轮密钥的第63位到第32位,同时输出给3号异或子单元和暂存单元2;由3号异或子单元将3号寄存器中的值和2号异或子单元的输出进行按位异或,并将结果作为轮密钥的第31位到第0位,同时输出给替换寄存器6和暂存单元2;此时完成了本循环的一个轮密钥的存储;若序号n为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位到第0位,输出给暂存单元2,完成本次循环的第二个轮密钥的存储。
循环控制单元12,根据序号n决定下一步是停止还是继续进行密钥扩展进程,若序号n为7,则结束密钥扩展进程,若轮号为0-6范围内的值,则继续执行密钥扩展进程。
参照图2,本发明的256比特位密钥扩展方法,包括如下步骤:
步骤1,将对密钥扩展进程进行计数的变量定义为序号n,其取值范围分为0-6以外的整数域和0-6之间的整数域这两种情况。
步骤2,将序号n归零,开始密钥扩展进程。
步骤3,将初始密钥从高位到低位分为8个32比特位的值,再按此顺序同时将这8个32比特位的数据存入地址为0,1,2,3,4,5,6,7的寄存器和一个专用于存储轮密钥的双口SDRAM中。
步骤4,执行字循环操作。
参照图3,本步骤的实现如下:
4.1)根据序号n确定寄存器地址d,若序号n为0-6之外的值,则寄存器地址d的值保持不变,否则按以下规律确定地址:
若序号n为0,则寄存器地址d为7;
序号n每增加1,寄存器地址d的值就增加8,例如,若序号n为1,则寄存器地址d的值就为15;若序号n为2,则寄存器地址d的值增加为23。
4.2)从寄存器地址d所对应的寄存器中取值赋给循环寄存器,将循环寄存器中的32比特位值循环左移一个字节,并输出到替换寄存器中。
步骤5,执行字节替换操作。
参照图4,本步骤的实现如下:
5.1)将替换寄存器中的值作为地址分为从第31位到第24位、从第23位到第16位、从第15位到第8位和从第7位到第0位这4个字节,并将第31位到第24位地址发送给0号ROM,将第23位到第16位地址发送给1号ROM,将第15位到第8位地址发送给2号ROM,将第7位到第0位地址发送给3号ROM,这4个ROM再分别将接收到的地址值在S盒中对应的4个8比特位数值输出。
5.2)将4个ROM的输出值按照步骤5.1)中发送地址时的顺序从高到低组合成一个32比特位的值作为字节替换操作的输出,即将0号ROM、1号ROM、2号ROM和3号ROM的返回值依次作为最高字节、次高字节、第三字节和第四字节组合成32比特位的值。
步骤6,执行按位异或操作。
参照图5,本步骤的实现如下:
6.1)根据序号n确定寄存器地址e0,e1,e2,e3,若序号n为0-6之外的值,则寄存器地址e0,e1,e2,e3中的值均保持不变,否则按以下规律确定地址:
若序号n为0,则寄存器地址e0,e1,e2,e3依次被赋值0,1,2,3;
序号n每增加1,则寄存器地址e0,e1,e2,e3的值均增加8,例如,若序号n为2,则寄存器地址e0的值为16,e1的值为17,e2的值为18,e3的值为19;若序号n为3,则寄存器地址e0的值增加为24,e1的值增加为25,e2的值增加为26,e3的值增加为27;
6.2)从不同寄存器地址所对应的寄存器中取值赋给不同的寄存器:
6.2a)从寄存器地址e0所对应的寄存器中取值赋给0号寄存器;
6.2b)从寄存器地址e1所对应的寄存器中取值赋给1号寄存器;
6.2c)从寄存器地址e2所对应的寄存器中取值赋给2号寄存器;
6.2d)从寄存器地址e3所对应的寄存器中取值赋给3号寄存器;
6.3)根据序号n从8个16进制的候选值中选择轮常数值输出,即当序号n为0-6时,对应的轮常数值输出依次为1,2,4,8,10,20,40,否则,轮常数值输出为0;
6.4)根据序号n确定寄存器地址f0,f1,f2,f3的值,若序号n为0-6之外的值,则寄存器地址f0,f1,f2,f3中的值均保持不变,否则按以下规律确定地址:
若序号n为0,则寄存器地址f0,f1,f2,f3依次被赋值8,9,10,11;
序号n每增加1,则寄存器地址f0,f1,f2,f3的值都增加8,例如,若序号n为3,则寄存器地址f0的值为32、f1的值为33、f2的值为34、f3的值为35;若号n为4,则寄存器地址f0的值增加为40,f1的值增加为41,f2的值增加为42,f3的值增加为43;
6.5)对0号寄存器中的值和字节替换操作的输出执行按位异或操作,用此结果再与轮常数值输出进行按位异或后,将所得结果作为轮密钥的第127位到96位存入寄存器地址f0所对应的寄存器和双口SDRDM中;
6.6)对1号寄存器中的值和寄存器地址f0所对应的寄存器中的值执行按位异或操作,将所得结果作为轮密钥的第95位到64位存入寄存器地址f1所对应的寄存器和双口SDRDM中;
6.7)对2号寄存器中的值和寄存器地址f1所对应的寄存器中的值执行按位异或操作,将所得结果作为轮密钥的第63位到32位存入寄存器地址f2所对应的寄存器和双口SDRDM中;
6.8)对3号寄存器中的值和寄存器地址f2所对应的寄存器中的值执行按位异或操作,将所得结果存入替换寄存器中,并作为轮密钥的第31位到0位存入寄存器地址f3所对应的寄存器和双口SDRDM中;此时完成了一个轮密钥的存储;
步骤7,若序号为0-5间的整数域之外的值,则直接跳过步骤8)和步骤9),直接执行步骤10);否则,继续执行步骤8);
步骤8,再次执行步骤5)中的字节替换操作,将结果作为字节替换的输出供二次按位异或操作使用;
步骤9,执行二次按位异或操作,并存储轮密钥。
参照图6,本步骤的实现如下:
9.1)根据序号n按以下规律确定寄存器地址e4,e5,e6,e7:
若序号n为0,则寄存器地址e4,e5,e6,e7依次被赋值4,5,6,7;
序号n每增加1,则寄存器地址e4,e5,e6,e7的值均增加8,例如,若序号n为3,则寄存器地址e4,e5,e6,e7分别为28,29,30和31,若序号n为4,则e4的值增加为36,e5的值增加为37,e6的值增加为38,e7的值增加为39;
9.2)从寄存器地址e4,e5,e6和e7所对应的寄存器中取值,并分别赋给4号寄存器、5号寄存器、6号寄存器和7号寄存器;
9.3)根据序号n按以下规律确定寄存器地址f4,f5,f6和f7的值:
若序号n为0,则寄存器地址f4,f5,f6和f7依次被赋值12,13,14,15;
序号n每增加1,则寄存器地址f4,f5,f6和f7的值都增加8;例如,当序号n为4时,寄存器地址f4,f5,f6和f7的值分别为44,45,46和47,当序号n为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位到第0位存入寄存器地址f7所对应的寄存器和双口SDRDM中;此时完成了本循环中第二个轮密钥的存储。
步骤10,对序号n加1,若加1后的结果为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 KeyScheduler》中的正向密钥扩展方法,每加密128比特位数据,均需进行密钥扩展;其加密x比特位数据的功耗则为因而与《A Rijnddel CryptoprocessorUsing Shared On-the-fly Key Scheduler》中的正向密钥扩展方法相比,本发明功耗更低。
Claims (7)
1.一种256比特位密钥扩展系统,包括:
扩展计数单元(1),用于对序号n进行加1操作,并将序号n输出;
暂存单元(2),由位宽均为32比特的60个寄存器构成,用于暂存初始密钥和轮密钥,保证密钥扩展进程能够即时取用;
轮密钥存储单元(3),采用位宽为32比特位,深度为60的双口SDRDM,用于存储初始密钥和轮密钥,保证在密钥扩展进行的同时能够为加密流程实时的提供轮密钥,并保证对后续数据块进行加密时无需密钥扩展即可直接读取已存储轮密钥;
循环寄存器(4),用于存储供字循环单元(5)读取使用的32比特位的值;
字循环单元(5),用于对循环寄存器(4)中的值进行循环左移1个字节的操作,并将结果输出给替换寄存器(6);
替换寄存器(6),用于存储供字节替换单元(7)读取使用的32比特位的值;
字节替换单元(7),用于根据序号n执行字节替换操作:若序号n为0-5,则将替换寄存器(6)中的值作为地址分为从第31位到第24位、从第23位到第16位、从第15位到第8位和从第7位到第0位这4个字节发送给S盒单元(8),并将S盒单元(8)的返回值按照发送地址时的顺序从高到低组合后作为字节替换的一次输出,发送给异或单元(11);在替换寄存器被异或单元重新赋值之后,再执行一次上述操作,并将结果作为字节替换单元(7)的二次输出,发送给异或单元(11);若序号n为6,则将替换寄存器(6)中的值作为地址分为从第31位到第24位、从第23位到第16位、从第15位到第8位和从第7位到第0位这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比特位的0号寄存器、1号寄存器、2号寄存器、3号寄存器、4号寄存器、5号寄存器、6号寄存器和7号寄存器,用于存储异或单元(11)所要使用的32比特位的值;
异或单元(11),包括0号异或子单元、1号异或子单元、2号异或子单元、3号异或子单元、4号异或子单元、5号异或子单元、6号异或子单元和7号异或子单元,其中,0号异或子单元、1号异或子单元、2号异或子单元和3号异或子单元用于进行按位异或操作,并将所得结果作为轮密钥输出给暂存单元(2),4号异或子单元、5号异或子单元、6号异或子单元和7号异或子单元则用于在序号n为0-5之间的整数值时,执行按位异或操作,并将所得结果作为新的轮密钥输出给暂存单元(2);
循环控制单元(12),用于根据序号n决定下一步是停止还是继续进行密钥扩展进程,若序号n为7,则结束密钥扩展进程,若轮号为0-6范围内的值,则继续执行密钥扩展进程。
2.根据权利要求1所述的256比特位密钥扩展系统,其中所述的4个S盒,分别为0号ROM、1号ROM、2号ROM和3号ROM;
0号ROM,采用位宽为8比特,深度为256,且预存有S盒的ROM,用于接收字节替换单元(7)发送过来的第31位到第24位的地址,并将该地址所对应的8比特位值输出给字节替换单元(7);
1号ROM,采用位宽为8比特,深度为256,且预存有S盒的ROM,用于接收字节替换单元(7)发送过来的第23位到第16位的地址,并将该地址所对应的8比特位值输出给字节替换单元(7);
2号ROM,采用位宽为8比特,深度为256,且预存有S盒的ROM,用于接收字节替换单元(7)发送过来的第15位到第8位的地址,并将该地址所对应的8比特位值输出给字节替换单元(7);
3号ROM,采用位宽为8比特,深度为256,且预存有S盒的ROM,用于接收字节替换单元(7)发送过来的第7位到第0位的地址,并将该地址所对应的8比特位值输出给字节替换单元(7)。
3.根据权利要求1所述的256比特位密钥扩展系统,其中异或寄存单元(10)存储异或单元(11)所要使用的32比特位的值,是用0号寄存器存储0号异或子单元所要使用的32比特位的值,用1号寄存器存储1号异或子单元所要使用的32比特位的值,用2号寄存器存储2号异或子单元所要使用的32比特位的值,用3号寄存器存储3号异或子单元所要使用的32比特位的值,用4号寄存器存储4号异或子单元所要使用的32比特位的值,用5号寄存器存储5号异或子单元所要使用的32比特位的值,用6号寄存器存储6号异或子单元所要使用的32比特位的值,用7号寄存器存储7号异或子单元所要使用的32比特位的值。
4.根据权利要求1所述的256比特位密钥扩展系统,其中所述的0号异或子单元、1号异或子单元、2号异或子单元和3号异或子单元用于进行按位异或操作,并将所得结果作为轮密钥输出给暂存单元(2),是由0号异或子单元对0号寄存器中的值、字节替换单元(11)的输出和轮常数选择单元(9)的输出进行按位异或后,将所得结果作为轮密钥的第127位到第96位,同时输出给1号异或子单元和暂存单元(2);由1号异或子单元将1号寄存器中的值和0号异或子单元的输出进行按位异或,并将结果作为轮密钥的第95位到第64位,同时输出给2号异或子单元和暂存单元(2);由2号异或子单元将2号寄存器中的值和1号异或子单元的输出进行按位异或,并将结果作为轮密钥的第63位到第32位,同时输出给3号异或子单元和暂存单元(2);由3号异或子单元将3号寄存器中的值和2号异或子单元的输出进行按位异或,并将结果作为轮密钥的第31位到第0位,同时输出给替换寄存器(6)和暂存单元(2);此时完成了本循环的一个轮密钥的存储。
5.根据权利要求1所述的256比特位密钥扩展系统,其中所述的4号异或子单元、5号异或子单元、6号异或子单元和7号异或子单元用于在序号n为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位到第0位,输出给暂存单元(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确定寄存器地址e0,e1,e2,e3,若序号n为0-6之外的值,则寄存器地址e0,e1,e2,e3中的值均保持不变,否则按以下规律确定地址:
若序号n为0,则寄存器地址e0,e1,e2,e3依次被赋值0,1,2,3;
序号n每增加1,则寄存器地址e0,e1,e2,e3的值均增加8;
6.2)从寄存器地址e0,e1,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,f1,f2,f3的值,若序号n为0-6之外的值,则寄存器地址f0,f1,f2,f3中的值均保持不变,否则按以下规律确定地址:
若序号n为0,则寄存器地址f0,f1,f2,f3依次被赋值8,9,10,11;
序号n每增加1,则寄存器地址f0,f1,f2,f3的值都增加8;
6.5)对0号寄存器中的值和字节替换操作的输出执行按位异或操作,用此结果再与轮常数值输出进行按位异或后,将所得结果作为轮密钥的第127位到96位存入寄存器地址f0所对应的寄存器和双口SDRDM中;
6.6)对1号寄存器中的值和寄存器地址f0所对应的寄存器中的值执行按位异或操作,将所得结果作为轮密钥的第95位到64位存入寄存器地址f1所对应的寄存器和双口SDRDM中;
6.7)对2号寄存器中的值和寄存器地址f1所对应的寄存器中的值执行按位异或操作,将所得结果作为轮密钥的第63位到32位存入寄存器地址f2所对应的寄存器和双口SDRDM中;
6.8)对3号寄存器中的值和寄存器地址f2所对应的寄存器中的值执行按位异或操作,将所得结果存入替换寄存器中,并作为轮密钥的第31位到0位存入寄存器地址f3所对应的寄存器和双口SDRDM中;此时完成了一个轮密钥的存储;
7)若序号为0-5间的整数域之外的值,则直接跳过步骤8)和步骤9),直接执行步骤10);否则,继续执行步骤8);
8)再次执行步骤5)中的字节替换操作,将结果作为字节替换的输出供二次按位异或操作使用;
9)执行二次按位异或操作,并存储轮密钥:
9.1)根据序号n按以下规律确定寄存器地址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)根据序号n按以下规律确定寄存器地址f4,f5,f6和f7的值:
若序号n为0,则寄存器地址f4,f5,f6和f7依次被赋值12、13、14、15;
序号n每增加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位到第0位存入寄存器地址f7所对应的寄存器和双口SDRDM中;此时完成了本循环中第二个轮密钥的存储;
10)对序号n加1,若加1后的结果为7,则停止密钥扩展进程,否则重复步骤4)至步骤10)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210133163.8A CN102647272B (zh) | 2012-05-02 | 2012-05-02 | 256比特位密钥扩展系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210133163.8A CN102647272B (zh) | 2012-05-02 | 2012-05-02 | 256比特位密钥扩展系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102647272A CN102647272A (zh) | 2012-08-22 |
CN102647272B true CN102647272B (zh) | 2014-08-20 |
Family
ID=46659860
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210133163.8A Expired - Fee Related CN102647272B (zh) | 2012-05-02 | 2012-05-02 | 256比特位密钥扩展系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102647272B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104410616B (zh) * | 2014-11-20 | 2018-01-05 | 广州日滨科技发展有限公司 | 数据加密、解密、传输方法和系统 |
CN106027225B (zh) * | 2015-03-23 | 2019-07-26 | 联想(北京)有限公司 | 数据的解密方法以及电子设备 |
CN104954362B (zh) * | 2015-04-27 | 2018-08-14 | 深圳市美贝壳科技有限公司 | 序列号的加密和解密方法及其装置 |
CN113688414A (zh) * | 2021-10-25 | 2021-11-23 | 苏州浪潮智能科技有限公司 | 一种数据处理方法、系统、存储介质及设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101262341A (zh) * | 2008-02-22 | 2008-09-10 | 北京航空航天大学 | 一种会务系统中混合加密方法 |
EP2442482A1 (en) * | 2009-06-12 | 2012-04-18 | Data Assurance And Communication Security Center, Chinese Academy of Sciences | Method and device for implementing stream cipher |
-
2012
- 2012-05-02 CN CN201210133163.8A patent/CN102647272B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101262341A (zh) * | 2008-02-22 | 2008-09-10 | 北京航空航天大学 | 一种会务系统中混合加密方法 |
EP2442482A1 (en) * | 2009-06-12 | 2012-04-18 | Data Assurance And Communication Security Center, Chinese Academy of Sciences | Method and device for implementing stream cipher |
Also Published As
Publication number | Publication date |
---|---|
CN102647272A (zh) | 2012-08-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102624520B (zh) | 基于aes的192比特位密钥扩展系统及方法 | |
CN105490802B (zh) | 基于gpu的改进sm4并行加解密通信方法 | |
CN102710415B (zh) | 一种利用对称密码算法进行数据加解密的方法及查表装置 | |
CN102664730B (zh) | 基于高级加密标准aes的128比特位密钥扩展方法 | |
CN101622816B (zh) | 用于高级加密标准(aes)的灵活结构和指令 | |
CN102012993B (zh) | 一种数据选择加密解密方法及装置 | |
US10742394B2 (en) | Key sequence generation for cryptographic operations | |
CN103812641A (zh) | 一种实现sm4分组对称密码算法的系统 | |
CN103444124B (zh) | 加密处理装置、加密处理方法 | |
CN102647272B (zh) | 256比特位密钥扩展系统及方法 | |
CN101350714A (zh) | 采用混合rijndael s-box的有效高级加密标准数据路径 | |
CN105051677A (zh) | 用共享随机比特进行掩码 | |
CN106034021B (zh) | 轻量级双模兼容aes加解密模块及其方法 | |
Panda | Data security in wireless sensor networks via AES algorithm | |
CN103621007A (zh) | 加密处理装置、加密处理方法和程序 | |
CN103503362A (zh) | 数据处理装置、数据处理方法以及程序 | |
CN101588233A (zh) | 无线传感器网络节点应用中aes协处理器系统与架构 | |
CN101764685A (zh) | 实现sms4算法的加解密系统 | |
CN103490877A (zh) | 基于cuda的aria对称分组密码算法并行化方法 | |
CN116722968A (zh) | 一种基于uwb的轻量化aes-128动态加密方法 | |
CN104219045B (zh) | Rc4 流密码生成器 | |
US20120321079A1 (en) | System and method for generating round keys | |
CN109462468B (zh) | 数据处理方法和装置 | |
Srivastava et al. | AES-128 Performance in TinyOS with CBC algorithm (WSN) | |
CN1833399B (zh) | 瑞恩多尔块密码装置及其加密/解密方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20140820 Termination date: 20190502 |
|
CF01 | Termination of patent right due to non-payment of annual fee |