设计应用

一种基于数据存储的流水SHA256硬件实现电路

0 引言

    SHA-2(Security Hash Algorithm-2)安全散列算法是由美国国家安全局(NSA)和美国国家标准与技术研究院(NIST)在2002年公布的一种密码散列算法。其主要作用是实现数据间的单向映射,它可以将任意长度的消息映射成固定长度的消息摘要,并且映射过程不可逆[1]。根据不同的输出消息摘要的长度,SHA-2家族分为SHA-224、SHA-256、SHA-384、SHA-512四种算法,它们主要用于数字签名、指纹验证以及网络安全协议等领域。

    现有的高吞吐率SHA256通常采用流水的硬件实现方式,因此,本文将在现有流水结构的基础上,采用基于锁存器存储的数据流水方式替代传统的基于寄存器翻转的数据流水方式。

1 SHA256算法概述

1.1 SHA256流水实现方式

    SHA256能将任意有限长度的输入消息(长度小于264位)转换为256位的输出消息摘要。步骤分为数据预处理、数据扩充和数据压缩三个部分[2]

1.1.1 数据预处理

wdz3-gs1.gif

1.1.2 数据扩展

wdz3-gs2-3.gif

    在式(3)中,算子wdz3-gs2-3-x2.gif为按位异或,算子wdz3-gs2-3-x3.gif为按位与,算子wdz3-gs2-3-x1.gif为按位取反,算子SHRn为右移n位,ROTRn为循环右移n位。

1.1.3 数据压缩

    现假设8个迭代变量分别为A、B、C、D、E、F、G、H。首先按照式(4)规定的算法初始化8个变量,其中Hj-1为第j-1个数据块(Mj)迭代后输出哈希值,初始值由式(1)给出。

     wdz3-gs4.gif

    经过上述初始赋值后进行如下迭代操作:对于t=0~63:(Kt是一组常量[5])

     wdz3-gs5.gif

    经过64次迭代之后,最终的散列值计算方法如式(6)所示:

     wdz3-gs6.gif

    这里,||表示拼接符。剩下数据块采用与上述相同的方式进行压缩,且每一数据块的输出256值作为下一个数据块的输入值,最终经过多次运用该算法,可以将任意长度的输入数据压缩成为256位输出消息摘要。

1.2 通用的流水电路结构

    基于寄存器翻转的SHA256全流水电路结构如图1所示,它包括数据压缩部分流水结构和数据扩展流水结构。当每个时钟触发沿到来时,数据扩展部分进入一个新的数据块Mi,构成W0i~W15i,并存入数据扩展部分的第一级寄存器组,其中W0i将输入至数据压缩部分,进行第一轮的压缩。然后,随着时钟触发沿的不断到来,第i个数据块不断往前进行流水传输,并逐级进行扩展,以产生W16i~W63i,同时逐步将W1i~W63i输入至数据压缩部分进行压缩,直至完成64轮压缩,得到最终的A63i~H63i,使第i个数据块Mi处理完成。此时,与Mi相关的信息将全部移出流水结构,流水结构正在处理的将是Mi1~Mi64的数据块。

wdz3-t1.gif

    在上述结构中,采用64级A-H寄存器暂存64个输入数据块的压缩信息,同时采用64级Wt寄存器暂存64个输入数据块的扩展信息。可以看出,传统全流水结构在获得高吞吐率的同时,也将消耗掉大量的寄存器和压缩、扩展算子[5]

1.3 SHA256流水结构研究现状

    目前国内外文献对SHA256的流水实现方式提出了很多优化方案。文献[6]提出了一种四级流水的结构,提高了运算速度,增大了吞吐率;文献[7]提出了一种Wallace树方式互连的CSA组合树结构来添加多操作数,减少了SHA256电路更新中加法器所导致的延迟,提高了电路性能;文献[8]中提出一种14 nm三栅CMOS工艺实现SHA256安全散列硬件加速器,通过预先添加消息摘要,采用多路调用的方式完成分布式哈希计算,增大了吞吐率;文献[9]中提出了一种基于可重构硬件的SHA256电路,在面积和最大频率方面得到优化,最高吞吐率达到2 027.84 Mb/s;另外,文献[10]中基于硬件描述语言实现了SHA256哈希函数的优化流水线结构,对压缩器和扩展块进行了修改,加入进位跳跃加法器提高体系结构的性能,实现SHA256的优化。

    虽然上述文献采用了多种优化方案提高SHA256硬件实现电路的效率,但是大多都是基于寄存器翻转的数据流水方式。而对于SHA256流水结构而言,其硬件实现需要使用大量的寄存器。虽然基于寄存器翻转的数据流水方式实现简单,但是其动态翻转功耗较大。因此,为了减小功耗,本文提出了一种基于锁存器存储的SHA256流水硬件实现电路。

