会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 电脑编程 / 算法 / 针对AES对称加密算法的指令优化处理器

针对AES对称加密算法的指令优化处理器

阅读:1160发布:2021-02-26

IPRDB可以提供针对AES对称加密算法的指令优化处理器专利检索,专利查询,专利分析的服务。并且本实用新型公开了针对AES对称加密算法的指令优化处理器,它主要由数据存储器、代码存储器、寄存器堆和流水线四部分组成;其中:所述流水线包括取址单元、译码单元、执行单元和流水线控制器。利用本实用新型的指令优化方法,在执行效率方面,通过周期级仿真统计出AES_ASIP运行AES加密算法所需要的时钟周期数,相对ARM处理器减少了57.3x%,极大地提高了算法的执行效率;在代码空间方面在ARM处理器上指令代码占用783bytes内存空间,而在AES_ASIP上指令代码仅占用416bytes,节省了46.6x%的代码内存空间。,下面是针对AES对称加密算法的指令优化处理器专利的具体信息内容。

1.一种针对AES对称加密算法的指令优化处理器,其特征是,它主要由数据存储器、代码存储器、寄存器堆和流水线四部分组成;

其中:所述流水线包括取址单元、译码单元、执行单元和流水线控制器,所述取址单元的输出端与流水线寄存器Ⅰ的输入端连接,流水线寄存器Ⅰ的输出端与译码单元的输入端连接,译码单元的输出端与流水线寄存器Ⅱ的输入端连接,流水线寄存器Ⅱ的输出端与执行单元的输入端连接;所述数据存储器和执行单元双向连接;代码存储器的输出端与取址单元的输入端连接;流水线控制器的输出端分别与寄存器堆,流水线寄存器Ⅰ和流水线寄存器Ⅱ的输入端连接;译码单元的输出端与流水线控制器的输入端连接。

2.如权利要求1所述的针对AES对称加密算法的指令优化处理器,其特征是,所述寄存器堆由32个通用寄存器、1个取址寄存器、1个堆栈指针寄存器和1个链接寄存器组成。

说明书全文

针对AES对称加密算法的指令优化处理器

技术领域

[0001] 本实用新型涉及AES对称加密算法的加解密领域,尤其涉及AES对称加密算法的指令优化处理器。

背景技术

