APP下载

一种高性能多模式可配置SIMON加密电路设计

2022-07-01朱浩文邢鑫怡

关键词:寄存器密钥加密

李 斌, 朱浩文, 邢鑫怡, 程 心

(合肥工业大学 电子科学与应用物理学院,安徽 合肥 230601)

0 引言

物联网(Internet of Things,IoT)设备数量的快速增长和边缘计算的发展在给日常生活带来便利的同时也带来了数据安全性问题[1-2]。分组加密算法作为主流的数据加密方法可以保障数据传输安全。传统的高级加密标准(advanced encryption standard,AES)虽然广泛应用于需要进行数据加密的场景中,但是存在加密流程较为复杂,进行硬件实现时消耗资源较多的缺点[3-7]。大量IoT设备需要采用小尺寸的电池甚至自供电的能量收集电路保障系统运行,由此产生了结构紧凑、适用于资源受限平台的轻量级密码算法[8-10]。SIMON轻量级密码算法作为一种新型的分组密码算法可提供10种可选的分组和密钥长度以满足不同安全性能要求的应用场景,因此已成为轻量级密码领域的研究热点之一[11-14]。

文献[11]提出了一种位串行结构的SIMON加密电路,仅需使用36个Slices,但存在吞吐率低的缺陷,无法满足IoT场景中大量的数据交互需求。文献[12-13]均设计实现了紧凑的低功耗SIMON加密电路,但所设计的电路只能支持固定分组和密钥长度,无法满足各类对数据加密性能要求迥异的IoT应用,缺乏应用灵活性。此外,上述有关SIMON算法的硬件实现均只实现了加密电路部分,没有考虑分组密码的迭代方式[15]。

综上所述,目前对SIMON加密算法的硬件实现研究主要集中在仅涉及加密电路的位串行结构和单一配置模式上,没有针对分组密码的迭代方式进行支持,难以满足多样化的IoT应用需求和分组密码实际运行需要。本文针对硬件实现功能单一、灵活性低、位串行结构吞吐率低和没有支持安全的分组迭代的缺点进行改进,设计了一种基于位并行结构并结合数据路径复用技术的可支持输出反馈(output feedback, OFB)及计数器(CTR)模式的高性能轻量级SIMON加密电路。所设计的电路在Xilinx XC7A35T 现场可编程门阵列(field programmable gate array,FPGA)上进行测试,在保证硬件资源开销较小的前提下,具备支持动态密钥更新、支持OFB和CTR迭代方式、分组和密钥长度可配置和高吞吐率的特点,适用于各类资源受限的IoT设备。

1 SIMON加密算法原理

SIMON算法是一种轻量级的对称分组加密算法,主要包括轮函数运算和密钥调度2个部分。SIMON算法根据所支持的分组长度和密钥长度的不同有10种不同的配置,记作SIMON 2n/mn,其中:2n为分组长度;mn为密钥长度;n位称为1个字。例如,SIMON 64/128模式代表1个字的长度为32,密钥由4个字构成,即m为4。SIMON加密算法的分组长度、密钥长度以及必要的参数配置见表1所列。

表1中,轮常数的目的是消除循环移位带来的滑动特性,轮数表示完成1个分组的加密所需的迭代次数。

表1 SIMON密码算法参数

SIMON加密算法采用Feistel结构,主要由按位异或、按位与及非线性的循环移位构成,具体算法为:

Rk(x,y)=(y⨁(Sx&S8x)⨁S2x⨁k,x)

(1)

(2)

其中:Rk为轮函数;Si表示循环左移i位;k为密钥。 轮函数运算对2n位输入分组长度的数据首先等分为高n位XL和低n位XR,XL循环左移1位和循环左移8位后的数据进行按位与后和XR进行异或,所得数据再与XL循环左移2位的数据进行异或,结果与相应轮密钥进行异或操作后对原XL数据进行更新,同时原XL数据直接覆盖原XR。重复上述轮函数操作流程直至迭代次数达到表1所规定的相应轮数R,即完成1次加密。

对特定的SIMON 2n/mn,密钥调度的方法取决于m的取值,m的3种取值对应的具体密钥调度方法有所区别。将输入初始密钥等分为m组,当m=2/3时,对最高n位循环右移3位后与低n位进行异或得到中间值,同时在循环右移3位的基础上再右移1位与上述中间值再次异或,最终异或上轮常数的第i位后再异或常量M,并更新密钥寄存器的最高n位,同时各组密钥寄存器分别由上一组密钥寄存器的值进行覆盖更新。而对m=4的密钥调度方案,KR3寄存器的更新过程与m=2/3时有所不同。