2 存储方案

    本节将主要从数据压缩部分介绍本文提出的基于锁存器存储的全流水实现方式。

    采用锁存器存储每一轮迭代新产生的A和E,再通过选择存储器中已存的前4轮的A和E数据去计算得到新一轮的A和E。但在输入级计算A2、A3、A4和E2、E3、E4时,会存在缺少前轮计算数据的情况。因此,本节将分别从通用级存储结构和输入级(A0~A4,E0~E4)存储结构对该存储方案进行介绍。

2.1 通用级存储结构

    以64级标准流水电路结构为例,关注前五轮Round1~Round5新产生的A和E,具体算法如式(7)~式(11)所示:

     wdz3-gs7.gif

     wdz3-gs8-11.gif

    A1和E1由Round1产生,但在Round2~Round5中都被使用,因此,A1和E1并不需要逐级往前传递,而是可以采用存储器存储起来,当Round2~Round5的迭代需要使用该数据时,直接在存储器中读取该数据即可。当4个时钟周期过后,A1和E1生命周期结束,在后续迭代过程中不再被使用,此时存储在存储器中的A1和E1可以被擦除并更新。

    更普遍地,写出每级的A~H:

     wdz3-gs12.gif

    其中k意味着第k级存储器,i为第i个输入数据。如图2所示,讨论存储方案实现的通用情况。

wdz3-t2.gif

    对于第k级,只需要两个存储器组来分别存储A和E,每个寄存器组的大小为4×32位,分别存储Ak_i、Ak_i+1、Ak_i+2、Ak_i+3和Ek_i、Ek_i+1、Ek_i+2、Ek_i+3,其中Ak_i+3、Ek_i+3为第k轮新产生的数据,Ak_i、Ak_i+1、Ak_i+2和Ek_i、Ek_i+1、Ek_i+2为存储在存储器中的前3轮产生的数据。

    对于第i个输入数据,在k轮迭代运算完成后,得到的数据并不往前传,而是继续存储在第k级对应的存储器中,以便第k+4轮迭代运算进行调用。为了得到Ak+4_i和Ek+4_i,使用了第k级存储器存储的Ak_i和Ek_i、第k+1级存储器存储的Ak+1_i和Ek+1_i、第K+2级存储器存储的Ak+2_i和Ek+2_i以及第k+3级存储器存储的Ak+3_i和Ek+3_i

     wdz3-gs13.gif

2.2 输入级存储结构

    对于输入级,即A0~A4和E0~E4,在本存储方案中,由于新数据的产生需要用到前三级存储器中的数据,根据式(7)~式(11),A1和E1可以完全由外部输入数据计算得到,但A2、A3、A4和E2、E3、E4的产生仍需要用到输入的A0和E0。因此,引入三级输入缓冲存储器存储相应的输入数据,如图3所示。

wdz3-t3.gif

    每组输入缓冲存储器为32位,共12组,其中HA3-1_i-3、HE3-1_i-3用于存储第i-3个输入数据的A和E,HA2-1_i-2、HA2-2_i-2用于存储第i-2个输入数据的A和B,HE2-1_i-2、HE2-2_i-2用于存储第i-2个输入数据的E和F,缓冲存储器中的数据仍采用逐级传递的方式。

    引入上述缓冲存储器后,在Round1~Round4,A2、A3、A4和E2、E3、E4的产生都可以通过调用缓冲存储器中的数据进行计算得到;在Round5,A5和E5由A1、A2、A3、A4和E1、E2、E3、E4计算得到,且计算形式与式(13)一致。由此,输入级存储结构和通用级存储结构就构成了完整的数据压缩存储结构。

