文獻標(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)功耗也遠小于基于寄存器翻轉(zhuǎn)的流水結(jié)構(gòu)。在成本方面,,本存儲方案四級電路共需晶體管488個,,而正常流水結(jié)構(gòu)電路四級共需晶體管960個。比較可知,,在相同的功能情況下,,可近似認為本存儲方案優(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)功耗?;?8 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)