2 多模式SIMON加密电路设计

本文设计的可配置分组和密钥长度的SIMON加密电路主要分为加密控制单元、密钥调度单元和轮函数运算单元3个部分,如图1所示。该加密电路接收外部输入时钟信号CLK、复位信号RST-n、输入明文DIN、初始密钥SEED、加密使能信号EN和模式选择信号MODE,输出加密完成信号DONE及密文DOUT。

图1 SIMON加密电路架构

2.1 加密控制单元

加密控制单元主要提供密钥调度单元和轮函数运算单元所需的控制信号,具体包括由加密轮数计数器值、加密进程指示信号共同构成的控制信号总线CTRL以及DONE信号。

加密控制单元的内部主要由增量计数器、预存加密轮数数值的只读存储器(read only memory,ROM)和比较器构成,在时钟上升沿,EN信号有效后计数器从0开始递增计数。同时,MODE信号输入到预存加密轮数的ROM将完成相应模式需要的轮数值作为比较器的一个输入,计数器输出作为比较器的另一路输入,待计数器输出与加密轮数相等,输出DONE信号。加密控制单元还输出一路加密电路内部使用的CTRL信号给密钥调度单元和轮函数运算单元,从而控制内部的寄存器在加密完成后保持寄存器输出状态,减小动态功耗。

2.2 密钥调度单元

密钥调度单元接收加密控制单元传递的EN信号进入密钥更新状态,并根据输入MODE的值对内部数据通路进行选择,从而实现不同m取值下的调度方法及不同的有效密钥长度。密钥调度模块可以接收外部输入的SEED,避免了长期采用固定密钥带来的安全隐患,从而进行动态密钥更新。

密钥调度过程需要使用的轮常数Z[j]利用ROM预存,每个轮常数均扩展为72位,从而满足需要最长72位轮常数的模式。MODE作为寻址轮常数ROM的地址,取出对应的轮常数并在时钟控制下并行存入移位寄存器进行逐位右移。

密钥调度单元如图2所示。

图2 密钥调度单元

由表1可知最大密钥长度为256位,因此位并行实现的密钥调度单元使用256位寄存器,并均分为4组。EN有效时,加载SEED信号,若密钥长度不满256位,则按照高位优先填充的方式加载到相应寄存器中。每个时钟周期,各个寄存器数据通过输入端的多路选择器(MUX)选择下个周期的数据输入来源。MUX的控制端切换取决于当前工作模式下MODE信号的取值。当m=2时,KR3寄存器的输出经MUX直接输入到KR0,KR1和KR2寄存器不使用;当m=3时,KR3数据输出经MUX输入KR1,而KR1的输出作为KR0的输入,KR2不使用;当m=4时,KR3、KR2、KR1、KR0经MUX顺序连接构成移位寄存器形式,对3种m的不同取值,采用图2的寄存器设计可以保证只对KR3进行循环右移的操作,使得3种密钥调度方法实现的资源复用。当m=4时,只需对KR1寄存器进行额外的循环右移1位的操作,具体使用KR3循环右移3位的结果或KR1循环右移1位与KR3循环右移4位再异或后的结果是通过MUX完成的,从而满足不同密钥调度方法的需要。

此外,密钥调度单元中KR3的更新还需要轮常数Z[j]以及常量M的参与。由于M是最低两位为0、高位均为1的比特串,与M的异或可以简化为对数据高位取反并保持最低两位不变。因此,原本所需65个两输入异或门减至62个反相器和1个两输入异或门。

2.3 轮函数运算单元

轮函数运算单元的状态取决于128位寄存器{XL,XR},该寄存器存储外部输入的DIN以及在轮函数运算迭代更新过程的中间值,从而实现原位计算,减小寄存器资源的开销。XL被用来存储数据的高64位,XR存储数据的低64位。由加密控制单元输出的MODE信号控制轮函数运算单元内部数据通路的MUX,实现多模式可配置并充分复用运算资源。轮函数操作可抽象为数据传递和数据更新2个步骤。轮函数运算单元如图3所示,数据传递将XL数据复制给XR,而数据更新涉及XL和XR以及密钥调度单元传递的轮密钥KEY。

图3 轮函数运算单元

