谷會(huì)濤 武宗濤
摘要:SM3算法是國家標(biāo)準(zhǔn)商用密碼雜湊算法,廣泛應(yīng)用于數(shù)字簽名和驗(yàn)證、消息認(rèn)證碼的生成與驗(yàn)證以及隨機(jī)數(shù)的生成等領(lǐng)域。介紹了SM3算法的基本流程,分析了SM3算法高速實(shí)現(xiàn)的3種方法,提出了基于雙重流水同步迭代的SM3算法高速硬件設(shè)計(jì)方法,進(jìn)行了模擬驗(yàn)證和FPGA設(shè)計(jì)實(shí)現(xiàn),給出了算法性能和綜合結(jié)果,結(jié)果表明所提方法具有較高的運(yùn)算性能。
關(guān)鍵詞:雜湊運(yùn)算;SM3;高速設(shè)計(jì);現(xiàn)場可編程門陣列
中圖分類號:TN918.4文獻(xiàn)標(biāo)志碼:A文章編號:1008-1739(2020)02-54-3
0引言
雜湊運(yùn)算是不可逆的密碼運(yùn)算過程,可將任意長度的數(shù)據(jù)信息變換成固定長度的數(shù)據(jù)輸出[1],在商用密碼中廣泛應(yīng)用在數(shù)字簽名和驗(yàn)證、消息認(rèn)證碼的生成與驗(yàn)證以及隨機(jī)數(shù)的生成等方面[2]。美國制定了安全雜湊算法(Secure Hash Algorithm,SHA)等系列標(biāo)準(zhǔn),我國國家密碼管理局2010年公布了中國商用密碼雜湊算法標(biāo)準(zhǔn)SM3算法,該算法在SHA-256基礎(chǔ)上改進(jìn)實(shí)現(xiàn),采用Merkle-Damgard結(jié)構(gòu),消息分組長度為512 bit,摘要值長度為256 bit[2]。
SM3等密碼算法運(yùn)算復(fù)雜,在計(jì)算機(jī)處理器上采用軟件實(shí)現(xiàn)SM3算法,性能難以滿足高速應(yīng)用場景的使用需求。本文分析了SM3算法的實(shí)現(xiàn)原理,提出了一種高速實(shí)現(xiàn)方法,最后基于現(xiàn)場可編程門陣列(Field-Programmable Gate Array,F(xiàn)PGA)進(jìn)行了設(shè)計(jì)實(shí)現(xiàn),驗(yàn)證了該方法的運(yùn)算性能。
1 SM3算法
SM3算法標(biāo)準(zhǔn)約定,對于任意有限長度的消息,SM3算法可生成256 bit的雜湊值。SM3雜湊算法主要包括填充和迭代壓縮2個(gè)過程。
①將整個(gè)消息用1 bit1, bit0和64 bit消息長度進(jìn)行填充,填充完畢的消息長度按512 bit對齊。消息填充后按512 bit進(jìn)行分組,每個(gè)消息分組依次進(jìn)行迭代壓縮運(yùn)算。
2 SM3算法實(shí)現(xiàn)方法
SM3算法計(jì)算過程中,消息分組迭代壓縮過程計(jì)算較為復(fù)雜,實(shí)現(xiàn)邏輯直接影響算法的執(zhí)行效率。為了實(shí)現(xiàn)SM3快速運(yùn)算,研究人員提出了多種FPGA迭代實(shí)現(xiàn)方法。SM3算法中,一個(gè)消息分組一般需要進(jìn)行64輪運(yùn)算,每輪運(yùn)算包括消息擴(kuò)展和壓縮函數(shù)2步運(yùn)算。根據(jù)這2步運(yùn)算的耦合程度和執(zhí)行順序,F(xiàn)PGA迭代實(shí)現(xiàn)方法可以分為順序迭代[3]、循環(huán)展開[4]和流水迭代[5]3種方法[6]。
順序迭代方法如圖2所示,一個(gè)消息分組的輪運(yùn)算串行執(zhí)行,每輪運(yùn)算的消息擴(kuò)展和壓縮函數(shù)運(yùn)算也串行執(zhí)行。順序迭代實(shí)現(xiàn)方法控制簡單、實(shí)現(xiàn)方便。但如果將消息擴(kuò)展和壓縮函數(shù)運(yùn)算在一個(gè)時(shí)鐘周期內(nèi)完成,則導(dǎo)致硬件邏輯關(guān)鍵路徑較長,降低了時(shí)鐘頻率,進(jìn)而影響運(yùn)算速率。如果將消息擴(kuò)展和壓縮函數(shù)運(yùn)算劃分為2個(gè)時(shí)鐘周期執(zhí)行,則一個(gè)消息分組的運(yùn)算需要128個(gè)時(shí)鐘周期左右,運(yùn)算速率較低。
循環(huán)展開方法如圖3所示,將消息分組的2輪消息進(jìn)行擴(kuò)展運(yùn)算,2輪壓縮函數(shù)運(yùn)算循環(huán)展開各放到一個(gè)時(shí)鐘周期執(zhí)行,因此可以將一個(gè)消息分組的運(yùn)算時(shí)間降低到順序迭代方法的50%左右,一個(gè)消息分組的運(yùn)算需要64個(gè)時(shí)鐘周期。如果將更多輪操作循環(huán)展開,運(yùn)算時(shí)間還可以進(jìn)一步壓縮。循環(huán)展開方法速率較高,但需要占用更多的硬件資源。由于一個(gè)時(shí)鐘周期完成的2輪壓縮函數(shù)運(yùn)算存在相關(guān)性,必須串行執(zhí)行,因此單周期內(nèi)需要完成的運(yùn)算更多,限制了整個(gè)算法實(shí)現(xiàn)的工作頻率。
流水迭代方法如圖4所示,將消息擴(kuò)展運(yùn)算和壓縮函數(shù)流水實(shí)現(xiàn),且消息擴(kuò)展運(yùn)算與壓縮函數(shù)并行執(zhí)行。流水迭代方法控制簡單、實(shí)現(xiàn)方便,性能與循環(huán)展開方法相近,占用硬件資源較少。
3雙重流水同步迭代技術(shù)設(shè)計(jì)與實(shí)現(xiàn)
基于流水迭代方法,本文提出了SM3算法雙重流水同步迭代方法。該方法分別設(shè)計(jì)了消息擴(kuò)展運(yùn)算和壓縮函數(shù)運(yùn)算2條流水線,并且第+1輪消息擴(kuò)展運(yùn)算和第輪壓縮函數(shù)運(yùn)算同步執(zhí)行,2條流水線同步運(yùn)算極大提升了數(shù)據(jù)塊運(yùn)算效率。
4 FPGA實(shí)現(xiàn)與性能評估
本文基于雙重流水同步迭代方法,設(shè)計(jì)實(shí)現(xiàn)了SM3算法,采用ModelSim工具進(jìn)行了功能驗(yàn)證,采用標(biāo)準(zhǔn)給出的2組測試向量進(jìn)行輸入,輸出結(jié)果與標(biāo)準(zhǔn)預(yù)期值相同。本文基于Xilinx公司XC7K325T芯片,采用ISE14.7進(jìn)行了綜合實(shí)現(xiàn),綜合結(jié)果如表1所示,本文方法最高綜合頻率222 MHz。
按此工作頻率設(shè)置測試用例,采用ModelSim工具對長消息進(jìn)行運(yùn)算,本文結(jié)構(gòu)性能達(dá)到約1 690 Mbps。表2給出了本文結(jié)構(gòu)與順序迭代方法、循環(huán)展開方法和流水迭代方法性能對比。從表中可以看出,文獻(xiàn)[3-4],算法硬件邏輯復(fù)雜、工作頻率較低,影響了計(jì)算性能。文獻(xiàn)[5]方法主頻和計(jì)算性能較高。不考慮器件選型的差異,相比這些方法,本文提出的方法在工作主頻和計(jì)算性能上最優(yōu)。
5結(jié)束語
本文介紹了SM3算法的基本運(yùn)算步驟,分析了3種典型的SM3算法實(shí)現(xiàn)方法,提出了基于雙重流水同步迭代技術(shù)的SM3算法高速硬件設(shè)計(jì)方法。通過對本文方法進(jìn)行模擬驗(yàn)證和FPGA設(shè)計(jì)實(shí)現(xiàn),得出了算法性能和綜合結(jié)果。結(jié)果表明,本文提出的方法可獲得較高的工作頻率和算法性能。
參考文獻(xiàn)
[1]國家密碼管理局.GM/T 0004-2012 SM3密碼雜湊算法[S].北京:中國標(biāo)準(zhǔn)出版社,2012.
[2]趙睿斌,楊紹亮,王毛路,等.基于商密體系的政務(wù)鏈解決數(shù)據(jù)安全共享交換的研究[J].信息安全與通信保密,2018,(5): 83-88.
[3]王曉燕,楊先文.基于FPGA的SM3算法優(yōu)化設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2012,38(6):244-246.
[4]周威,王博,張衛(wèi)東.SM3算法硬件實(shí)現(xiàn)研究與應(yīng)用[J].電子測量技術(shù),2015,38(12):67-71.
[5]劉宗斌,馬原,荊繼武,等.SM3哈希算法的硬件實(shí)現(xiàn)與研究[J].信息網(wǎng)絡(luò)安全,2011(9):191-193.
[6]丁冬平,高獻(xiàn)偉.SM3算法的FPGA設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2012,31(5):26-28.