2.3 完整数据压缩存储结构

    完整数据压缩存储结构如图4所示。对于输入级,在时钟触发沿,数据输入首先存储在第1级存储器(Latch1_AE)中,在数据逐级向缓冲器传递的同时产生新的数据。输入级数据的产生方式如下:输入端MUX选择输入的数据,经过压缩算子计算模块计算的输出值顺序存储在存储器中。经过四个周期后,A0、E0的生命周期结束,存储器对应位置的值被擦除并更新为A0_i+4和E0_i+4,同时,数据压缩进入正常流水级。

wdz3-t4.gif

    在正常流水级中,数据压缩方式与输入级一致,通过8个MUX选择输入数据,经过压缩算子计算模块后将输出值顺序存储在存储器中,在四个周期后,存储器中的数据被重新更新。经过64轮迭代之后,散列值的计算方式如式(14)所示:

     wdz3-gs14.gif

其中DMj-1为Mj数据块迭代后输出哈希值,DMj为第Mj-1数据块迭代后输出哈希值,m、n、p、q表示当前时刻存储在存储器中第m、n、p、q组的数据。

    另外,数据扩展部分原理与数据压缩部分原理相似,同样采用锁存器进行存储,只不过数据存储的周期略有区别。通过MUX选择开关选择参与数据压缩计算部分的数据,新的扩展数据的产生和存储也通过选择开关实现,此处不做赘述。

3 电路设计

3.1 存储器

    存储器采用图5所示的latch结构,通过控制使能信号来实现存储功能。每组存储单元大小为32位,采用4组32位latch分别存储A和E,通过使能信号(EN0、EN1、EN2、EN3)来控制数据存储位置(EN和ENB为一对反向信号)。

wdz3-t5.gif

3.2 使能信号产生电路

    控制存储器存储和开关通断的使能信号产生电路如图6所示。电路由计数器(Cnt)、二四译码器(Dec)和非交叠使能信号电路(N)组成。产生四组占空比为1:3的使能信号,每组信号之间有1/4周期的延时。

wdz3-t6.gif

3.3 非交叠使能信号产生电路

    在数据选择电路(MUX)中需要非交叠的使能信号来控制开关不会被两个使能信号同时打开,减少漏电。所采用的非交叠信号产生电路如图7所示,其中RS触发器产生非交叠的信号,与非门用于占空比的调节,通过调节虚线框图中的反向器个数n来形成四组非交叠的使能信号。

wdz3-t7.gif

3.4 选择开关电路

    选择开关由反相器和TG32构成,如图8所示。由四组选择开关构成一个总的选择开关,分别选择A和E。通过使能信号控制开关通断实现数据选择功能,选择数据时的使能信号和存储数据时的使能信号保持一致。TG32开关由四组图5中用到的8位传输门构成,由一组使能信号控制(EN和ENB)。通过EN1、EN2、EN3、EN4四组信号进行选择,选择数据方式如式(13)所示。

wdz3-t8.gif

4 性能评估

4.1 ModelSim仿真

    使用Verilog硬件描述语言分别实现本文提出的基于锁存器存储和传统基于寄存器翻转的流水电路,并采用ModelSim进行仿真。在相同的仿真激励下,仿真结果如图9所示。

wdz3-t9.gif

    其中sim为传统基于寄存器翻转的流水电路波形图,vsim为本文提出的基于锁存器存储的电路波形图,DM_pre、DM_new分别为输入值和输出值,图中框线内的值表示在相同的激励条件下,传统基于寄存器翻转的标准流水结构(sim:DM_new)和本文所提出的电路结构(vsim:DM_new)的输出值。

    仿真结果表明:在相同的仿真激励情况下,本文提出的电路结构和标准流水电路结构的仿真结果一致,验证了本文提出的电路结构的可行性。