{XL,XR}寄存器输入数据的更新由MUX控制。EN信号优先级最高,当EN有效时,DIN信号被选中,从而一个新的分组加密过程开始。若输入明文长度不满128位,则按照高位优先填充的方式将明文均分为2个部分,低位补0后分别加载到XL和XR寄存器中。明文加载完成后轮函数运算单元开始迭代过程,此时MUX选中轮函数运算结果,即XL输入为SIMON轮函数运算的结果,从而完成数据更新步骤,而XR输入上一个周期结束时XL的数据,从而完成数据传递步骤。当加密控制单元DONE信号有效时,寄存器{XL,XR}将对当前值进行保持,即DOUT不变,便于外部系统取用密文,同时不处于加密工作状态时,整个电路的寄存器输出不发生信号跳变,从而降低系统的功耗。

2.4 扩展SIMON加密电路

基于上述SIMON加密电路,本文设计了支持OFB和CTR分组迭代方式的SIMON加密电路,支持实际分组密码迭代操作的需要。扩展后的SIMON加密电路如图4所示。通过引入初始值INT-VAL信号及OFB-CTR-SEL信号,切换不同的输入初始值并改变加密迭代数据流向,从而在基本SIMON加密电路基础上支持分组加密的OFB和CTR迭代。

图4 扩展后的SIMON加密电路

3 实验结果与比较

为了测试所提出的SIMON加密电路的功能和性能指标,本文通过Verilog HDL进行设计描述并使用Artix-7 XC7A35T FPGA作为实验平台进行功能和性能测试。

本文提出的可动态密钥更新且支持多模式可配置的SIMON加密电路,在该FPGA平台上最大工作频率为350 MHz,各类资源消耗分别为816LUTs、473FFs和245Slices,其中LUTs、FFs和Slices分别代表FPGA的查找表、寄存器和切片数。吞吐率的计算公式为:

Tp=fω/τ

(3)

其中:f为电路的工作频率;ω为有效的数据路径宽度;τ为加密过程的延时周期。

MODE分别为4’d0、4’d7及4’d9,对应SIMON 32/64(模式0)、SIMON 128/128(模式7)以及SIMON 128/256(模式9)的测试结果如图5所示,输出密文与官方测试标准数据一致,即SIMON加密电路正确完成了加密功能。

图5 多模式可配置SIMON加密电路测试波形

与文献[11]提出的位串行结构实现的SIMON加密电路相比,虽然消耗的资源提高了6.8倍,但最大吞吐率提升了183倍,在10种分组长度和密钥长度配置模式下的吞吐率及延时如图6所示。由图6可知:模式0下的吞吐率为350.0 Mb/s;模式7下达到最大吞吐率为658.8 Mb/s,比模式0吞吐率提升1.88倍;模式9下达到最大延时为205.7 ns。

图6 多模式配置下的吞吐率与延时

本文方法与相关研究的比较见表2所列。

表2 SIMON加密电路性能对比

相较于文献[12-13]所提出的单一模式的加密电路来说,多模式可配置的硬件设计实现了对变长明文分组长度和密钥长度的支持,从而可以广泛应用于对加密性能有不同需求的资源受限的IoT设备。

从表2可以看出,本文所提出的SIMON加密电路性能更优,其中文献[12]选取了所提出的64位并行实现方案,吞吐率数据由本文(3)式计算得出。基于SIMON加密电路扩展对分组密码OFB和CTR迭代的支持后,Slices资源仅提高了19.6%。

4 结论

本文提出了一种基于SIMON密码算法的多模式可配置的轻量级加密电路,在Xilinx Artix-7 XC7A35T FPGA上进行硬件实现和性能测试。实验结果表明,所设计的SIMON加密电路最大频率可达350 MHz,在仅消耗245 Slices的情况下,10种模式下的吞吐率均超过350.0 Mb/s,其中最大吞吐率为658.8 Mb/s。此外该电路经扩展支持分组迭代的OFB和CTR后,资源消耗仅提高19.6%,不仅可满足IoT场景中的各类有数据加密需求的应用,还在保持较小硬件开销的同时具备充分的灵活性。

猜你喜欢

寄存器密钥加密
幻中邂逅之金色密钥
幻中邂逅之金色密钥
保护数据按需创建多种加密磁盘
谷歌禁止加密货币应用程序
飞思卡尔单片机脉宽调制模块用法研究
Android密钥库简析
移位寄存器及算术运算应用
加密与解密
数字电路环境下汽车控制电路信号设计
一种新的动态批密钥更新算法