[0002] AES算法汇聚了对数据加密的强安全性、高性能、高效率、易用和灵活等优点。然而由于加密与解密过程占用较多的处理器资源,处理器的性能成为加密算法高效运行的主要限制因素。虽然微处理器性能在不断提升,但在许多领域中加密算法的执行效率并不能符合所有的运算设计需求,尤其是在计算资源有限的嵌入式环境下。由于嵌入式微处理器性能较低、运算速度较慢,加密算法在该类微处理器中运行的效率较低。如何提高加密算法在嵌入式环境下的执行效率,保证数据高效安全传输成为国内外研究的热点问题。 [0003] 目前学术界存在三种提高密码算法执行效率的方式:第一种是用纯软件方式优化密码算法的程序流程,使算法流程更加合理,运行更加高效。Bertoni等人提出AES算法的优化版本来加速该算法[1]在内存受限的32位处理器上的执行效率。随着嵌入式环境下微处理器性能的不断提高,这种优化方式也相应地提高了密码算法的执行效率,这种优化方式虽然灵活,但其优化空间非常狭隘,在同一类型的微处理器下优化幅度最多达到21%左右。此外纯软件优化方式的实现需使用查找表,在数据的查找过程中,查找表容易受到基于cache的侧信道攻击,这种攻击方式致使加密算法运行过程中易将对称密钥泄露给攻击者;第二种是用纯硬件方式实现密码算法,将底层程序语言中一条或若干条连续指令用专门的硬件电路实现。基于该优化方法,Kuo等人[2]提出基于专用集成电路ASIC(Application Special Integrated Circuit)的方式来实现AES算法,该方法仅用10个周期即可完成AES-128算法,文章同时讨论了执行算法的芯片架构和优化设计。这种优化方式可以快速实现密码算法,但其可扩展性较弱,占用的硬件资源较多,致使微处理器电路硬件成本大幅上升,且很难与其它运算模块相融合;第三种是采用指令集架构(ISA)扩展的方式对密码算法进行优化。其面向特定的应用对处理器指令进行扩展,采用硬件实现影响密码算法性能的基本操作部件,并在指令集中添加相应的指令,最终生成专用指令处理器(ASIP)。基于该优化方法,Wu等人[3]介绍了一种快速灵活的加密处理器-协处理器,作者首先验证了协处理器作用于3DES算法上的优质效果,在保持灵活性的同时,也可以支持多种加密算法。Sun等人[4]为高效实现基于细粒度随机掩码操作分解的AES算法定义了三种扩展指令,并结合指令随机调度方法给出了AES算法完整的实现流程。该优化方式融 合了纯软件、硬件方式优化的优点,既保留软件实现的灵活性,又进一步地提升系统性能,以增加较少的硬件资源为代价换取算法执行效率的大幅提升和指令代码占用空间的大幅降低。并且其扩展性较强,可以与其他运算模块相融合。Wu等人的方法需要在原有的嵌入式微处理器外附带专门的嵌入式微处理器(协处理器),而不是在原有的微处理器中完成算法的指令优化操作。此方法另外占用一部分处理器资源,成本较高且不适用。Sun等人的方法并未最大限度的优化算法扩展指令操作,且其提出的优化方法的优化效果并不十分明显。本课题组于2011.1.24申请的申请号为201110024766X的专利专门针对AES加密算法中Sbox生成算法采用指令集架构(ISA)扩展的方式做了指令优化,并且提出2条扩展优化指令,使Sbox生成算法效率得到较大的提升;本课题组于同日申请的申请号为201110024639X的另一专利针对AES算法中列混淆模块也采用指令集架构(ISA)扩展的方式做了指令优化,使该模块的执行效率得到较大提升。但是以上两实用新型进行的工作仅仅针对AES算法的某一个运算模块进行指令优化扩展操作,而没有考虑对整个AES算法进行指令集扩展,同时将其单独应用于整个AES算法中时,对AES算法执行效率的改善效果并不是十分明显。
实用新型内容
[0004] 为弥补现有技术的不足,本实用新型提供一种AES专用指令集处理器,本实用新型采用指令集架构扩展优化的方法对AES算法进行指令扩展优化,基于电子系统级ESL方法设计流程,实用新型中设计实现了5条专门用于加速AES的扩展指令,并使用基于LISA语言的处理器生成工具构建完成一个高效AES专用指令处理器模型(AES_ASIP),用以满足该算法在运算速度和内存空间有限的嵌入式环境下的需求,并且最终将处理器模型实现于FPGA中,完成实体验证。
[0005] 为实现上述目的,本实用新型采用如下技术方案:
[0006] 一种针对AES对称加密算法的指令优化方法,在满足新指令操作码长度和原有处理器模型中指令操作码长度相同,新指令的操作码和操作数总和不能超出原指令集的指令位数,新指令的执行部件不能过于复杂,新指令执行过程不能降低系统的运行速度,新扩展的指令条数不能过多,降低由此带来的硬件资源开销的前提下,针对AES对称加密算法进行指令集架构扩展优化,优化方法如下:
[0007] 1)在S盒字节置换过程中,仿射变换过程需要对位进行操作,每次仿射变换都需要把八位二进制数的每一位取出,对取位操作采用指令getbit,该指令的功能是从src寄存器中取出第bitpos位,然后存入dest寄存器的最后一位,以上过程将在一个时钟周期内完成,从而对取位运算进行了加速;
[0008] 2)仿射变换过程在取出八位二进制数的所有位后,需要对每一位进行五元异或操作,对五元异或操作采用指令xor_5,该指令的功能是将src1到src5所代表的寄存器中的内容进行异或操作,结果保存在dest所代表的寄存器中,以上过程将在一个时钟周期内完成,从而对异或运算进行了加速; [0009] 3)列混淆中使用伽罗瓦域GF内的乘法运算,针对乘法操作采用指令ifand,该指令的功能是src1和src2相与,如果结果不为0,则xor_src1和xor_src2执行异或,并将结果保存在xor_src1中;如果结果为0,则不执行异或操作,以上过程将在一个时钟周期内完成,从而对域内乘法运算进行了加速;
[0010] 4)在列混淆中进行矩阵相乘操作时需要多次定位矩阵中数据的位置,对矩阵内数据查找采用指令matrixpos,该指令的功能是查找矩阵中指定位置的数据,以上过程将在一个时钟周期内完成,从而对查找指定位置数据运算进行了加速;
[0011] 5)另外,在列混淆中还用到数据交换操作,实现数据交换采用指令swap,该指令的功能是将源操作数src1和src2交换,即将源操作数src1的数值赋给src2同时将src2的数值赋给src1,以上过程将在一个时钟周期内完成,从而对数据交换运算进行了加速;
[0012] 通过上述五条扩展指令的运行,提高AES算法执行效率并且同时降低算法指令代码存储空间。
[0013] 针对AES对称加密算法的指令优化处理器,它主要由数据存储器、代码存储器、寄存器堆和流水线四部分组成;
[0014] 其中:所述流水线包括取址单元、译码单元、执行单元和流水线控制器,所述取址单元的输出端与流水线寄存器I的输入端连接,流水线寄存器I的输出端与译码单元的输入端连接,译码单元的输出端与流水线寄存器II的输入端连接,流水线寄存器II的输出端与执行单元的输入端连接;所述数据存储器和执行单元双向连接;代码存储器的输出端与取址单元的输入端连接;流水线控制器的输出端分别与寄存器堆,流水线寄存器I和流水线寄存器II的输入端连接;译码单元的输出端与流水线控制器的输入端连接。 [0015] 所述寄存器堆由32个通用寄存器、1个取址寄存器、1个堆栈指针寄存器和1个链接寄存器组成。
[0016] 所述扩展指令getbit执行部件包括1个移位器,1个与门以及1个多路选择器,而部件的执行末端是通用寄存器堆,移位器输入端接收通用寄存器r0和4位的i;i的最大值为31,指示寄存器移动的位数;移位器移位后的结果与0x00000001通过与门相与,而与门的输出为一个32位的数值,而该数值的最后一位保存着r0的第i位,而其它各位为0;控制信号getbit_exe控制多路选择器,同时多路选择器接受5位的0和通用寄存器r1的地址,来控制地址选择;当控制信号为1时,多路选择器将r1的地址传送给寄存器堆,从而将与门的输出赋给r1;如果控制信号为0时,多路选择器将5位0传递给寄存器堆,即传递空地址,而处理器判断是空地址后将不进行赋值操作;getbit_exe是一个控制信号,由译码阶段发出控制命令,决定是否执行getbit操作。
[0017] 所述扩展指令xor5执行部件包括1个异或电路组和1个多路选择器,而部件的执行末端是通用寄存器堆;异或电路组由一系列异或逻辑门组成,它输入端接收通用寄存器r2,r3,r4,r5,r6的数据,输出结果为5元异或后的值;控制信号xor5_exe控制多路选择器,同时多路选择器接受5位的0和通用寄存器r1的地址,来控制地址选择;当控制信号为1时,多路选择器将r1的地址传送给寄存器堆,从而将异或电路组的输出结果赋给r1;如果控制信号为0时,多路选择器将5位0传递给寄存器堆,即传递空地址,而处理器判断是空地址后将不进行赋 值操作;xor5_exe是一个控制信号,由译码阶段发出控制命令,决定是否执行xor5操作。
[0018] 所述扩展指令ifand执行部件包括2个与门、1个或门、1个异或逻辑门和1个多路选择器,部件的执行末端是整个处理器共用的通用寄存器堆;与门I接受r0与r1的输入,其电路输出是r0和r1相与后的一个32位数值;或门完成的功能是对与门的输出,即32位数值进行逐位相与,而产生的输出是一个1位的数值;该输出将与控制信号ifand_exe一起作为与门I的输入,与门II的输出将作为多路选择器的输入,来控制地址选择;如果与门II的输出是1,则多路选择器将通用寄存器r2的地址传递给寄存器堆,从而将r2和r3通过异或逻辑门的输出结果赋给r2;如果与门II的输出是0,则多路选择器将5位0传递给寄存器堆,即传递空地址,而处理器判断是空地址后将不进行赋值操作;ifand_exe是一个控制信号,由译码阶段发出控制命令,决定是否执行ifand操作。
[0019] 所述扩展指令matrixpos执行部件包括1个乘法执行部件、1个加法执行部件和1个多路选择器,部件的执行末端是整个处理器共用的数据存储器;乘法执行单元接受i与n的输入,计算出i*n的数值,并一起和输入信号j和r1传输到加法执行部件;加法执行部件的功能是完成对输入的r1,j和乘法执行单元输出的i*n三个数的相加,从而计算出矩阵元素的地址位置;加法执行部件的输出将作为多路选择器的输入,来控制地址选择;如果多路选择器的控制输出是1,则多路选择器将通用矩阵内元素的地址传递给数据存储器,从而将矩阵位置为r1+i*n+j的输出结果赋给r1;如果多路选择器的控制输出是0,则多路选择器将16位0传递给数据存储器,即传递空地址,而处理器判断是空地址后将不进行赋值操作;
[0020] A_matrixpos_EX_in是一个控制信号,由译码阶段发出控制命令,决定是否执行matixpos操作。
[0021] 所述扩展指令swap执行部件包括2个多路选择器和1个寄存器堆,部件的执行末端是整个处理器共用的通用寄存器堆。多路选择器I接受选择输入信号r1_addr,多路选择器II接受选择输入信号r2_add r,多路选择器的输入来控制交换数据的地址选择;如果多路选择器I的输出控制信号是1,则多路选择器I将通用寄存器r1的地址传递给寄存器堆,从而将寄存器 r1的数值结果赋给r2;如果多路选择器I的输出控制信号是0,则多路选择器I将5位0传递给寄存器堆,即传递空地址,而处理器判断是空地址后将不进行赋值操作;如果多路选择器II的输出控制信号是1,则多路选择器II将通用寄存器r2的地址传递给寄存器堆,从而将寄存器r2的数值结果赋给r1;如果多路选择器II的输出控制信号是0,则多路选择器II将5位0传递给寄存器堆,即传递空地址,而处理器判断是空地址后将不进行赋值操作;A_swap_EX_in是一个控制信号,由译码阶段发出控制命令,决定是否执行swap操作。
[0022] 有益效果:(1)执行效率方面:通过周期级仿真统计出AES_ASIP运行AES加密算法所需要的时钟周期数,相对ARM处理器减少了57.3x%,极大地提高了算法的执行效率;(2)代码空间方面:在ARM处理器上指令代码占用783bytes内存空间,而在AES_ASIP上指令代码仅占用416bytes,节省了46.6x%的代码内存空间,通过指令集架构扩展的优化方式进行算法指令优化,可以有效地减少存储算法代码的内存空间。由统计实验结果可以得出,对比ARM处理器,AES_ASIP提高了58.4%的执行效率并节省了47.4%的内存空间。AES算法在指令扩展前使用处理器资源数为86816cells,指令扩展后AES_ASIP使用处理器资源数为93038cells,占用的硬件资源增加了7.2%。

