文獻標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.183277
中文引用格式: 陳鎮(zhèn)江,,張寅,張志文,,等. 一種基于數(shù)據(jù)存儲的流水SHA256硬件實現(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年公布的一種密碼散列算法,。其主要作用是實現(xiàn)數(shù)據(jù)間的單向映射,,它可以將任意長度的消息映射成固定長度的消息摘要,并且映射過程不可逆[1],。根據(jù)不同的輸出消息摘要的長度,,SHA-2家族分為SHA-224、SHA-256,、SHA-384,、SHA-512四種算法,它們主要用于數(shù)字簽名,、指紋驗證以及網(wǎng)絡(luò)安全協(xié)議等領(lǐng)域,。
現(xiàn)有的高吞吐率SHA256通常采用流水的硬件實現(xiàn)方式,因此,,本文將在現(xiàn)有流水結(jié)構(gòu)的基礎(chǔ)上,,采用基于鎖存器存儲的數(shù)據(jù)流水方式替代傳統(tǒng)的基于寄存器翻轉(zhuǎn)的數(shù)據(jù)流水方式。
1 SHA256算法概述
1.1 SHA256流水實現(xiàn)方式
SHA256能將任意有限長度的輸入消息(長度小于264位)轉(zhuǎn)換為256位的輸出消息摘要,。步驟分為數(shù)據(jù)預(yù)處理,、數(shù)據(jù)擴充和數(shù)據(jù)壓縮三個部分[2]。
1.1.1 數(shù)據(jù)預(yù)處理
1.1.2 數(shù)據(jù)擴展
在式(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)過上述初始賦值后進行如下迭代操作:對于t=0~63:(Kt是一組常量[5])
經(jīng)過64次迭代之后,,最終的散列值計算方法如式(6)所示:
這里,,||表示拼接符。剩下數(shù)據(jù)塊采用與上述相同的方式進行壓縮,,且每一數(shù)據(jù)塊的輸出256值作為下一個數(shù)據(jù)塊的輸入值,,最終經(jīng)過多次運用該算法,可以將任意長度的輸入數(shù)據(jù)壓縮成為256位輸出消息摘要。
1.2 通用的流水電路結(jié)構(gòu)
基于寄存器翻轉(zhuǎn)的SHA256全流水電路結(jié)構(gòu)如圖1所示,,它包括數(shù)據(jù)壓縮部分流水結(jié)構(gòu)和數(shù)據(jù)擴展流水結(jié)構(gòu),。當(dāng)每個時鐘觸發(fā)沿到來時,數(shù)據(jù)擴展部分進入一個新的數(shù)據(jù)塊Mi,,構(gòu)成W0i~W15i,,并存入數(shù)據(jù)擴展部分的第一級寄存器組,其中W0i將輸入至數(shù)據(jù)壓縮部分,,進行第一輪的壓縮,。然后,隨著時鐘觸發(fā)沿的不斷到來,,第i個數(shù)據(jù)塊不斷往前進行流水傳輸,,并逐級進行擴展,以產(chǎn)生W16i~W63i,,同時逐步將W1i~W63i輸入至數(shù)據(jù)壓縮部分進行壓縮,,直至完成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ù)塊的擴展信息,。可以看出,,傳統(tǒng)全流水結(jié)構(gòu)在獲得高吞吐率的同時,,也將消耗掉大量的寄存器和壓縮、擴展算子[5],。
1.3 SHA256流水結(jié)構(gòu)研究現(xiàn)狀
目前國內(nèi)外文獻對SHA256的流水實現(xiàn)方式提出了很多優(yōu)化方案,。文獻[6]提出了一種四級流水的結(jié)構(gòu),提高了運算速度,,增大了吞吐率,;文獻[7]提出了一種Wallace樹方式互連的CSA組合樹結(jié)構(gòu)來添加多操作數(shù),減少了SHA256電路更新中加法器所導(dǎo)致的延遲,,提高了電路性能,;文獻[8]中提出一種14 nm三柵CMOS工藝實現(xiàn)SHA256安全散列硬件加速器,通過預(yù)先添加消息摘要,,采用多路調(diào)用的方式完成分布式哈希計算,,增大了吞吐率,;文獻[9]中提出了一種基于可重構(gòu)硬件的SHA256電路,在面積和最大頻率方面得到優(yōu)化,,最高吞吐率達到2 027.84 Mb/s,;另外,文獻[10]中基于硬件描述語言實現(xiàn)了SHA256哈希函數(shù)的優(yōu)化流水線結(jié)構(gòu),,對壓縮器和擴展塊進行了修改,,加入進位跳躍加法器提高體系結(jié)構(gòu)的性能,實現(xiàn)SHA256的優(yōu)化,。
雖然上述文獻采用了多種優(yōu)化方案提高SHA256硬件實現(xiàn)電路的效率,,但是大多都是基于寄存器翻轉(zhuǎn)的數(shù)據(jù)流水方式。而對于SHA256流水結(jié)構(gòu)而言,,其硬件實現(xiàn)需要使用大量的寄存器,。雖然基于寄存器翻轉(zhuǎn)的數(shù)據(jù)流水方式實現(xiàn)簡單,但是其動態(tài)翻轉(zhuǎn)功耗較大,。因此,,為了減小功耗,本文提出了一種基于鎖存器存儲的SHA256流水硬件實現(xiàn)電路,。
2 存儲方案
本節(jié)將主要從數(shù)據(jù)壓縮部分介紹本文提出的基于鎖存器存儲的全流水實現(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)對該存儲方案進行介紹,。
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所示,討論存儲方案實現(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輪迭代運算完成后,,得到的數(shù)據(jù)并不往前傳,而是繼續(xù)存儲在第k級對應(yīng)的存儲器中,,以便第k+4輪迭代運算進行調(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ù)進行計算得到,;在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ù)壓縮進入正常流水級,。
在正常流水級中,,數(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ù)擴展部分原理與數(shù)據(jù)壓縮部分原理相似,,同樣采用鎖存器進行存儲,,只不過數(shù)據(jù)存儲的周期略有區(qū)別。通過MUX選擇開關(guān)選擇參與數(shù)據(jù)壓縮計算部分的數(shù)據(jù),,新的擴展數(shù)據(jù)的產(chǎn)生和存儲也通過選擇開關(guān)實現(xiàn),,此處不做贅述。
3 電路設(shè)計
3.1 存儲器
存儲器采用圖5所示的latch結(jié)構(gòu),,通過控制使能信號來實現(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)通斷實現(xiàn)數(shù)據(jù)選擇功能,,選擇數(shù)據(jù)時的使能信號和存儲數(shù)據(jù)時的使能信號保持一致。TG32開關(guān)由四組圖5中用到的8位傳輸門構(gòu)成,,由一組使能信號控制(EN和ENB),。通過EN1、EN2,、EN3,、EN4四組信號進行選擇,選擇數(shù)據(jù)方式如式(13)所示,。
4 性能評估
4.1 ModelSim仿真
使用Verilog硬件描述語言分別實現(xiàn)本文提出的基于鎖存器存儲和傳統(tǒng)基于寄存器翻轉(zhuǎn)的流水電路,,并采用ModelSim進行仿真。在相同的仿真激勵下,,仿真結(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é)果一致,,驗證了本文提出的電路結(jié)構(gòu)的可行性,。
4.2 Cadence仿真
為了進一步驗證本文所提出的存儲結(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)的電流波形,。因為后續(xù)的電路結(jié)構(gòu)與前四級一致,所以比較前四級功耗和面積即可,。經(jīng)計算,,本文提出的電路結(jié)構(gòu)四級運算的總電流I=1.308 mA,,相同激勵條件下,,正常流水結(jié)構(gòu)電路四級運算的總電流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ō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ù)傳輸特點,只存儲每一級產(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)簡單,,進而減少了硬件開銷和動態(tài)功耗,。基于28 nm標(biāo)準(zhǔn)CMOS工藝的仿真結(jié)果顯示,,采用存儲方案實現(xiàn)SHA256的流水結(jié)構(gòu)電路后,,對應(yīng)的功耗優(yōu)化比例約為27.5%,面積優(yōu)化比例約為49.2%,。
參考文獻
[1] 張躍軍,,廖澴桓,丁代魯.基于LUT的高速低硬件開銷SHA-3算法設(shè)計[J].電子技術(shù)應(yīng)用,,2017,,43(4):43-46.
[2] 陳穗光,葛建華.DRM系統(tǒng)的SHA256算法設(shè)計及FPGA實現(xiàn)[J].電子技術(shù)應(yīng)用,,2007,,33(1):139-141.
[3] 楊曉輝,戴紫彬.一種基于FPGA的可重構(gòu)密碼芯片的設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,,2006,,32(8):102-105.
[4] 何潤民.單向Hash函數(shù)SHA-256的研究與改進[J].信息技術(shù),2013(8):22-25.
[5] 王政.一種高效能SHA-256電路設(shè)計[D].南京:東南大學(xué),,2015.
[6] 湯煜,,翁秀玲,王云峰.SHA-2S6哈希運算單元的硬件優(yōu)化實現(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)