APP下载

基于双重流水同步迭代的SM3算法高速硬件设计

2020-04-20谷会涛武宗涛

计算机与网络 2020年2期

谷会涛 武宗涛

摘要:SM3算法是国家标准商用密码杂凑算法,广泛应用于数字签名和验证、消息认证码的生成与验证以及随机数的生成等领域。介绍了SM3算法的基本流程,分析了SM3算法高速实现的3种方法,提出了基于双重流水同步迭代的SM3算法高速硬件设计方法,进行了模拟验证和FPGA设计实现,给出了算法性能和综合结果,结果表明所提方法具有较高的运算性能。

关键词:杂凑运算;SM3;高速设计;现场可编程门阵列

中图分类号:TN918.4文献标志码:A文章编号:1008-1739(2020)02-54-3

0引言

杂凑运算是不可逆的密码运算过程,可将任意长度的数据信息变换成固定长度的数据输出[1],在商用密码中广泛应用在数字签名和验证、消息认证码的生成与验证以及随机数的生成等方面[2]。美国制定了安全杂凑算法(Secure Hash Algorithm,SHA)等系列标准,我国国家密码管理局2010年公布了中国商用密码杂凑算法标准SM3算法,该算法在SHA-256基础上改进实现,采用Merkle-Damgard结构,消息分组长度为512 bit,摘要值长度为256 bit[2]。

SM3等密码算法运算复杂,在计算机处理器上采用软件实现SM3算法,性能难以满足高速应用场景的使用需求。本文分析了SM3算法的实现原理,提出了一种高速实现方法,最后基于现场可编程门阵列(Field-Programmable Gate Array,FPGA)进行了设计实现,验证了该方法的运算性能。

1 SM3算法

SM3算法标准约定,对于任意有限长度的消息,SM3算法可生成256 bit的杂凑值。SM3杂凑算法主要包括填充和迭代压缩2个过程。

①将整个消息用1 bit1, bit0和64 bit消息长度进行填充,填充完毕的消息长度按512 bit对齐。消息填充后按512 bit进行分组,每个消息分组依次进行迭代压缩运算。

2 SM3算法实现方法

SM3算法计算过程中,消息分组迭代压缩过程计算较为复杂,实现逻辑直接影响算法的执行效率。为了实现SM3快速运算,研究人员提出了多种FPGA迭代实现方法。SM3算法中,一个消息分组一般需要进行64轮运算,每轮运算包括消息扩展和压缩函数2步运算。根据这2步运算的耦合程度和执行顺序,FPGA迭代实现方法可以分为顺序迭代[3]、循环展开[4]和流水迭代[5]3种方法[6]。

顺序迭代方法如图2所示,一个消息分组的轮运算串行执行,每轮运算的消息扩展和压缩函数运算也串行执行。顺序迭代实现方法控制简单、实现方便。但如果将消息扩展和压缩函数运算在一个时钟周期内完成,则导致硬件逻辑关键路径较长,降低了时钟频率,进而影响运算速率。如果将消息扩展和压缩函数运算划分为2个时钟周期执行,则一个消息分组的运算需要128个时钟周期左右,运算速率较低。

循环展开方法如图3所示,将消息分组的2轮消息进行扩展运算,2轮压缩函数运算循环展开各放到一个时钟周期执行,因此可以将一个消息分组的运算时间降低到顺序迭代方法的50%左右,一个消息分组的运算需要64个时钟周期。如果将更多轮操作循环展开,运算时间还可以进一步压缩。循环展开方法速率较高,但需要占用更多的硬件资源。由于一个时钟周期完成的2轮压缩函数运算存在相关性,必须串行执行,因此单周期内需要完成的运算更多,限制了整个算法实现的工作频率。

流水迭代方法如图4所示,将消息扩展运算和压缩函数流水实现,且消息扩展运算与压缩函数并行执行。流水迭代方法控制简单、实现方便,性能与循环展开方法相近,占用硬件资源较少。

3双重流水同步迭代技术设计与实现

基于流水迭代方法,本文提出了SM3算法雙重流水同步迭代方法。该方法分别设计了消息扩展运算和压缩函数运算2条流水线,并且第+1轮消息扩展运算和第轮压缩函数运算同步执行,2条流水线同步运算极大提升了数据块运算效率。

4 FPGA实现与性能评估

本文基于双重流水同步迭代方法,设计实现了SM3算法,采用ModelSim工具进行了功能验证,采用标准给出的2组测试向量进行输入,输出结果与标准预期值相同。本文基于Xilinx公司XC7K325T芯片,采用ISE14.7进行了综合实现,综合结果如表1所示,本文方法最高综合频率222 MHz。

按此工作频率设置测试用例,采用ModelSim工具对长消息进行运算,本文结构性能达到约1 690 Mbps。表2给出了本文结构与顺序迭代方法、循环展开方法和流水迭代方法性能对比。从表中可以看出,文献[3-4],算法硬件逻辑复杂、工作频率较低,影响了计算性能。文献[5]方法主频和计算性能较高。不考虑器件选型的差异,相比这些方法,本文提出的方法在工作主频和计算性能上最优。

5结束语

本文介绍了SM3算法的基本运算步骤,分析了3种典型的SM3算法实现方法,提出了基于双重流水同步迭代技术的SM3算法高速硬件设计方法。通过对本文方法进行模拟验证和FPGA设计实现,得出了算法性能和综合结果。结果表明,本文提出的方法可获得较高的工作频率和算法性能。

参考文献

[1]国家密码管理局.GM/T 0004-2012 SM3密码杂凑算法[S].北京:中国标准出版社,2012.

[2]赵睿斌,杨绍亮,王毛路,等.基于商密体系的政务链解决数据安全共享交换的研究[J].信息安全与通信保密,2018,(5): 83-88.

[3]王晓燕,杨先文.基于FPGA的SM3算法优化设计与实现[J].计算机工程,2012,38(6):244-246.

[4]周威,王博,张卫东.SM3算法硬件实现研究与应用[J].电子测量技术,2015,38(12):67-71.

[5]刘宗斌,马原,荆继武,等.SM3哈希算法的硬件實现与研究[J].信息网络安全,2011(9):191-193.

[6]丁冬平,高献伟.SM3算法的FPGA设计与实现[J].微型机与应用,2012,31(5):26-28.