附图说明

[0023] 图1(a)为AES算法加密流程图;
[0024] 图1(b)为AES算法解密流程图;
[0025] 图2为专用指令处理器设计流程;
[0026] 图3为AES专用指令处理器模型架构;
[0027] 图4为getbit指令执行部件硬件模型;
[0028] 图5为xor_5指令执行部件硬件模型;
[0029] 图6为ifand指令执行部件硬件模型;
[0030] 图7为matrixpos指令执行部件硬件模型;
[0031] 图8为swap指令执行部件硬件模型;
[0032] 其中:1.数据存储器;2.寄存器堆;3.代码存储器;4.流水线;5.取址流水线;6.译码流 水线;7.执行流水线;8.跳转指令译码部件;9.AES扩展指令译码部件;10.通用指令译码部件;11.读写指令执行部件;12.AES扩展命令执行部件;13.逻辑算术指令执行部件;14.流水线控制器;15.流水线寄存器I,16.流水线寄存器II;17.通用寄存器堆;
18.移位器;19.与门I;20.多路选择器I;21.异或电路组;22.多路选择器II;23.与门II;24.或门I;25.与门III;26.多路选择器II;27.异或逻辑门;28.乘法器;29.加法器;
30.多路选择器III;31.数据存储器;32.多路选择器III;33.多路选择器IV。 具体实施方式
[0033] 下面结合附图和实施例对本实用新型作进一步说明:
[0034] 一种AES对称加密算法扩展指令集优化方法,在满足不改变原有处理器指令操作码长度、指令位数以及不影响处理器运行速度的前提下,优化操作为: [0035] 1)S盒字节置换过程中的取位操作,每次仿射变换都需要把八位二进制数的每一位取出。但在ARM处理器以及其它常用的嵌入式处理器中,没有直接的取位操作,传统方法完成取位操作需要三条汇编指令,需执行三个时钟周期,因此执行过程十分费时。为了加速该过程,设计并采用了指令getbit。该指令完成的功能是从通用寄存器src中取出第bitpos位,然后存入通用寄存器dest的最后一位,从而完成取位操作。新指令将在一个时钟周期内完成,因此比传统处理器的处理速度提高了三倍,从而对S盒字节置换过程中的取位操作进行加速。
[0036] 2)仿射变换过程中取出二进制数的所有位后,需要进行五元异或操作,并用操作后的结果对原数进行替换。在传统的ARM处理器中,完成该功能需要四条汇编语言,因此需要四个时钟周期。为了加速五元异或操作,设计并采用了新指令xor5。该指令的功能是将src1到src5所表示的通用寄存器中的内容进行异或操作,结果保存在dest所表示的通用寄存器中。以上过程将在一个时钟周期内完成,因此比传统处理器的处理速度提高了四倍,从而对仿射变换过程中的五元异或操作进行加速。
[0037] 3)列混淆中使用伽罗瓦域GF(28)内的乘法运算。数据分组与S盒256个元素中某个元素相乘,并进行累加求和操作,该过程也需循环8次,运算过程非常耗时。我们发现在每一次域内乘法循环过程中都需要进行一次判断后异或的过程。在传统的ARM处理器中,完成该功能需要四条汇编语句,因此需要四个时钟周期。为了加速该过程,我们设计并采用了指令ifand。该指令的功能是将操作数src1和src2相与,如果结果不为0,则xor_src1和xor_src2就执行异或,并将结果保存在xor_src1表示的通用寄 存器内;如果结果为0,则不执行异或操作。以上过程将在一个时钟周期内完成,因此比传统处理器的处理速度提高了四倍,从而对域内乘法运算进行了加速。 [0038] 4)列混淆进行矩阵相乘操作,需要多次定位矩阵中数据的位置,在实际内存中,矩阵中的数据是线性存储的。传统方法需要5条汇编指令来实现,因此需要5个时钟周期。为了加速该过程,我们设计并采用了新指令matrixpos替代原来的五条汇编指令。新指令的功能是查找矩阵中指定位置的数据。以上过程将在一个时钟周期内完成,因此比传统处理器的处理速度提高了5倍,从而对定位矩阵中数据的位置操作进行了加速。
[0039] 5)列混淆大量用到数据交换操作,需要交换寄存器中2个数据。传统方法完成该操作需要3条汇编指令,因此需要3个时钟周期。为了加速该过程,我们设计并采用了新指令swap替代原来的三条汇编指令。新指令的功能是将源操作数src1和src2交换,即将源操作数src1的数值赋给src2同时将src2的数值赋给src1。以上过程将在一个时钟周期内完成,因此比传统处理器的处理速度提高了3倍,从而对数据交换操作进行了加速。
[0040] 通过上述五条扩展指令的运行,加速嵌入式微处理器中AES对称加密算法。 [0041] 一种根据扩展指令集设计的AES算法专用指令集处理器模型(AES_ASIP),它在硬件逻辑上实现了上述扩展指令,因此能够用于加速AES加密算法。模型硬件结构主要由数据存储器(Data_RAM)、代码存储器(Prog_RAM)、寄存器堆(Registers)和流水线(Pipe)四部分组成。程序存储器地址空间定义在0x0000-0x7FFF范围内,大小32K。代码存储器地址空间定义在0x8000-0xFFFF范围内,大小32K。寄存器堆由32个通用寄存器(GPR[0...31])、1个取址寄存器(FPR)、1个堆栈指针寄存器(SPR)和1个链接寄存器(LR)组成。流水线部分采用三级流水线:取址(FE)、译码(DC)和执行(EX)。流水线控制器(Pipe_Ctl)主要负责对跳转指令进行控制,跳转指令只需要将跳转地址存储在取址寄存器(FPR)中,不需要经过执行部件,紧接着对流水线的缓存部分进行刷新,防止执行部件执行跳转指令。在AES_ASIP处理器的译码、执行部件,添加了针对AES算法的专用指令译码器(Decode_AES_EX)和执行器(AES_EX),对扩展的指令进行专门的译码和执行。 [0042] 本实用新型的原理及具体实现方法如下:
[0043] 高级加密标准AES(Advanced Encryption Standard)算法属于分组密码算法,它的输入分组、输出分组以及加/解密过程中的中间分组都是128比特,使用10、12或14个轮(Nr表示轮数),与轮数相对应输入密钥的长度K为128,192或256比特。用Nk=4,6,8代表密钥串 的字数(1字=32比特),每一轮都需要一个和输入分组具有同样长度(128比特)的扩展密钥Key的参与。由于外部输入的密钥k长度有限,所以在AES算法操作过程中需使用密钥扩展(Key Expansion)例程把外部密钥k扩展成更长的比特串,以生成各轮的加轮密钥。第一个轮密钥用作预备轮转换,剩下的轮密钥用作每一轮结尾的最后一个转换。AES算法在操作过程中运用四个转换:S盒字节置换、行变换、列混淆和密钥加。除最后一轮外,每一轮都使用四个可逆的转换,最后一轮仅用三个转换(无列混合转换)。在解密方,使用的是可逆转换:S盒置换反演、行变换反演、列混淆反演和加轮密钥(这个转换是自身可逆的),如图1(a)表示AES加密流程,图1(b)表示AES解密流程。
[0044] (1)加密变换
[0045] 设X是128比特明文输入,Y是128比特的密文输出,则AES密文Y可以用下面的复合变换得出:
[0046] Y=(ANr·R·S)·(ANr-1·C·R·S)·(ANr-2·C·R·S)…(A1·C·R·S)·A0(X) [0047] 其中·表示复合运算。这里ANi(X)表示对X的一个变换ANi(X)=Xxor KNi(KNi为第i轮的子密钥,为比特串的异或运算)。S:S-box字节置换,即对每一个字节用S-box做一个置换。为了提升算法执行效率,S-box是一个指定的转换表。R:行变换。C:列混淆,列混淆中涉及到多项式乘法运算。
[0048] (2)解密变换
[0049] 解密变换是加密变换的逆变换,这里不再详述。
[0050] 关于AES加密算法运算模块的分析介绍如下:
[0051] (1)S盒字节置换S-boxSubBytes()
[0052] 对输入矩阵的任一个元素A做如下变换S[A]:(a)任意一个元素A从存储角度看都是一个八位的二进制数。算出前四位所代表的十六进制数x和后四位所代表的十六进制数y。如A=11000100时,x=C,y=4;(b)从AES算法给定的S-box(16行16列的矩阵,其中每个元素为一个字节中找出S[A]=S[x,y]的值。如A:11000100时,S[A]=S[x,y]=S[c,4]=|29|=00101001或直接通过下面的公式将A=b7b6b5b4b3b2b1b0变为S[A]=b′7b′6b′5b′4b′3b′2b′1b′0。
[0053]
[0054] (2)行变换ShiftRows()
[0055] 在加密过程中,转换称为行移位并且向左移位,移位数取决于状态矩阵的行数(0、1、2或3)。这就表明行0完全没有移位,最后一行移了三个字节。注意,行移位转换每次只操作 一行。
[0056] (3)列混淆MixColumns()
[0057] AES加密算法中列混淆是通过矩阵相乘实现的(矩阵A为列混淆变换矩阵),具体过程如下:
[0058]
[0059] 加密过程中列混淆变换矩阵与解密过程列混淆变换矩阵分别是: [0060]
[0061] 列混淆转换操作即把状态矩阵state的每一列转换成一个新的列。每列当中的字8
节和常数变换矩阵都要化为带有GF(2)中系数的8比特的字(或多项式)。矩阵内字节的
8
乘法是通过伽罗瓦域GF(2)内的乘法即多项式相乘实现的,同时为了保证相乘后的元素仍
8 8 4 3
然在域内,在GF(2)中需要用模m(x)=(10001101)或(x+x+x+x+1)除来实现,矩阵内的加法是通过异或操作实现的。即对域内的任意一个八位的二进制数A=b7b6b5b4b3b2b1b0,转
7 6 5 4 3 2
换成一个多项式A=f(x)=b7x+b6x+b5x+b4x+b3x+b2x+b1x+b0与x相乘: [0062]
[0063] 对应域内乘法为:
[0064] A=00000010 B=b7b6b5b4b3b2b1b0
[0065]
[0066] 乘以高于一次的多项式可以循环使用上式实现,因此GF(28)乘法即为多个中间结果相加。
[0067] (4)密钥加AddRoundKey()
[0068] 密钥加操作也是每次处理一列,这和列混淆相似。列混淆是使一个常数方阵和每一个状态列相乘,密钥加是把一个轮密钥字与每一个状态列矩阵相加。密钥加转换实质是对状态矩阵的每一个列与相应密钥字的异或。Sc和wNi(round)+4c是4×1列矩阵,依据以下公式进行密钥加运算 0≤c≤3。
[0069] (5)密钥扩展Key Expansion
[0070] 为了创建每一轮的轮密钥,AES算法利用外部输入密钥K(密钥串的字数是Nk),运用一个密钥扩展例程生成密钥。如果轮数是Nr,密钥扩展例程就从一个128比特的密码密钥创建成Nr+1个128比特的轮密钥。第一个轮密钥用作预备轮转换,剩下的轮密钥用作每一轮结尾的最后一个转换。轮密钥扩展例程逐字地创建密钥,这里一个字就是一个四字节的排列,例程创建4×(Nr+1)个字。涉及如下三个模块:(a)字旋转RotWord()。把一个四个字节的序列[a0,a1,a2,a3]左移一个字节变为[a1,a2,a3,a0];(b)字代换SubWord()。对一个四字节的输入字[a0,a1,a2,a3]的每一个字节进行s盒变换,然后作为输出;(3)轮i-1 i-1
常数Rcon[]。Rcon[i]表示32比特16进制字符串[x ,00,00,00]。这里x=(02),x 是x=(02)的(i-1)次幂的十六进制表示。Rcon[1]=[01000000],Rcon[2]=[02000000],Rcon[3]=[04000000],Rcon[4]=[08000000],...,Rcon[10]=[36000000]。 [0071] 扩展密钥的前Nk个字就是外部密钥K;以后的字wi等于它前一个字wi-1与前Nk个字wi-Nk的异或运算,即wi=wi-1 xor wi-Nk;但是若i为Nk的倍数,则wi=wi-Nk xor SubWord(RotWord(wi-1))xor Rcon[i/Nk]。
[0072] AES加/解密算法高层程序代码通过汇编编译器编译之后,分析汇编语言并设计5条新指令:
[0073] (1)S盒字节置换过程中的取位操作,每次仿射变换都需要把八位二进制数的每一位取出。但在ARM处理器以及常用的嵌入式处理器中,没有直接的取位操作指令。分析仿射变换的取位操作为:
[0074] y=(x>>i)and 0x1
[0075] 取x的第i位首先将x右移i个位置,然后和0x1进行与操作,结果赋给y,对应的ARM汇编具体含义为:
[0076] move r1,r0
[0077] leftshift r1,r1,(31-i)
[0078] rightshift r1,r1,31
[0079] 使用新指令getbit替换,getbit r1=r0,i
[0080] 针对取位操作设计新取位指令getbit替代上面的三条指令。新指令的功能是从src寄存器中取出第bitpos位,然后存入dest寄存器的最后一位。
[0081] (2)S盒字节置换过程在取出八位二进制数的所有位后,需要对每一位用异或后的操作数替换,每个逆元为8位,因此需要进行8次五元异或操作,分析仿射变换的异或操作为:
[0082] y[i]=x[i]xor x[(i+4)mod8]xor x[(i+5)mod8]xor x[(i+6)mod8]xor x[(i+7)mod8]
[0083] 对x的第i位和(i+4)mod8到(i+7)mod8位进行异或操作,编译成ARM汇编指令,具体含义为:
[0084] r1=r2 xor r3
[0085] r1=r1 xor r4
[0086] r1=r1 xor r5
[0087] r1=r1 xor r6
[0088] 使用新指令xor_5替换,xor_5 r1=r2,r3,r4,r5,r6
[0089] 针对五元异或操作设计新指令xor_5替代上面四条指令。新指令的功能是将src1到src5所代表的寄存器中的内容进行异或操作,结果保存在dest所代表的寄存器中。受到ARM处理器32位指令长度限制,src1到src5均仅占用四位,若定义占用五位长度,则超出32位指令长度限制。 [0090] (3)列混淆中使用伽罗瓦域GF(28)内的乘法运算。数据分组与S盒256个元素中某个元素相乘,并进行累加求和操作,该过程也需循环8次,运算过程非常耗时。分析域内乘法,可以对下面指令进行扩展优化:
[0091] if a and b is 0 then
[0092] c=c xor d
[0093] 这类语句通过ARM编译器编译成四条汇编指令,具体含义为:
[0094] and r1,r1,r0
[0095] cmp r1,0
[0096] equal jumpxor xor r2,r2,r3
[0097] 使用新指令ifand替换,ifand r1,r0,r2,r3
[0098] 针对乘法操作设计新指令ifand替代上面四条指令。新指令的功能是src1和src2相与,如果结果不为0,则xor_src1和xor_src2执行异或,并将结果保存在xor_src1中;如果结果为0,则不执行异或操作。 [0099] (4)列混淆进行矩阵相乘操作,需要多次定位矩阵中数据的位置,在实际内存中,矩阵中的数据是线性存储的,查找矩阵S-box第i行第j列位置数据的操作在C语中表示如下:
[0100] x=sbox[i][j]
[0101] 编译成ARM汇编指令,具体含义为:
[0102] move r1,sbox
[0103] move r2,i
[0104] mul r2=r2,n
[0105] add r2=r2,j
[0106] add r2=r2,r1
[0107] load r1=r2
[0108] 使用新指令matrixpos替换
[0109] move r1,sbox
[0110] matrixpos r1=r1,i,j,n
[0111] 上面ARM汇编语言的含义为根据i和j计算出实际内存中数据的偏移位置,在基地址sbox的基础上根据偏移位置查找数据,最后将查找的数据赋值给r1。针对矩阵内数据查找设计新指令matrixpos替代上面五条指令。新指令的功能是查找矩阵中指定位置的数据。
[0112] (5)列混淆大量用到数据交换操作,交换操作表示如下:
[0113] c=a;b=a;a=b;
[0114] 编译成ARM汇编指令,具体含义为:
[0115] mov r2,r0
[0116] mov r0,r1
[0117] mov r1,r2
[0118] 使用新指令swap替换,swap r1,r2
[0119] 设计新的汇编指令swap替代上面三条指令。新指令的功能是将源操作数src1和src2交换,即将源操作数src1的数值赋给src2同时将src2的数值赋给src1。
[0120] 基于扩展后的指令集,使用基于LISA语言的处理器生成工具构建AES算法的专用指令处理器模型(AES_ASIP),同时为扩展的新指令设计相应的执行部件硬件模型。将完成的专用指令处理器模型实现于FPGA中,完成该实用新型的实体验证。
[0121] 在设计新指令的过程中必须保证扩展后的指令要兼容原有模型(如ARM处理器指令集)的指令格式,这样才能保证译码部件的正常执行。例如:32位处理器模型中,指令操作码和操作数位数之和最多为32位,设计新指令时要考虑其操作码和操作数位数之和不能超过32。同时,新指令的执行部件不能过于复杂,如果新指令的执行部件过于复杂,执行过程中会产生较大时延,降低系统的运行速度。综上各方面因素考虑,得出新指令设计限制条件如下:
[0122] (a)新指令操作码长度和原有处理器模型中指令操作码长度相同; [0123] (b)新指令的操作码和操作数总和不能超出原指令集的指令位数; [0124] (c)新指令的执行部件不能过于复杂,新指令执行过程不能降低系统的运行速度;
[0125] (d)新扩展的指令条数不能过多,降低由此带来的硬件资源开销。 [0126] 在满足上述条件基础上,针对特定算法进行指令集架构扩展优化,能够极大地减少取址、译码的时间,使得原先N条指令的取址、译码过程现在仅需一条指令即可完成,即取址、译码过程可缩小(N-1)×2个时钟周期。从执行单元考虑,指令扩展前需要多个执行单元在多个时钟周期内协同完成的功能,在指令扩展后仅需一个新的执行单元在一个时钟周期内就可以完成。同时,在一定程度上能够避免因指令相关而产生的气泡效应。 [0127] 图2描述了基于电子系统级方法学的专用指令处理器设计流程。首先利用IAR交叉编译器环境下的C-SPY调试器查看已优化的目标算法高层程序代码经编译后的汇编语言,使用算法模块复杂度分析工具分析汇编指令中使用频率较高且影响算法运算时间较大的多条连续汇编指令。在满足前文四个约束条件的基础上,设计一条新的汇编指令来实现该多条连续汇编指令。基于扩展后的指令集,使用基于LISA语言的处理器生成工具构建目标算法的专用指令处理器模型,同时为扩展的新指令设计相应的执行部件硬件模型。经过一系列的仿真和验证过程,最终在FPGA中实现该专用指令处理器模型,完成对该优化方法的实体验证。
[0128] 图3所示的是针对AES算法设计的AES_ASIP处理器模型框图。模型硬件结构主要由数据存储器1(Data_RAM)、代码存储器3(Prog_RAM)、寄存器堆2(Registers)和流水线4(Pipe)四部分组成。数据存储器1地址空间定义在0x0000-0x7FFF范围内,大小32K。代码存储器3地址空间定义在0x8000-0xFFFF范围内,大小32K。寄存器堆2由32个通用寄存器(GPR[0...31])、1个取址寄存器(FPR)、1个堆栈指针寄存器(SPR)和1个链接寄存器(LR)组成。流水线部分采用三级流水线:取址(FE)、译码(DC)和执行(EX)。流水线控制器
14(Pipe_Ctl)主要负责对跳转指令进行控制,跳转指令只需要将跳转地址存储在取址寄存器(FPR)中,不需要经过执行部件,紧接着对流水线的缓存部分进行刷新,防止执行部件执行跳转指令。在AES_ASIP处理器的译码、执行部件,添加了针对AES算法的专用指令译码器(Decode_AES_EX)和执行器(AES_EX),对扩展的指令进行专门的译码和执行。 [0129] 模型指令集架构由27条指令构成如下表1所示:
[0130] 表1AES专用指令处理器指令集架构
[0131]ALU通用指令 mov,add,sub,0r,and,xor,shl,shr,nop
跳转指令 jp,jeq,jne,jl,jle,ja,jae
存取指令 stb,sth,stw,ldb,ldh,ldw
AES算法专用指令 getbit,xor_5,ifand,matrixpos,swap
[0132] [0132] 下表2表示新指令格式。
[0133] 表2针对AES扩展的新指令格式
[0134]
[0135] 图4-8分别表示与5条新指令相对应的执行部件硬件模型。
[0136] 图4表示getbit指令执行部件,图中r0,i,r1_addr是输入信号,通过移位部件rsh,将r0寄存器中的数据右移i位,然后通过与门将移位的结果与0x0001相与,只取移位后的最低有效位。输出结果根据多路选择器mux控制输出,A_getbit_EX_in是控制信号,由译码阶段控制输出,决定输入地址r1_addr是否有效。如果A_getbit_EX_in为1,则多路选择器mux选择将与结果保存到r1寄存器中;如果为0则多路选择器mux选择一个无效的地址,不进行任何寄存器存储操作。
[0137] 具体描述为:扩展指令getbit执行部件包括1个移位器18,1个与门I 19以及1个多路选择器I 20,而部件的执行末端是通用寄存器堆17。移位器18输入端接收通用寄存器r0和4位的i;i的最大值为31,指示寄存器移动的位数;移位器23移位后的结果与0x00000001通过与门I19相与,而与门I19的输出为一个32位的数值,而该数值的最后一位保存着r0的第i位,而其它各位为0;控制信号getbit_exe控制多路选择器20,同时多路选择器20接受5位的0和通用寄存器r1的地址,来控制地址选择;当控制信号为1时,多路选择器I 20将r1的地址传送给寄存器堆17,从而将与门I19的输出赋给r1;如果控制信号为0时,多路选择器I 20将5位0传递给寄存器堆17,即传递空地址,而处理器判断是空地址后将不进行赋值操作。getbit_exe是一个控制信号,由译码阶段发出控制命令,决定是否执行getbit操作。
[0138] 图5表示xor_5指令执行部件。图中r2,r3,r4,r5,r6,r1_addr是输入信号,r2,r3,r4,r5,r6寄存器的数据通过五元异或部件执行异或操作。A_xor_5_EX_in是控制信号,由译码阶段控制输出,决定输入地址r1_addr是否有效。如果A_xor_5_EX_in为1,则多路选择器mux选择将结果保存到r1寄存器中;如果为0则多路选择器mux选择一个无效的地址,不进行任何寄存 器存储操作。
[0139] 具体描述为:扩展指令xor5执行部件包括1个异或电路组21和1个多路选择器II 22,而部件的执行末端是通用寄存器堆17。异或电路组21由一系列异或逻辑门组成,它输入端接收通用寄存器r2,r3,r4,r5,r6的数据,输出结果为5元异或后的值;控制信号xor5exe控制多路选择器II 22,同时多路选择器II 22接受5位的0和通用寄存器r1的地址,来控制地址选择;当控制信号为1时,多路选择器II 22将r1的地址传送给寄存器堆17,从而将异或电路组21的输出结果赋给r1;如果控制信号为0时,多路选择器II 22将5位0传递给寄存器堆17,即传递空地址,而处理器判断是空地址后将不进行赋值操作。xor5_exe是一个控制信号,由译码阶段发出控制命令,决定是否执行xor5操作。 [0140] 图6表示ifand指令执行部件。图中r0,r1,r2,r3,r2_addr是执行部件的输入信号,输出结果通过多路选择器mux选择输出,ifand_exe是控制信号,由译码阶段发出控制命令,决定是否执行ifand操作。从上图电路可以看出,r0与r1以及ifand_exe与操作的结果如果为1,则多路选择器mux选择将r2和r3异或结果输出到r2寄存器中;与操作的结果如果为0,则多路选择器mux选择输出一个无效地址,不进行任何存储操作。 [0141] 具体描述为:扩展指令ifand执行部件包括2个与门II 23和与门III 25、1个或门I 24、1个多路选择器II 26和1个异或逻辑门27,部件的执行末端是整个处理器共用的通用寄存器堆17。与门II 23接受r0与r1的输入,其电路输出是r0和r1相与后的一个32位数值;或门I 24完成的功能是对与门III 25的输出,即32位数值进行逐位相与,而产生的输出是一个1位的数值;该输出将与控制信号ifand_exe一起作为与门III 25的输入,与门III 25的输出将作为多路选择器II 26的输入,来控制地址选择;如果与门III
25的输出是1,则多路选择器II 26将通用寄存器r2的地址传递给寄存器堆17,从而将r2和r3通过异或逻辑门27的输出结果赋给r2;如果与门III 25的输出是0,则多路选择器II 26将5位0传递给寄存器堆17,即传递空地址,而处理器判断是空地址后将不进行赋值操作。ifand_exe是一个控制信号,由译码阶段发出控制命令,决定是否执行ifand操作。 [0142] 图7表示matrixpos指令执行部件。图中r1,i,n,j是输入信号,经过一个乘法器和一个加法器,计算出矩阵的位置为r1+i*n+j。A_getbit_EX_in是控制信号,由译码阶段控制输出,如果为1则多路选择器mux选择将计算的有效地址传送到数据内存Data_RAM的地址线,根据地址将内存数据存储到寄存器r1中;如果为0则传送一个无效地址,不进行任何读操作。
[0143] 具体描述为:扩展指令matrixpos执行部件包括1个乘法器28、1个加法器29和1个多 路选择器III 30,部件的执行末端是整个处理器共用的数据存储器31。乘法器28接受i与n的输入,计算出i*n的数值,并一起和输入信号j和r1传输到加法器29;加法执行部件的功能是完成对输入的r1,j和乘法执行单元输出的i*n三个数的相加,从而计算出矩阵元素的地址位置;加法器28的输出将作为多路选择器III 30的输入,来控制地址选择;如果多路选择器III 30的控制输出是1,则多路选择器III 30将通用矩阵内元素的地址传递给数据存储器31,从而将矩阵位置为r1+i*n+j的输出结果赋给r1;如果多路选择器III 30的控制输出是0,则多路选择器III 30将16位0传递给数据存储器31,即传递空地址,而处理器判断是空地址后将不进行赋值操作。A_matrixpos_EX_in是一个控制信号,由译码阶段发出控制命令,决定是否执行matixpos操作。
[0144] 图8表示swap指令执行部件。图中r1,r2,r1_addr,r2_addr是输入信号,A_swap_EX_in是控制信号,由译码阶段控制输出。如果为1则多路选择器mux选择将r1寄存器的值存储到r2寄存器,同时将r2寄存器的值存储到r1寄存器;如果为0则传送一个无效地址,不进行任何读操作。
[0145] 具体描述为:扩展指令swap执行部件包括2个多路选择器III 32和多路选择器IV33、1个通用寄存器堆17,部件的执行末端是整个处理器共用的通用寄存器堆17。多路选择器III 32接受选择输入信号r1_addr,多路选择器IV 33接受选择输入信号r2_addr,多路选择器III 32的输入来控制交换数据的地址选择;如果多路选择器III 32的输出控制信号是1,则多路选择器III 32将通用寄存器r1的地址传递给寄存器堆r2,从而将寄存器r1的数值结果赋给r2;如果多路选择器III 32的输出控制信号是0,则多路选择器III 32将5位0传递给通用寄存器堆17,即传递空地址,而处理器判断是空地址后将不进行赋值操作。如果多路选择器IV 33的输出控制信号是1,则多路选择器IV 33将通用寄存器r2的地址传递给寄存器堆r1,从而将寄存器r2的数值结果赋给r1;如果多路选择器IV 33的输出控制信号是0,则多路选择器IV 33将5位0传递给通用寄存器堆17,即传递空地址,而处理器判断是空地址后将不进行赋值操作。A_swap_EX_in是一个控制信号,由译码阶段发出控制命令,决定是否执行swap操作。
[0146] 在确定该些新扩展指令的功能和指令格式,并设计出AES指令集相对应的专用指令处理器(AES_ASIP)模型后,以Xilinx的以Virtex5 LX110T FPGA为平台,对设计的模型进行验证和性能分析。
[0147] 将AES-Sbox生成方法分别运行于申请号为201110024766X的专利和在嵌入式领域广泛使用的ARM处理器上。通过对比发现,经过指令扩展优化,AES-Sbox生成算法在专用指令 处理器中仅占用88bytes的代码存储空间,比在ARM处理器中减少了38.6%;执行运算周期由原来的287个时钟周期缩减到112个时钟周期,执行效率比ARM处理器的执行效率提升了60.9%。然而Sbox生成优化仅仅是整个AES算法中的一部分,单独优化这一个运算模块对整个算法的运算效率的提高效果并不是十分显著,代码空间减少9.3%,执行效率提升13.7%。
[0148] 其中涉及到的乘法逆元优化指令和取位优化指令稍作修改同时也可以应用于AES算法其他运算模块所涉及的运算中(如列混淆模块的乘法运算和取位运算)。结合乘法逆元指令和取位指令,及新增的三条优化指令,新优化指令集将有效地提高算法的执行效率并极大的节省算法的指令代码存储空间。
[0149] 表3ARM9与AES_ASIP实验结果对比表
[0150]
[0151] 由表3得出:(1)执行效率方面:以AES加密算法为例,通过周期级仿真统计出AES_ASIP运行AES加密算法所需要的时钟周期数,相对ARM处理器减少了57.3x%,极大地提高了算法的执行效率;(2)代码空间方面:以AES加密算法为例,在ARM处理器上指令代码占用783bytes内存空间,而在AES_ASIP上指令代码仅占用416bytes,节省了46.6x%的代码内存空间.通过指令集架构扩展的优化方式进行算法指令优化,可以有效地减少存储算法代码的内存空间。
[0152] 统计实验结果我们可以得出,对比ARM处理器,AES_ASIP提高了58.4%的执行效率并节省了47.4%的内存空间.AES算法在指令扩展前使用处理器资源数为86816cells,指令扩展后AES_ASIP使用处理器资源数为93038cells,占用的硬件资源增加了7.2%。 [0153] 参考文献
[0154] [1]Bertoni G.,et al.Efficient Software Implementation of AES on 32-bit Platforms[J].Lecture Notes In Computer Science,2003,25(23):159-171; [0155] [2]Kuo H and Verbauwhede I.Architectural Optimization for a 1.82Gb/s VLSI Implementation of the AES Rijndael Algoritm[J].Lecture Notes in Computer Science,2001,21(62):51-64;
[0156] [3]Wu L,Weaver C,Austin T.CryptoManiac:A Fast Flexible Architecture for Secure Communication[C]//Proc of Annual Int.Symposium on Computer Architecture(ISCA).IEEE,2001:110-119;
[0157] [4]Sun Yinghong,Tong Yuanman,Wang Zhiying.ASE implementation based on instruction extension and randomized scheduling[J].Computer Engineering and Applications,2009,45(16):106-110。
高效检索全球专利

IPRDB是专利检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,专利查询、专利分析

电话:13651749426

侵权分析

IPRDB的侵权分析产品是IPRDB结合多位一线专利维权律师和专利侵权分析师的智慧,开发出来的一款特色产品,也是市面上唯一一款帮助企业研发人员、科研工作者、专利律师、专利分析师快速定位侵权分析的产品,极大的减少了用户重复工作量,提升工作效率,降低无效或侵权分析的准入门槛。

立即试用