曾小波,唐忠彪,焦 歆
(1.湖南理工職業(yè)技術(shù)學(xué)院太陽(yáng)能工程系,湖南湘潭 411104;2.湖南省耒陽(yáng)師范學(xué)校,湖南耒陽(yáng) 421800;3.上海滕維信息科技有限公司,上海 200072)
自Shannon發(fā)表了《保密系統(tǒng)的通信理論》,將已有數(shù)千年的密碼技術(shù)推向了科學(xué)的軌道,商用密碼技術(shù)在近10年間得到了廣泛的應(yīng)用及檢測(cè)。2005年SHA-1和MD5被提出碰撞攻擊方法,從此MD5算法和SHA-1算法不再列入安全算法。美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究所(NIST)于2012年公布了新一代雜湊算法Keccak。我國(guó)也由國(guó)家密碼管理局在2010年12月發(fā)布了中國(guó)商用密碼雜湊算法標(biāo)準(zhǔn)SM3。
SM3是一種近似于SHA-256雜湊算法的結(jié)構(gòu),但算法本身更復(fù)雜,比如壓縮函數(shù)的每一輪都使用兩個(gè)消息字。雜湊算法本身就是把任意長(zhǎng)的輸入消息串變化成固定長(zhǎng)的輸出串的一種函數(shù),SM3最終產(chǎn)生的雜湊值為256 bit[1]。在SM2的數(shù)字簽名、驗(yàn)證與公鑰加密算法,及隨機(jī)數(shù)生成等商用密碼應(yīng)用中有廣泛應(yīng)用。
作為首個(gè)國(guó)家公開發(fā)布的雜湊密碼,SM3的硬件實(shí)現(xiàn)及評(píng)估文獻(xiàn)也相對(duì)較少,本文利用Ncverilog探究了SM3的硬件實(shí)現(xiàn)方法,并采用8051軟核為控制器,將SM3作為可移植的IP進(jìn)行了頂層調(diào)試,并給出其相應(yīng)Verilog模型的仿真結(jié)果。文中采用的Verilog行為模型為RTL級(jí)(Register Transfer Level),指的是用寄存器這一級(jí)別的描述方式來(lái)描述電路的數(shù)據(jù)流方式,即可綜合的。模型接口為標(biāo)準(zhǔn)的Wishbone總線及51接口。
SM3算法可對(duì)長(zhǎng)度為l(l<264)bit的消息m進(jìn)行雜化。SM3算法流程可分為4步,如圖1所示[2]。
圖1 SM3算法流程圖
(1)將消息以512 bit的倍數(shù)進(jìn)行填充。若數(shù)據(jù)尺寸為l位,先將比特“1”添加到信息的末尾,再添加k個(gè)“0”,k滿足l+1+k≡448mod512的最小非負(fù)整數(shù)。最后再添加一個(gè)64位比特串,改比特串為尺寸l的二進(jìn)制表示。所以被填充過的數(shù)據(jù)為512的倍數(shù)。
(2)先將填充后的消息m'以進(jìn)行分組m'=B(0),B(1),…,B(n-1),每組長(zhǎng)度為 512 bit,再將各組信息擴(kuò)展成132個(gè)32 bit的字。B(i)為512 bit,故可將B(i)分成 16 個(gè) 32 bit的字 W0,W1,…,W15。
(3)所有B(i)組數(shù)據(jù)處理完畢后,最后分組的輸出V(n)即為最終雜湊值。
由于SM3IP由8051軟核控制,及考慮到消息尺寸較大的情況,故消息填充交由CPU處理。SM3IP功能包括B(i)數(shù)據(jù)的填充、壓縮及數(shù)據(jù)從XRAM的讀寫。IP的控制信號(hào)及信息地址數(shù)據(jù)由51軟核控制,B(i),V(i)和最后結(jié)果V(n)則存放在XRAM中,系統(tǒng)框架如圖2所示。
圖2 片上系統(tǒng)結(jié)構(gòu)圖
此外圖2中還標(biāo)注了IP內(nèi)部結(jié)構(gòu),主要包括核心的控制器及擴(kuò)展模塊、置換模塊、壓縮模塊和循環(huán)表4個(gè)子模塊??刂破鞯闹饕δ転樘峁┳幽K的使能及復(fù)位信號(hào)。子模塊接收到控制信號(hào)后開始從XRAM或其它子模塊讀取數(shù)據(jù),進(jìn)行處理后將處理結(jié)果交還給其控制模塊或直接寫入XRAM[3]。
圖3為系統(tǒng)的工作流程。由于m'尺寸可能較大,將其分組后的B(i)存于XRAM中,IP每次只處理一組B(i),故B(i)地址由CPU輸入給IP。所以硬件流程的第一步為初始化地址寄存器,緊接著第二步使能IP,IP接收到使能信號(hào)后開始從XRAM讀取數(shù)據(jù)。數(shù)據(jù)讀取完畢后IP開始進(jìn)行雜湊運(yùn)算,最后將雜湊結(jié)果寫入XRAM。
圖3 系統(tǒng)工作流程
SM3算法包含了大量的循環(huán)左移操作,兼顧運(yùn)算速度和占用資源是設(shè)計(jì)的關(guān)鍵。方案中根據(jù)不同條件提供了兩種設(shè)計(jì)方案。第一、固定位移實(shí)現(xiàn)。數(shù)據(jù)從XRAM讀出后存入寄存器,由于門級(jí)電路所占資源較少,所以在寄存器讀取數(shù)據(jù)后直接由門級(jí)電路重新排列即可得到移位結(jié)果,并將移位后的數(shù)據(jù)作相應(yīng)的處理。例如,SS2←SS1⊕(A<<<12)中,從XRAM得到A值后,直接用相同位寬的門級(jí)排列得到結(jié)果直接異或SS1,這樣,在讀取A之后的一個(gè)周期內(nèi)就可處理得到SS2[4]。在占用較少資源的情況下對(duì)數(shù)據(jù)進(jìn)行處理。第二種方案為通過查表法實(shí)現(xiàn)。在壓縮過程中需要對(duì)數(shù)據(jù)按照循環(huán)次數(shù)進(jìn)行移位操作,這就大幅增加了不確定性。若每個(gè)數(shù)據(jù)的移位操作都根據(jù)循環(huán)次數(shù)來(lái)選擇移位器,邏輯選擇就會(huì)顯得較為臃腫,而且無(wú)重復(fù)利用性[5]。查表法在增加一個(gè)周期的情況下,即可讀出移位相應(yīng)的結(jié)果,這大幅降低了資源成本,增強(qiáng)了可重復(fù)利用性。
此外,SM3算法還包括了模加運(yùn)算。但模值恰好為232,因此在計(jì)算模加運(yùn)算時(shí)只需定義32位的加法器就好,若有進(jìn)位則直接溢出,即可滿足模加運(yùn)算要求。若定義33位加法器,則每次加法運(yùn)算完成后便要判斷第33位是否為高,若為高則需置為0。采用直接溢出結(jié)構(gòu),省去判斷過程加快運(yùn)算速度。
本IP另一個(gè)突破點(diǎn)是,在硬件設(shè)計(jì)時(shí)兼顧了軟件的智能控制,大幅減小邏輯的占用量,實(shí)現(xiàn)了邏輯功能。首先,消息填充由軟件執(zhí)行。若此步驟由硬件執(zhí)行,雖然在填充時(shí)速度較軟件快很多,但充分考慮到消息長(zhǎng)度的不確定性,應(yīng)由軟件執(zhí)行更加合理。第一個(gè)理由為,數(shù)據(jù)為外部輸入,由軟件控制存放、計(jì)數(shù)更加合理。第二,SM3定義的最大可雜化消息的長(zhǎng)度為(264-1),對(duì)于硬件來(lái)說(shuō),如此長(zhǎng)的消息相當(dāng)于無(wú)窮大,若由硬件存儲(chǔ)將占用量的資源,很不合理。此外,此IP還增加了DMA功能,使其可自主從XRAM讀取、存入數(shù)據(jù),減輕了CPU的工作量。擴(kuò)展模塊中包含了計(jì)數(shù)器,每擴(kuò)展一個(gè)字后計(jì)數(shù)器增加一位,DMA的輸入地址也增加一位,同時(shí)寫入XRAM。為方便軟件處理數(shù)據(jù),此IP中增加了智能選擇,以選擇高位數(shù)據(jù)寫入低位地址或高位地址。
該IP算法用RTL實(shí)現(xiàn)后,在Red-Hat Linux仿真環(huán)境下進(jìn)行了仿真,工具為NC-Verilog,填充信息從SM3國(guó)密算法附錄中得到,系統(tǒng)仿真時(shí)鐘為60 MHz。測(cè)試結(jié)果顯示,完成一組B(i)的雜湊過程,需要耗時(shí)不足1 ms,約60 000個(gè)時(shí)鐘周期。圖4為國(guó)密算法SM3中示例仿真結(jié)果。
圖4 國(guó)密算法SM3仿真結(jié)果
在RTL級(jí)電路仿真完成后,使用SMIC 180μm工藝進(jìn)行了綜合,最終生成了門級(jí)網(wǎng)表電路。綜合是針對(duì)一個(gè)給定的設(shè)計(jì),根據(jù)設(shè)計(jì)應(yīng)實(shí)現(xiàn)的功能與相應(yīng)的約束調(diào)劑,通過EDA工具進(jìn)行優(yōu)化處理,最終獲得結(jié)構(gòu)級(jí)網(wǎng)表。整個(gè)IP的面積如圖5所示,最終cell所用面積為149 434μm2,<160 000μm2,滿足設(shè)計(jì)要求。
圖5 綜合面積報(bào)告
在愈加開放的通信網(wǎng)絡(luò)環(huán)境中,信息面臨的攻擊種類繁多。SM3通過明文到密文的不可逆映射,即只有加密過程,不存在解密過程,確保了消息的來(lái)源真實(shí)有效,保障了收到和發(fā)送消息的一致性[6]。本文討論了片上系統(tǒng)中SM3算法的設(shè)計(jì)、實(shí)現(xiàn)及可移植性。定義了CPU的接口和XRAM數(shù)據(jù)接口,使IP核在商用密碼片上系統(tǒng)中占用資源更少,提高工作效率。目前,SHA-256實(shí)現(xiàn)消息雜湊速度約為 57.1 kbit·s-1,而通過RTL行為級(jí)模型仿真所得到的SM3雜湊速度為250 kbit·s-1,可見我國(guó)所提出的 SM3,在算法硬件實(shí)現(xiàn)上有較強(qiáng)的速度優(yōu)勢(shì),可應(yīng)用于實(shí)際的工程開發(fā)。下一步工作,將選擇合適的FPGA芯片及EDA工具,定義時(shí)序,面積約束條件,完成網(wǎng)表的綜合優(yōu)化,并最終在FPGA平臺(tái)上實(shí)現(xiàn)。
SM3能夠?qū)⒖勺冮L(zhǎng)度的數(shù)字串,通過填充、壓縮、迭代將數(shù)字串轉(zhuǎn)換成較短的固定長(zhǎng)度的輸出數(shù)字串的一種函數(shù)。通過RTL模型仿真結(jié)果及邏輯綜合報(bào)告,可看出該算法在占用較小硬件資源的情況下,較快地實(shí)現(xiàn)了數(shù)據(jù)雜化。確保了在信息交互過程中信息的真實(shí)有效。
[1]Mcevoy R P,Crowe F M,Murphy C C,et al.Optimisation of the SHA -2 family of hash functions on FPGAs[C].IEEE Computer Society Annual Symposium on Emerging VLSITechnologiesand Architectures(ISVLSI'06),2006:317 -322.
[2]國(guó)家密碼管理局.SM3密碼雜湊算法[EB/OL].(2010-12-22)[2014 -06 -12]http://www.oscca.gov.cn/Up-File/201012221418577866.pdf.
[3]Singh R P P,Kumar P,Singh B.Performance analysis of 32-bit array multiplier with a carry save adder and with a carry look ahead adder[J].International Journal of Recent Trends in Engineering,2009,2(6):83 -86.
[4]劉宗斌,馬原,夏魯寧.SM3哈希算法的硬件實(shí)現(xiàn)與研究[J].信息網(wǎng)絡(luò)安全,2011(9):191 -193.
[5]王曉燕,楊先文.基于FPGA的SM3算法優(yōu)化設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2012,38(6):244 -246.
[6]曾旭,高獻(xiàn)偉,路而紅,等.Hash算法 MD5的高速實(shí)現(xiàn)[J].成都信息工程學(xué)院學(xué)報(bào),2009(2):129 -132.