文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.183277
中文引用格式: 陳鎮(zhèn)江,張寅,張志文,等. 一種基于數(shù)據(jù)存儲的流水SHA256硬件實(shí)現(xiàn)電路[J].電子技術(shù)應(yīng)用,2019,45(7):44-49.
英文引用格式: Chen Zhenjiang,Zhang Yin,Zhang Zhiwen,et al. A hardware implementation circuit of pipelined SHA256 based on data storage[J]. Application of Electronic Technique,2019,45(7):44-49.
0 引言
SHA-2(Security Hash Algorithm-2)安全散列算法是由美國國家安全局(NSA)和美國國家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)在2002年公布的一種密碼散列算法。其主要作用是實(shí)現(xiàn)數(shù)據(jù)間的單向映射,它可以將任意長度的消息映射成固定長度的消息摘要,并且映射過程不可逆[1]。根據(jù)不同的輸出消息摘要的長度,SHA-2家族分為SHA-224、SHA-256、SHA-384、SHA-512四種算法,它們主要用于數(shù)字簽名、指紋驗(yàn)證以及網(wǎng)絡(luò)安全協(xié)議等領(lǐng)域。
現(xiàn)有的高吞吐率SHA256通常采用流水的硬件實(shí)現(xiàn)方式,因此,本文將在現(xiàn)有流水結(jié)構(gòu)的基礎(chǔ)上,采用基于鎖存器存儲的數(shù)據(jù)流水方式替代傳統(tǒng)的基于寄存器翻轉(zhuǎn)的數(shù)據(jù)流水方式。
1 SHA256算法概述
1.1 SHA256流水實(shí)現(xiàn)方式
SHA256能將任意有限長度的輸入消息(長度小于264位)轉(zhuǎn)換為256位的輸出消息摘要。步驟分為數(shù)據(jù)預(yù)處理、數(shù)據(jù)擴(kuò)充和數(shù)據(jù)壓縮三個部分[2]。
1.1.1 數(shù)據(jù)預(yù)處理
1.1.2 數(shù)據(jù)擴(kuò)展
在式(3)中,算子為按位異或,算子為按位與,算子為按位取反,算子SHRn為右移n位,ROTRn為循環(huán)右移n位。
1.1.3 數(shù)據(jù)壓縮
現(xiàn)假設(shè)8個迭代變量分別為A、B、C、D、E、F、G、H。首先按照式(4)規(guī)定的算法初始化8個變量,其中Hj-1為第j-1個數(shù)據(jù)塊(Mj)迭代后輸出哈希值,初始值由式(1)給出。
經(jīng)過上述初始賦值后進(jìn)行如下迭代操作:對于t=0~63:(Kt是一組常量[5])
經(jīng)過64次迭代之后,最終的散列值計算方法如式(6)所示:
這里,||表示拼接符。剩下數(shù)據(jù)塊采用與上述相同的方式進(jìn)行壓縮,且每一數(shù)據(jù)塊的輸出256值作為下一個數(shù)據(jù)塊的輸入值,最終經(jīng)過多次運(yùn)用該算法,可以將任意長度的輸入數(shù)據(jù)壓縮成為256位輸出消息摘要。
1.2 通用的流水電路結(jié)構(gòu)
基于寄存器翻轉(zhuǎn)的SHA256全流水電路結(jié)構(gòu)如圖1所示,它包括數(shù)據(jù)壓縮部分流水結(jié)構(gòu)和數(shù)據(jù)擴(kuò)展流水結(jié)構(gòu)。當(dāng)每個時鐘觸發(fā)沿到來時,數(shù)據(jù)擴(kuò)展部分進(jìn)入一個新的數(shù)據(jù)塊Mi,構(gòu)成W0i~W15i,并存入數(shù)據(jù)擴(kuò)展部分的第一級寄存器組,其中W0i將輸入至數(shù)據(jù)壓縮部分,進(jìn)行第一輪的壓縮。然后,隨著時鐘觸發(fā)沿的不斷到來,第i個數(shù)據(jù)塊不斷往前進(jìn)行流水傳輸,并逐級進(jìn)行擴(kuò)展,以產(chǎn)生W16i~W63i,同時逐步將W1i~W63i輸入至數(shù)據(jù)壓縮部分進(jìn)行壓縮,直至完成64輪壓縮,得到最終的A63i~H63i,使第i個數(shù)據(jù)塊Mi處理完成。此時,與Mi相關(guān)的信息將全部移出流水結(jié)構(gòu),流水結(jié)構(gòu)正在處理的將是Mi1~Mi64的數(shù)據(jù)塊。
在上述結(jié)構(gòu)中,采用64級A-H寄存器暫存64個輸入數(shù)據(jù)塊的壓縮信息,同時采用64級Wt寄存器暫存64個輸入數(shù)據(jù)塊的擴(kuò)展信息??梢钥闯?,傳統(tǒng)全流水結(jié)構(gòu)在獲得高吞吐率的同時,也將消耗掉大量的寄存器和壓縮、擴(kuò)展算子[5]。
1.3 SHA256流水結(jié)構(gòu)研究現(xiàn)狀
目前國內(nèi)外文獻(xiàn)對SHA256的流水實(shí)現(xiàn)方式提出了很多優(yōu)化方案。文獻(xiàn)[6]提出了一種四級流水的結(jié)構(gòu),提高了運(yùn)算速度,增大了吞吐率;文獻(xiàn)[7]提出了一種Wallace樹方式互連的CSA組合樹結(jié)構(gòu)來添加多操作數(shù),減少了SHA256電路更新中加法器所導(dǎo)致的延遲,提高了電路性能;文獻(xiàn)[8]中提出一種14 nm三柵CMOS工藝實(shí)現(xiàn)SHA256安全散列硬件加速器,通過預(yù)先添加消息摘要,采用多路調(diào)用的方式完成分布式哈希計算,增大了吞吐率;文獻(xiàn)[9]中提出了一種基于可重構(gòu)硬件的SHA256電路,在面積和最大頻率方面得到優(yōu)化,最高吞吐率達(dá)到2 027.84 Mb/s;另外,文獻(xiàn)[10]中基于硬件描述語言實(shí)現(xiàn)了SHA256哈希函數(shù)的優(yōu)化流水線結(jié)構(gòu),對壓縮器和擴(kuò)展塊進(jìn)行了修改,加入進(jìn)位跳躍加法器提高體系結(jié)構(gòu)的性能,實(shí)現(xiàn)SHA256的優(yōu)化。
雖然上述文獻(xiàn)采用了多種優(yōu)化方案提高SHA256硬件實(shí)現(xiàn)電路的效率,但是大多都是基于寄存器翻轉(zhuǎn)的數(shù)據(jù)流水方式。而對于SHA256流水結(jié)構(gòu)而言,其硬件實(shí)現(xiàn)需要使用大量的寄存器。雖然基于寄存器翻轉(zhuǎn)的數(shù)據(jù)流水方式實(shí)現(xiàn)簡單,但是其動態(tài)翻轉(zhuǎn)功耗較大。因此,為了減小功耗,本文提出了一種基于鎖存器存儲的SHA256流水硬件實(shí)現(xiàn)電路。
2 存儲方案
本節(jié)將主要從數(shù)據(jù)壓縮部分介紹本文提出的基于鎖存器存儲的全流水實(shí)現(xiàn)方式。
采用鎖存器存儲每一輪迭代新產(chǎn)生的A和E,再通過選擇存儲器中已存的前4輪的A和E數(shù)據(jù)去計算得到新一輪的A和E。但在輸入級計算A2、A3、A4和E2、E3、E4時,會存在缺少前輪計算數(shù)據(jù)的情況。因此,本節(jié)將分別從通用級存儲結(jié)構(gòu)和輸入級(A0~A4,E0~E4)存儲結(jié)構(gòu)對該存儲方案進(jìn)行介紹。
2.1 通用級存儲結(jié)構(gòu)
以64級標(biāo)準(zhǔn)流水電路結(jié)構(gòu)為例,關(guān)注前五輪Round1~Round5新產(chǎn)生的A和E,具體算法如式(7)~式(11)所示:
A1和E1由Round1產(chǎn)生,但在Round2~Round5中都被使用,因此,A1和E1并不需要逐級往前傳遞,而是可以采用存儲器存儲起來,當(dāng)Round2~Round5的迭代需要使用該數(shù)據(jù)時,直接在存儲器中讀取該數(shù)據(jù)即可。當(dāng)4個時鐘周期過后,A1和E1生命周期結(jié)束,在后續(xù)迭代過程中不再被使用,此時存儲在存儲器中的A1和E1可以被擦除并更新。
更普遍地,寫出每級的A~H:
其中k意味著第k級存儲器,i為第i個輸入數(shù)據(jù)。如圖2所示,討論存儲方案實(shí)現(xiàn)的通用情況。
對于第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輪新產(chǎn)生的數(shù)據(jù),Ak_i、Ak_i+1、Ak_i+2和Ek_i、Ek_i+1、Ek_i+2為存儲在存儲器中的前3輪產(chǎn)生的數(shù)據(jù)。
對于第i個輸入數(shù)據(jù),在k輪迭代運(yùn)算完成后,得到的數(shù)據(jù)并不往前傳,而是繼續(xù)存儲在第k級對應(yīng)的存儲器中,以便第k+4輪迭代運(yùn)算進(jìn)行調(diào)用。為了得到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:
2.2 輸入級存儲結(jié)構(gòu)
對于輸入級,即A0~A4和E0~E4,在本存儲方案中,由于新數(shù)據(jù)的產(chǎn)生需要用到前三級存儲器中的數(shù)據(jù),根據(jù)式(7)~式(11),A1和E1可以完全由外部輸入數(shù)據(jù)計算得到,但A2、A3、A4和E2、E3、E4的產(chǎn)生仍需要用到輸入的A0和E0。因此,引入三級輸入緩沖存儲器存儲相應(yīng)的輸入數(shù)據(jù),如圖3所示。
每組輸入緩沖存儲器為32位,共12組,其中HA3-1_i-3、HE3-1_i-3用于存儲第i-3個輸入數(shù)據(jù)的A和E,HA2-1_i-2、HA2-2_i-2用于存儲第i-2個輸入數(shù)據(jù)的A和B,HE2-1_i-2、HE2-2_i-2用于存儲第i-2個輸入數(shù)據(jù)的E和F,緩沖存儲器中的數(shù)據(jù)仍采用逐級傳遞的方式。
引入上述緩沖存儲器后,在Round1~Round4,A2、A3、A4和E2、E3、E4的產(chǎn)生都可以通過調(diào)用緩沖存儲器中的數(shù)據(jù)進(jìn)行計算得到;在Round5,A5和E5由A1、A2、A3、A4和E1、E2、E3、E4計算得到,且計算形式與式(13)一致。由此,輸入級存儲結(jié)構(gòu)和通用級存儲結(jié)構(gòu)就構(gòu)成了完整的數(shù)據(jù)壓縮存儲結(jié)構(gòu)。
2.3 完整數(shù)據(jù)壓縮存儲結(jié)構(gòu)
完整數(shù)據(jù)壓縮存儲結(jié)構(gòu)如圖4所示。對于輸入級,在時鐘觸發(fā)沿,數(shù)據(jù)輸入首先存儲在第1級存儲器(Latch1_AE)中,在數(shù)據(jù)逐級向緩沖器傳遞的同時產(chǎn)生新的數(shù)據(jù)。輸入級數(shù)據(jù)的產(chǎn)生方式如下:輸入端MUX選擇輸入的數(shù)據(jù),經(jīng)過壓縮算子計算模塊計算的輸出值順序存儲在存儲器中。經(jīng)過四個周期后,A0、E0的生命周期結(jié)束,存儲器對應(yīng)位置的值被擦除并更新為A0_i+4和E0_i+4,同時,數(shù)據(jù)壓縮進(jìn)入正常流水級。
在正常流水級中,數(shù)據(jù)壓縮方式與輸入級一致,通過8個MUX選擇輸入數(shù)據(jù),經(jīng)過壓縮算子計算模塊后將輸出值順序存儲在存儲器中,在四個周期后,存儲器中的數(shù)據(jù)被重新更新。經(jīng)過64輪迭代之后,散列值的計算方式如式(14)所示:
其中DMj-1為Mj數(shù)據(jù)塊迭代后輸出哈希值,DMj為第Mj-1數(shù)據(jù)塊迭代后輸出哈希值,m、n、p、q表示當(dāng)前時刻存儲在存儲器中第m、n、p、q組的數(shù)據(jù)。
另外,數(shù)據(jù)擴(kuò)展部分原理與數(shù)據(jù)壓縮部分原理相似,同樣采用鎖存器進(jìn)行存儲,只不過數(shù)據(jù)存儲的周期略有區(qū)別。通過MUX選擇開關(guān)選擇參與數(shù)據(jù)壓縮計算部分的數(shù)據(jù),新的擴(kuò)展數(shù)據(jù)的產(chǎn)生和存儲也通過選擇開關(guān)實(shí)現(xiàn),此處不做贅述。
3 電路設(shè)計
3.1 存儲器
存儲器采用圖5所示的latch結(jié)構(gòu),通過控制使能信號來實(shí)現(xiàn)存儲功能。每組存儲單元大小為32位,采用4組32位latch分別存儲A和E,通過使能信號(EN0、EN1、EN2、EN3)來控制數(shù)據(jù)存儲位置(EN和ENB為一對反向信號)。
3.2 使能信號產(chǎn)生電路
控制存儲器存儲和開關(guān)通斷的使能信號產(chǎn)生電路如圖6所示。電路由計數(shù)器(Cnt)、二四譯碼器(Dec)和非交疊使能信號電路(N)組成。產(chǎn)生四組占空比為1:3的使能信號,每組信號之間有1/4周期的延時。
3.3 非交疊使能信號產(chǎn)生電路
在數(shù)據(jù)選擇電路(MUX)中需要非交疊的使能信號來控制開關(guān)不會被兩個使能信號同時打開,減少漏電。所采用的非交疊信號產(chǎn)生電路如圖7所示,其中RS觸發(fā)器產(chǎn)生非交疊的信號,與非門用于占空比的調(diào)節(jié),通過調(diào)節(jié)虛線框圖中的反向器個數(shù)n來形成四組非交疊的使能信號。
3.4 選擇開關(guān)電路
選擇開關(guān)由反相器和TG32構(gòu)成,如圖8所示。由四組選擇開關(guān)構(gòu)成一個總的選擇開關(guān),分別選擇A和E。通過使能信號控制開關(guān)通斷實(shí)現(xiàn)數(shù)據(jù)選擇功能,選擇數(shù)據(jù)時的使能信號和存儲數(shù)據(jù)時的使能信號保持一致。TG32開關(guān)由四組圖5中用到的8位傳輸門構(gòu)成,由一組使能信號控制(EN和ENB)。通過EN1、EN2、EN3、EN4四組信號進(jìn)行選擇,選擇數(shù)據(jù)方式如式(13)所示。
4 性能評估
4.1 ModelSim仿真
使用Verilog硬件描述語言分別實(shí)現(xiàn)本文提出的基于鎖存器存儲和傳統(tǒng)基于寄存器翻轉(zhuǎn)的流水電路,并采用ModelSim進(jìn)行仿真。在相同的仿真激勵下,仿真結(jié)果如圖9所示。
其中sim為傳統(tǒng)基于寄存器翻轉(zhuǎn)的流水電路波形圖,vsim為本文提出的基于鎖存器存儲的電路波形圖,DM_pre、DM_new分別為輸入值和輸出值,圖中框線內(nèi)的值表示在相同的激勵條件下,傳統(tǒng)基于寄存器翻轉(zhuǎn)的標(biāo)準(zhǔn)流水結(jié)構(gòu)(sim:DM_new)和本文所提出的電路結(jié)構(gòu)(vsim:DM_new)的輸出值。
仿真結(jié)果表明:在相同的仿真激勵情況下,本文提出的電路結(jié)構(gòu)和標(biāo)準(zhǔn)流水電路結(jié)構(gòu)的仿真結(jié)果一致,驗(yàn)證了本文提出的電路結(jié)構(gòu)的可行性。
4.2 Cadence仿真
為了進(jìn)一步驗(yàn)證本文所提出的存儲結(jié)構(gòu)在功耗和面積方面的優(yōu)勢,本文基于28 nm標(biāo)準(zhǔn)CMOS工藝,在MOS晶體管級設(shè)計出本文提出的基于鎖存器存儲的電路和對應(yīng)的傳統(tǒng)的基于寄存器翻轉(zhuǎn)的流水?dāng)?shù)據(jù)結(jié)構(gòu)SHA256標(biāo)準(zhǔn)電路。在相同的激勵情況下,功耗仿真結(jié)果如圖10所示。
其中I0波形為傳統(tǒng)流水結(jié)構(gòu)的電流波形,I1波形為本文提出的電路結(jié)構(gòu)的電流波形。因?yàn)楹罄m(xù)的電路結(jié)構(gòu)與前四級一致,所以比較前四級功耗和面積即可。經(jīng)計算,本文提出的電路結(jié)構(gòu)四級運(yùn)算的總電流I=1.308 mA,相同激勵條件下,正常流水結(jié)構(gòu)電路四級運(yùn)算的總電流I=1.804 mA。
比較可知,在相同的激勵下,本方案降低功耗約為27.5%。同時從圖10可以看出,本方案對應(yīng)的最大瞬態(tài)功耗也遠(yuǎn)小于基于寄存器翻轉(zhuǎn)的流水結(jié)構(gòu)。在成本方面,本存儲方案四級電路共需晶體管488個,而正常流水結(jié)構(gòu)電路四級共需晶體管960個。比較可知,在相同的功能情況下,可近似認(rèn)為本存儲方案優(yōu)化面積約49.2%。
因此,通過ModelSim仿真和Cadence仿真驗(yàn)證了本存儲方案的可行性和優(yōu)化效果。本文提出的基于鎖存器存儲的電路結(jié)構(gòu)優(yōu)于現(xiàn)有的基于寄存器翻轉(zhuǎn)的SHA256流水電路結(jié)構(gòu),具有功耗低、面積小的優(yōu)勢。
5 結(jié)論
本文提出了一種新型的適用于全流水結(jié)構(gòu)的SHA256數(shù)據(jù)迭代方案。根據(jù)標(biāo)準(zhǔn)全流水結(jié)構(gòu)SHA256系列電路數(shù)據(jù)傳輸特點(diǎn),只存儲每一級產(chǎn)生的A和E,在每4輪迭代之后,所存儲的A和E數(shù)據(jù)被擦除并更新。如此,每級流水只需要采用latch存儲A和E,而其他所需數(shù)據(jù)則通過MUX來選擇前1~4級所存儲的數(shù)據(jù),不涉及寄存器的翻轉(zhuǎn)。存儲方案新增硬件主要來自于MUX。但相較于正常流水結(jié)構(gòu),MUX的結(jié)構(gòu)簡單,并且存儲電路也比寄存器結(jié)構(gòu)簡單,進(jìn)而減少了硬件開銷和動態(tài)功耗?;?8 nm標(biāo)準(zhǔn)CMOS工藝的仿真結(jié)果顯示,采用存儲方案實(shí)現(xiàn)SHA256的流水結(jié)構(gòu)電路后,對應(yīng)的功耗優(yōu)化比例約為27.5%,面積優(yōu)化比例約為49.2%。
參考文獻(xiàn)
[1] 張躍軍,廖澴桓,丁代魯.基于LUT的高速低硬件開銷SHA-3算法設(shè)計[J].電子技術(shù)應(yīng)用,2017,43(4):43-46.
[2] 陳穗光,葛建華.DRM系統(tǒng)的SHA256算法設(shè)計及FPGA實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2007,33(1):139-141.
[3] 楊曉輝,戴紫彬.一種基于FPGA的可重構(gòu)密碼芯片的設(shè)計與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2006,32(8):102-105.
[4] 何潤民.單向Hash函數(shù)SHA-256的研究與改進(jìn)[J].信息技術(shù),2013(8):22-25.
[5] 王政.一種高效能SHA-256電路設(shè)計[D].南京:東南大學(xué),2015.
[6] 湯煜,翁秀玲,王云峰.SHA-2S6哈希運(yùn)算單元的硬件優(yōu)化實(shí)現(xiàn)[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.
作者信息:
陳鎮(zhèn)江1,張 寅1,張志文1,盧 仕1,劉玖陽2,萬美琳1,戴 葵2
(1.湖北大學(xué) 物理與電子科學(xué)學(xué)院,湖北 武漢430060;2.華中科技大學(xué) 光學(xué)與電子信息學(xué)院,湖北 武漢430062)