4.2 Cadence仿真

    为了进一步验证本文所提出的存储结构在功耗和面积方面的优势,本文基于28 nm标准CMOS工艺,在MOS晶体管级设计出本文提出的基于锁存器存储的电路和对应的传统的基于寄存器翻转的流水数据结构SHA256标准电路。在相同的激励情况下,功耗仿真结果如图10所示。

wdz3-t10.gif

    其中I0波形为传统流水结构的电流波形,I1波形为本文提出的电路结构的电流波形。因为后续的电路结构与前四级一致,所以比较前四级功耗和面积即可。经计算,本文提出的电路结构四级运算的总电流I=1.308 mA,相同激励条件下,正常流水结构电路四级运算的总电流I=1.804 mA。

    比较可知,在相同的激励下,本方案降低功耗约为27.5%。同时从图10可以看出,本方案对应的最大瞬态功耗也远小于基于寄存器翻转的流水结构。在成本方面,本存储方案四级电路共需晶体管488个,而正常流水结构电路四级共需晶体管960个。比较可知,在相同的功能情况下,可近似认为本存储方案优化面积约49.2%。

    因此,通过ModelSim仿真和Cadence仿真验证了本存储方案的可行性和优化效果。本文提出的基于锁存器存储的电路结构优于现有的基于寄存器翻转的SHA256流水电路结构,具有功耗低、面积小的优势。

5 结论

    本文提出了一种新型的适用于全流水结构的SHA256数据迭代方案。根据标准全流水结构SHA256系列电路数据传输特点,只存储每一级产生的A和E,在每4轮迭代之后,所存储的A和E数据被擦除并更新。如此,每级流水只需要采用latch存储A和E,而其他所需数据则通过MUX来选择前1~4级所存储的数据,不涉及寄存器的翻转。存储方案新增硬件主要来自于MUX。但相较于正常流水结构,MUX的结构简单,并且存储电路也比寄存器结构简单,进而减少了硬件开销和动态功耗。基于28 nm标准CMOS工艺的仿真结果显示,采用存储方案实现SHA256的流水结构电路后,对应的功耗优化比例约为27.5%,面积优化比例约为49.2%。

参考文献

[1] 张跃军,廖澴桓,丁代鲁.基于LUT的高速低硬件开销SHA-3算法设计[J].电子技术应用,2017,43(4):43-46.

[2] 陈穗光,葛建华.DRM系统的SHA256算法设计及FPGA实现[J].电子技术应用,2007,33(1):139-141.

[3] 杨晓辉,戴紫彬.一种基于FPGA的可重构密码芯片的设计与实现[J].电子技术应用,2006,32(8):102-105.

[4] 何润民.单向Hash函数SHA-256的研究与改进[J].信息技术,2013(8):22-25.

[5] 王政.一种高效能SHA-256电路设计[D].南京:东南大学,2015.

[6] 汤煜,翁秀玲,王云峰.SHA-2S6哈希运算单元的硬件优化实现[J].中国集成电路,2016,25(5):26-31.

[7] OPRITOIU F,JURJ S L,VLADUTIU M.Technological solutions for throughput improvement of a Secure Hash Algorithm-256 engine[C].International Symposium for Design and Technology in Electronic Packaging.IEEE,2017:159-164.

[8] SURESH V,SATPATHY S,MATHEW S,et al.A 230 mV-950 mV 2.8Tbps/W Unified SHA256/SM3 secure hashing hardware accelerator in 14 nm Tri-Gate CMOS[C].ESSCIRC 2018-IEEE 44th European Solid State Circuits Conference(ESSCIRC).IEEE,2018:98-101.

[9] SUHAILI S B,WATANABE T.Design of high-throughput SHA-256 hash function based on FPGA[C].International Conference on Electrical Engineering and Informatics,2017:1-6.

[10] PADHI M,CHAUDHARI R.An optimized pipelined architecture of SHA-256 hash function[C].International Symposium on Embedded Computing and System Design,2017:1-4.



作者信息:

陈镇江1,张  寅1,张志文1,卢  仕1,刘玖阳2,万美琳1,戴  葵2

(1.湖北大学 物理与电子科学学院,湖北 武汉430060;2.华中科技大学 光学与电子信息学院,湖北 武汉430062)

SHA256 流水 翻转 锁存器 选择器