许彩芳
(宿州职业技术学院 计算机信息系,安徽 宿州 234101)
大数据技术是对海量信息进行获取、分析和管理的技术,其运算速度远超过传统数据处理技术[1-2].伴随大数据产生的还有信息安全,同传统意义上的数据相比,无论是在数据体量还是数据类型上都非常庞大,因而需要使用较高水平的加密技术保障数据的安全性[3].信息加密技术以特殊算法对原有数据进行改变,从而达到未授权用户不得对数据访问的效果.目前用得最多的加密技术主要是散列函数以及对称加密算法.但由于散列函数与对称加密算法具有的复杂性,使得该技术的实现难度较大[4].因此引入了SDSoC开发环境,该环境是为方便应用MPSoC和Zynq SoC而设计的一种嵌入式异构环境,使得散列函数与对称加密算法更易实现.本研究针对SDSoC开发环境下的算法设计问题,提出了基于SDSoC的对称散列高级加密标准(Advanced Encryption Standard,AES)算法.
Zynq SDSoC开发环境是近年来Xilinx发布的一种面向嵌入式处理器(Zynq)的开发环境.该种开发环境可以对Zynq进行直接的应用,并可在Zynq上直接采用C++编程,以替代以往的复杂高级编程语言,如RTL语言.Zynq SDSoC开发环境具有许多优点,如编程体验与ASSP相似,SDx能够使SoC与FPGA的应用更简易.
Hash函数作为现代密码学的核心函数,其基本原理在于实现任意长度的字符串容量转换,Hash值的结果被称为消息摘要[5].Hash函数能够转变固定长度字符串,压缩数据信息,目前已经被广泛地用于数据完整性检验、伪随机数产生等多个领域[6].Hash函数h:x→h(x),h的作用在于实现固定长度信息的映射.相较于Hash函数的定义域,其值域的规模较小,因为其映射规则为“一对多”.Hash函数的碰撞是指将定义域以内的不同元素映射到同一变量上,也即h(x1)=h(x2).安全的Hash函数应该满足5项要求,它们分别是压缩、抗弱碰撞攻击、计算容易、抗原像攻击以及抗强碰撞攻击.本次实验就是实现开源的C语言AES算法,并将该散列函数进行一定优化后,最后使AES算法在SDSoC平台上实现.
目前,已有的密码技术可以较为有效地保证对传递信息的加密[7-8].对称加密算法主要包含DES算法以及AES算法;非对称加密算法的种类比较多,主要包括椭圆曲线加密算法等[9-10].加密算法要求信息接收方和信息发送方之间对密钥进行协商,因而保证了信息传输的安全性.
20世纪初,分组密码Rijndael加密算法成为了新的AES,Rijndael算法为迭代算法,其分组以及密钥大小均可进行调节,但是传统的AES标准只认可128比特的Rijindeal算法.AES算法最为关键的三要素为种子密钥、轮数以及状态.通过将算法的中间结果进行分组即可得到状态State,AES算法的所有操作均是围绕状态进行的.假设状态State=(aij)4×Nb,代表状态是一个4行、Nb列的矩阵,其中的分组长度/32代表列数Nb,矩阵元素字节用aij表示.因而输入输出分组中元素的位置及值与aij有关,如式(1)所示.
i=nmod 4;j=[n/4];n=i+4j
(1)
同状态求取方法,种子密钥用4行Nk列的矩阵进行表示,元素字节仍然用Nk=分组长度/32进行表示.迭代轮数用NT表示,算法的迭代轮数与Nb、Nk的参数值有关.AES算法的轮函数由字节代换、行移位、列混合和密钥四部分构成.字节代换还要求能够独立地对状态的各字节进行变换处理,是一种非线性变换.在AES中定义了一个S盒,S盒中各输入输出均是8位,因而构成了一个16矩阵字节,它是一个双向映射.256对一一对应的输入与输出.输入行值为状态State中各字节的高4位,输入列值则为状态State中各字节的低4位,输出值与S盒中的元素一一对应.S盒具有可逆性,在解密中起作用,把S盒所做的变换称为SubByte(State).行移位可以实现状态State矩阵的循环往复移位,行移位与列混合均属于AES的扩散子层,同非线性S盒不同,扩散层对状态矩阵执行的操作具有线性交换性.假设状态State矩阵位于i行元素的左移位量为Ci字节,其中i=1,2,3,若i为0,即C0=0,也就是位于0行的元素保持不变.若i≠0,此时Ci的长度与分组长度Nb有关.列混合是一个线性变换,它将状态矩阵的每一列元素进行混淆.列混合使用的矩阵乘法运算用b(x)=c(x)⊗a(x)进行表示,如式(2)所示.
(2)
若用矩阵进行表示,其表现形式如式(3)所示.
(3)
对状态的各列进行混合运算,运算式子记为MixColumn(state).密钥加是通过密钥间的逐比排异与组合而得到的,其中的密钥加运算用AddRoundKey(State,RoundKey)表示.密钥编排包含密钥扩展与轮密码选取两个部分,是一个通过输入原始密钥获取轮密钥的过程.轮函数则由三个不同的可逆均匀变换组成,三个变换被称为轮函数的线性混合层、非线性层以及密钥加层.这三个层是在宽轨迹策略的理论基础上建立的,因而AES算法对于线性密码攻击以及差分密码攻击的防御能力较强.
通过SDSoC技术实现对AES算法硬件开发的软件设计,设计分为软件设计与硬件设计两大部分.软件设计主要是对密钥的设置,设定函数keyExpansion的输入初始密钥key,之后进行密钥拓展操作,再将拓展后的40列结果放入初始密钥key中.密钥拓展操作要求在开始阶段进行,后续需要进行加密的128容量比特块可以连续多次使用先前设定的密钥.密钥拓展完成以后,需要对AES-128加密算法进行具体设计,如图1所示.
图1 加密模块简要描述
本研究对状态矩阵State中的所有元素进行异或操作,很显然,状态矩阵state在代码中的存在形式是数组,同其进行异或操作的轮密钥也是在数组中进行存储.在第一轮到第九轮的加密过程中,除了实现轮密码的操作,还需要对行移位、列混合以及字节代换进行混合操作,字节代换函数subByte的输入值为状态矩阵State,在这个过程中通过对S盒进行查找实现字节代换操作,不需要进行计算.行位移函数用shiftRow表示,其输入值为状态矩阵State,进行左移位的操作.列混合函数用mixColumn进行表示,其输入值也为状态矩阵State,其实现方式稍有差异,其实现过程中不会进行乘法运算,将乘法运算的两个结果均放入两查找表中,第一个查找表中的元素为字节元素同0×02的结果.第二个查找表的元素为字节元素同0×03的结果.
因而实际上在列混合的操作中只用到了异或运算.第10轮使用调用函数subByte完成字节调换,接下来利用shiftRow实现行移位,最后再进行一次轮密钥“加”操作就可以实现128比特块的全部加密过程.完成对件代码的功能仿真以及验证之后,需要使用SDSoC工具进行综合设计.在算法的硬件设计过程中,首先需要SDSoCD代码块的相应结构执行对应的加密操作,其操作流程如图3所示.在SDSoC工具的综合运用过程中,数组元素时常运用BRAM机构完成映射工作,对应的运算式子则用LUT进行构造.在这个顶层模块中,SDSoC常会将subByte、mixColumn等进行子模块生成操作.至于shiftRow则只需改变连线即可实现对应功能.由于受到循环以及硬件资源的限制,算法的整体资源利用率不高,同时SDSoC也不能实现其批量访问资源的功能,因而整体的延迟性也较大.
图2 基于SDSoC方法硬件结构
为了对改进后的算法进行评估,此次鉴于科学、合理、客观的原则,对算法优化评估体系进行构建.涉及的主要评估指标包括吞吐量、性能以及资源利用率三项,算法性能评估体系如图3所示.其中吞吐量是指在单位时间内,算法能够处理的最大信息量,其单位为Mbps.吞吐量作为反映加密算法性能的重要评估指标,其衡量标准则为一定速率下发送数据量与接收数据量的差异,若两者间存在较大的差异,则需要对速率进行提升,直到得到最后的测试结果.加密算法中的吞吐量计算对加密约束时间以及时钟周期的依赖性较强,相应的计算公式如式(4)所示.
(4)
其中,n为算法所需时钟周期,其单位为ns,处理数据块大小用B表示,单位用比特,约束时间则用T表示,约束时间即为系统的最小时钟周期.对于AES算法来说,不仅对处理速度要求较高,对吞吐量的要求也较高.所以在SDSoC平台中有助于提升AES算法的资源利用率.
其次是性能评估,其主要从时间(单位:ns)和延迟(单位:时钟周期,clock cycles)性能两个角度展开.时间性能用算法开始到结束的时间差表示,时间差越小代表算法运行越快,效率越高,反之效率越低.延迟性能用算法时间差内延迟所需的时钟周期范围表示,所需时钟周期越小代表算法性能越高,越大则性能越低.另外,由于算法由多个子实例以及多个循环构成,因而其延迟性能也可以用子实例延迟性能与循环延迟性能表示.
最后是资源利用率,由于基于SDSoC的AES算法常常是在系统资源稀缺的情况下运行,因而在运行时间给定的前提下,算法占用的系统资源越少,则意味着可释放更多的资源用作复杂计算以及I/O储备等操作.故系统资源占用率越低,算法的性能越高,二值之间具有负向关联.
图3 算法性能评估体系
本实验对传统散列函数算法与基于SDSoC优化后的AES算法进行了对比.两种算法均选用Zedboard板卡作为硬件平台,利用Xillinux作为软件平台.使用Windows 7 Ultimate with Service Pack 1(64)作为操作系统,开发工具为SDSoC-2015.2,其中平台采用Platform Zed板块,OS利用Linux,主要与Zed板块进行配合.
实验环境搭建好之后,首先描述吞吐量评价指标.传统散列函数算法吞吐量为13.57Mbps,而基于SDSoC的AES算法吞吐量则达到了156.87Mbps.所以改进后的AES算法在吞吐量方面具有显著优势,算法性能得到了很大的提升.从运行时间来看,改进前后的AES算法性能情况如表1所示.
表1 AES算法改进前后时间性能评价表 (单位:ns)
由表1可知,在时钟周期为ap_clk、目标运行时间为Target、评估运行时间为Estimated以及误差范围时间为Uncertainty的情况下,传统AES算法运行时间大致处于8.17±1.26ns范围,是一个相对较大的运行时间.而基于SDSoC的AES算法运行时间大体位于8.11±1.20ns范围,反映出改进后的AES算法在时间性能评测上具有较大改进,大幅度提升了算法的执行速度.而对于算法的延迟性能情况,其改进效果如表2所示.
表2 AES算法改进前后延迟性能评价表 (单位:clock cycles)
由表2可知,基于SDSoC的AES算法在延迟性能方面有了较大的提升,从时间间隔为1 158~2 520降为101~1 068,算法的延迟区间则从1 158~2 519降为了100~1 067,可以看出,改进前后的区别是较为明显的,与传统散列函数算法相比,基于SDSoC的AES算法在性能上提升了一个等级.此外本次研究从Expression、FIFO、Multiplexer等几方面对算法的资源利用率进行分析,见表3.
由表3可知,Expression、FF、Multiplexer以及Instance的LUT项的资源均得到了充分利用,由Utilization可知,最后的资源使用情况为DESP48E与FF的使用量为1%,BRAM_18K与LUT的使用量分别为3%与4%.改进后的情况如表4所示.
表3 AES算法改进前资源利用率(单位:%)
表4 AES算法改进后资源利用率(单位:%)
由表4可知,改进后的算法资源使用主要集中至LUT部分,最后的Utilization中,LUT从4%降至3%(从1 615个单位降至1 222个单位).改进后的算法资源占用率较低,能够很好地提升算法的性能.
本研究针对信息安全问题,提出了基于SDSoC技术的信息加密算法优化模型.实验结果表明,基于传统硬件的散列函数算法吞吐量为13.57Mbps,而基于SDSoC的AES算法吞吐量则达到了156.87Mbps,改进后的AES算法在吞吐量方面具有显著优势.基于SDSoC的AES算法运行时间(8.11±1.20ns)明显高于传统硬件的散列函数算法运行时间(8.17±1.26ns),说明改进后的AES算法在时间性能评测上具有较大改进.而在利用率上,改进前算法的LUT项资源利用率为4%.改进后算法LUT项资源利用率为3%(从1 615个单位降至1 222个单位).对比可知,改进后的算法资源占用率较低,能够很好地提升算法的性能.综上可知,改进后算法的综合性能较高.尽管本次研究可以为信息安全算法优化提供方法参考,但是算法设计中还存在优化评估体系不健全,算法的对比精度不够高的问题.