冯景亚,李 浪,郭影,黄现彤
(1.湖南师范大学 信息科学与工程学院,湖南 长沙 410081;2.衡阳师范学院 计算机科学与技术学院,湖南 衡阳 421002;3.智能信息处理与应用湖南省重点实验室,湖南 衡阳 421002)
Midori是在ASIACRYPT 2015上提出的一种基于SPN结构的分组密码算法,其分组长度包括64比特和128比特两种,分别记为Midori64和Midori128[1-2]。Midori分组密码的组件是专门为满足低能耗要求而量身定制的,它不仅减少了面积的消耗和等待时间,还减少了总体能耗,所以该算法对于能源预算紧张的应用特别有效,例如医疗植入物、资源受限的RFID标签、智能设备和传感器节点。
本文首先分析了Midori64的加密过程,并对其加密结构进行了优化,然后依据算法不同架构的硬件实现[3-9],提出了一种新的基于迭代的硬件体系结构,该架构为减少算法占用资源,提高部件的复用率,对Midori64算法的部件做了进一步地优化。我们采用xc5vsx50t-2ff1136 FPGA设备对Midori64基于迭代的硬件体系结构进行了综合,与其他基于迭代的硬件实现相比,本文提出的硬件体系结构有效地节省了算法的硬件实现面积,提高了算法的加密速度。
图1 Midori64的加密流程图
Midori64加密算法的操作过程如图1所示,其加密操作包括密钥加变换(Add Key)、单元替换(Sub-Cell)、单元移位变换(ShuffleCell)以及列混淆变换(MixColumn)[2]。
密钥加变换:密钥加变换包括白化密钥加变换和轮密钥加变换。在Midori64算法中,128比特的主密钥是由两个64比特密钥K0和K1组成,即主密钥K=K0||K1。白化密钥WK是密钥K0和K1异或的结果。轮密钥RK是根据轮数的奇偶性来动态获取的,当轮数为奇数时,RK是K0与轮常量ai异或的结果;当轮数为偶数时,RK为K1与轮常量ai异或的结果,其中0≤i≤14。
单元替换:Midori64状态以4比特为一单元同S盒Sb0进行替换,Sb0如表1所示。
单元移位变换:将单元替换结果分为16个长度为4比特的块,以块为单位进行变换,即:
Midori64的密钥扩展是以轮数的奇偶性为控制信号,通过K0或K1与轮常量异或来获取的轮密钥,而加密过程的轮密钥加也是以轮数为控制信号。为减少代码冗余,提高Midori64加密算法的运行效率,本文对密钥扩展与加密过程进行了整合。同时对Midori64算法的加密结构进行了如下的优化:
1)Midori64的密钥扩展与加密过程整合后,加密算法就不再需要WK和RK。密钥加变换不再是白化密钥加和轮密钥加两种变换,而是直接通过轮数i控制信号来完成相应的异或操作。假设密钥加变换的输入状态为X1,密钥加变换的输出状态为X2,那么整合后的计算过程如下:
2)Midori64加密过程中,除了第一轮和最后一轮的轮函数有所不同之外,其他轮的轮函数是一样的,依次进行单元替换(SubCell)、单元移位变换(ShuffleCell)、列混淆变换(MixColumn)和密钥加(AddKey)。为了优化Midori算法的加密结构,本文对轮函数做出了改进,即将单元移位和列混淆进行了合并。现假设单元替换的输出状态为X0,密钥加运算的输入状态为X1,其中
则单元移位变换、列混淆变换的计算过程描述如下:
将状态X0、X1看作一维数组,则单元移位和列混淆两个过程可通过以下方式实现:
两个过程合并后,式子看上去更复杂了,但X1每个元素bi还是通过X0中的3个元素进行异或得到的,并且整合后的矩阵仍是对合的。所以,整合后的运算仍是易于实现的。
设P=(P0,P1,…,P14,P15)为输入明文,C=(C0,C1,…,C14,C15)为输出密文,K=K0||K1为主密钥。改进后的Midori64不存在密钥扩展算法,而加密算法描述如下:
我们根据文献[10]中提出的架构方法,对优化后的Midori64构建了一种基于迭代的硬件架构Midori64-1,如图2所示。硬件实现中,此架构需要16个S盒,一种可以简化为24个XOR门,6个64比特的XOR层以及一个64位寄存器。但Midori64-1不能很好地的体现密钥加变换的改进。为解决这一问题,我们提出了一种新的基于迭代的硬件架构Midori64-2,如图3所示。该架构的密钥加变换只需要2个64比特的XOR层。与Midori64-1相比,Midori64-2减少了硬件实现面积,提高了部件的复用率。
图2 优化后的Midori64基于迭代硬件实现架构Midori64-1
图3 优化后的Midori64基于迭代硬件实现架构Midori64-2
图4 Midori64-1和Midori64-2架构的硬件实现仿真结果
Midori64-1、Midori64-2均使用VHDL语言实现,通过ModelSim10.1c应用软件仿真的结果如图4所示。
文献[1]在附录中给出的Midori64测试向量如图5所示。优化后的Midori64采用同样的明文与初始密钥分别以Midori64-1和Midori64-2两种架构进行仿真测试,得出的密文与原始文献相同,从而证明了Midori64的优化方法以及新提出的Midori64-1和Midori64-2架构是正确的。
图5 原始文献提供的Midori64的测试向量
由于使用的FPGA平台不同,很难进行公平的比较,所以我们采用Xilinx Design Suite 14.7的应用软件,在xc5vsx50t-2ff1136 FPGA设备上分别对Midori64-1、Midori64-2和文献[10]中提出的架构进行了综合。加密算法的总能量决定了能量的利用率。总功耗、延迟和电路的工作频率决定了加密算法所需要的总能量。表2中给出了不同架构实现所需的资源面积、最大频率、最大频率下吞吐量的计算结果以及功耗和最大频率下的能耗计算结果。
根据表2中三种不同架构硬件实现所需的资源面积,可以看出Midori64-2架构硬件实现所需资源面积最少,与文献[10]中硬件实现所需的面积相比,Midori64-2硬件实现占有资源面积少了100个LUTS,优化效率达到了26.25%,有效节省了硬件实现面积。Midori64-2架构的吞吐率为1 300.74 Mbps,是三种架构中最大的,相对于文献[10]的吞吐率,其加密速度提高了(1300.74-1079.15)/1079.15=20.53%。Midori64-1架构实现能耗最低,相对于原始架构,其能耗减少了(41.68-32.35)/41.68=22.38%,而Midori64-2架构实现能耗减少了(41.68-34.53)/41.68=17.15%。
表2 不同架构实现所需的资源面积、最大频率、吞吐量、功耗以及能耗
随着物联网技术的快速发展,嵌入式设备比如智能卡芯片变得越来越轻薄,这使得如何更有效地减少算法硬件实现占有资源成为了一个重要的研究课题。因此,优化Midori密码算法硬件实现面积和加密性能是十分必要的。本文对Midori64算法结构和密钥扩展进行了优化,并通过Midori64-1,Midori64-2两种基于迭代的架构类型对优化后的Midori64算法进行了综合。综合结果表明,Midori64-1硬件实现占用面积少,具有高吞吐量,适用于需要高吞吐量、面积受限的应用程序,而Midori64-2适用于能耗为主要限制的应用程序。