基于FPGA的HMAC_SHA1_96算法設計與實(shí)現

發(fā)布時(shí)間:2010-6-28 15:19    發(fā)布者:我芯依舊
關(guān)鍵詞: FPGA , HMAC_SHA1_96 , 算法設計
1 概述

隨著(zhù)信息社會(huì )的發(fā)展,數據交換,網(wǎng)上交易等活動(dòng)日益頻繁,從而網(wǎng)絡(luò )安全成為人們關(guān)注的重要問(wèn)題。隨著(zhù)信息技術(shù)的發(fā)展與應用,信息安全的內涵也在不斷延伸,從最初的信息保密性發(fā)展到信息完整性、可用性、可控性和不可否認性,進(jìn)而又發(fā)展為攻(攻擊)、防(防范)、測(檢測)、控(控制)、管(管理)、評(評估)等多方面的基礎理論和實(shí)施技術(shù)[1]。目前對于安全性有以下三個(gè)指標:身份驗證、數據完整性和機密性。

HMAC_SHA1算法在身份驗證和數據完整性方面可以得到很好的應用,在目前網(wǎng)絡(luò )安全也得到較好的實(shí)現。然而大多數應用通過(guò)軟件實(shí)現,但其安全性很難得到真正的保障,于是研究安全算法的硬件實(shí)現已成為熱點(diǎn)。本文通過(guò)對算法和現場(chǎng)可編程芯片特點(diǎn)的分析,優(yōu)化設計和實(shí)現了硬件系統的HMAC_SHA1_96算法應用方案。

2 SHA1函數

SHA1函數[2,3,5]是由美國國家標準和技術(shù)局和美國國家安全局設計的與DSS一起使用的安全散列算法SHA,并作為安全散列標準(SHS)的聯(lián)邦信息處理標準(FIPS)而公布,SHA1是SHA的修訂版。當輸入長(cháng)度小于2 64bit消息時(shí),輸出160bit的摘要,其算法步驟如下:

步驟一:填充附加位。一般經(jīng)過(guò)填充使報文長(cháng)度512取模余64bit。該步驟通常是需要的,即使報文長(cháng)度已經(jīng)是所希望的長(cháng)度。因此填充長(cháng)度范圍為1到512,最高位為1,其余為0。

步驟二:附加報文長(cháng)度值。即把一個(gè)64bit的報文長(cháng)度數附加在上述報文之后(高字節優(yōu)先),從而達到512bit的倍數。

步驟三:初始化變量?梢允褂160bit的緩存(即160bit寄存器)來(lái)存放該散列函數的初始變量、中間摘要及最終摘要,但首先必須初始化, 給初始變量賦值,即:
A=0x67452301,B=0xefcdab98, C=0x98badcfe,D=0x10325476,E=0xc3d2e1f0

步驟四:處理512bit報文分組。在該步驟中包括四個(gè)循環(huán),每個(gè)循環(huán)有20個(gè)處理步驟,而每個(gè)循環(huán)對 B﹑C﹑D所用的非線(xiàn)性函數不同,并且所用的常數也不同:

對于t=0~19,
ft (B,C,D)=(B∧C )∨((¬B)∧D),
Kt=0x5a827999
對于t=20~39,
ft (B,C,D)=B⊕C ⊕D,
Kt=0x6ed9eba1
對于t=40~59,
ft (B,C,D)=(B∧C )∨(B∧D)∨(C∧D),
Kt=0x8f1bbcdc
對于t=60~79,
ft (B,C,D)=B⊕C ⊕D,
Kt=0xca62c1d6
注:∧表示“與”;∨表示“或”;⊕表示“異或”;¬表示“取反”。

在每一步驟中都將執行如下的算法過(guò)程(圖1)。


歸納為以下形式﹐其中 <<< 表示循環(huán)左移: A’, B’, C’, D’, E’← ((A<<<5) + ft (B,C,D)+Et +Wt +Kt ), A, (B<<<30), C, D 由于我們輸入的是16個(gè)32bit消息,而SHA1運算需要80個(gè)32bit數據,所以存在一個(gè)由512bit 消息生成2560bit數據的轉換過(guò)程(即生成W運算) ,其轉換機制如下:

對于t=0~15, W t=Mt;
對于t=16~79,
Wt=(M t-3⊕Mt-8⊕Mt-14 ⊕Mt-16)<<<1。

步驟五:結果輸出。512bit報文運算完就輸出 160bit的報文摘要。

3HMAC_SHA1_96算法

HMAC_SHA1_96算法[2,3,6] 是基于單向散列函數SHA1和以密鑰為基礎的完整性檢查驗證機制,它是從生成的160bit摘要中選擇從高到低的96bit作為最終輸出。在該算法中主要就是SHA1函數和HMAC算法。它的作用在于生成摘要放在消息后面以驗證消息在傳輸時(shí)是否受到修改或變動(dòng),保證消息的完整性。根據HMAC的定義,本設計的HMAC_SHA1_96算法原理圖如圖2。


圖2算法的幾點(diǎn)說(shuō)明:① _ipad表示補位后的密鑰與ipad 異或的結果,K_opad表示補位后的密鑰與opad異或的結果;② 次SHA1運算包括生成W運算;③ 由SHA1運算輸出的結果是經(jīng)過(guò)加法處理的結果;④ 虛線(xiàn)部分表示圖上忽略的信息分組和相應的SHA1運算部分;⑤ 如果只有512bit消息,則第一輪只需進(jìn)行兩次SAH1運算,就轉到第二輪。圖2又可寫(xiě)成如下的表達式:

SHA1( K XOR opad, SHA1(K XOR ipad, M) )

其中 K是密鑰補位后的新值,即在密鑰后補0使之為512bit;ipad是0×36重復16次的一個(gè)數組;opad是0×5c重復16次的一個(gè)數組;M是消息;XOR表示異或運算;SHA1是安全散列函數。

4 硬件設計

針對以上算法分析和實(shí)現流程特點(diǎn),結合 FPGA芯片的硬件結構,進(jìn)行如下的硬件系統設計和優(yōu)化。

4.1使用RAM結構[4]

在HMAC_SHA1_96算法體系中,有大位數的數據存儲,如果要用寄存器來(lái)實(shí)現,需要大約7000左右的寄存器,占用大量的FPGA芯片資源,這是因為FPGA芯片上,每個(gè)LE(邏輯單元)單元只有一個(gè)寄存器,這樣每個(gè)LE單元上其它硬件資源將會(huì )浪費。然而FPGA芯片上大量的ESB(嵌入式系統塊)資源沒(méi)有充分利用,而ESB可以用來(lái)實(shí)現各種類(lèi)型的存儲模塊,如RAM、ROM、FIFO和CAM等,在這種情況下,可以采用ESB實(shí)現RAM來(lái)代替寄存器,從而節省LE硬件資源,并且RAM存儲數據,控制起來(lái)比寄存器方便很多。

4.2 重復利用相同模塊

正如前面算法所述,SHA1算法是由80次運算組成的,而每次運算的結構又是一樣的,如果采用水線(xiàn)形式的運算模式,利用80個(gè)同樣的模塊,會(huì )占用很多的硬件資源,不符合優(yōu)化設計的要求,因此可以先優(yōu)化設計出一個(gè)模塊,再對該模塊復用80 次,每一次運算的結果需存入寄存器,以便送入下一次運算,這樣可極大地優(yōu)化利用FPGA硬件資源。

4.3 模塊劃分

HMAC_SHA1_96算法體系的硬件實(shí)現,必會(huì )存在與外圍電路的數據握手傳輸。由于外圍電路(8255或CPU)的工作時(shí)鐘頻率與所設計的芯片工作時(shí)鐘頻率不一樣,要讓設計芯片與外圍電路協(xié)調工作,就必須專(zhuān)門(mén)設計輸入輸出接口電路,再設計出核心處理模塊,從而不受外界電路工作環(huán)境影響。由此,可以將本設計分為三個(gè)部分:輸入模塊、算法實(shí)現模塊和輸出模塊。

4.3.1 輸入模塊

由于輸入模塊會(huì )跟外圍電路(如8255)連接進(jìn)行信號或數據傳輸,根據握手信號ACK和OBF,每次輸入8bit數據寫(xiě)到64×8bit的RAM,需要64 次,而外圍電路什么時(shí)候輸入數據由內部信號sha_end控制,該模塊的輸出一次為32bit,所以相當于一次讀4×8bit數據。

4.3.2 算法實(shí)現模塊

該模塊主要進(jìn)行HAMC_SHA運算,輸出160bit摘要,其數據處理流程圖見(jiàn)圖3(圖中 M_RAM用來(lái)存儲消息),其中又可以分為以下幾個(gè)主要部分:


① 密鑰輸入處理部分。處理密鑰時(shí)需要先對其進(jìn)行異或運算,然后把其寫(xiě)入兩個(gè)32×16bit的 RAM,假設分別為I_RAM和O_RAM。I_RAM里數據在第一輪SHA1算法首先運算,而O_RAM 里的數據要到第二輪才開(kāi)始運算。

② 生成W處理部分。 由于SHA1函數中要進(jìn)行80次運算,每次運算采用不同的32bit W值,而輸入的只有16個(gè)32bit數據,于是該算法采用四個(gè)不同的W值進(jìn)行異或運算生成新的W值。這四個(gè)W值是從80×32bit的W_RAM讀出的,而生成新的 W值再依次寫(xiě)入該RAM中沒(méi)有使用的位置。

③ SHA1運算部分。是設計的核心部分,需要完成80次運算,每次從32×80bit RAM讀出一個(gè)32bit W值,最終生成160bit摘要。

④ 摘要處理部分。主要對每一次SHA1運算后生成的摘要與本次的初始密鑰進(jìn)行加法運算,作為下次SHA1運算的初始密鑰,或者作為最終輸出摘要,或者作為下一輪SHA1運算的消息輸入。

⑤ 摘要補位部分[6] 。對第一輪生成的160bit摘要進(jìn)行補位,方法為:[160]~[190] 0[191] 1 [192]~[479] 0 [480]~[511]=1010100000,將此值寫(xiě)入一個(gè)16×32bit的FILL_RAM。

4.3.3 輸出模塊

同輸入模塊一樣,由于同外圍電路進(jìn)行信號或數據傳輸,根據握手信號STB和IBF,每次輸出8bit數據到外圍電路,但該部分主要是一個(gè)8×12bit RAM,可以一次寫(xiě)入96bit數據。

4.4 硬件系統總體結構

在數據輸出端加鎖存器是為了保證輸出數據被外圍電路采樣之前始終有效,從而達到本設計與外圍電路協(xié)調工作的目的。結構圖如圖4。


5 FPGA實(shí)現

我們知道,FPGA芯片內部結構是由邏輯陣列塊(LAB)、嵌入式系統塊(ESB)、快速通道互聯(lián)和輸入輸出單元(IOE)組成。LAB是由10個(gè)LE、LE 間關(guān)聯(lián)的進(jìn)位鏈﹑級連鏈﹑LAB控制信號和LAB局部互連構成,可以實(shí)現快速運算通道,特別適合本設計算術(shù)運算單元的硬件實(shí)現[4]。ESB如前所說(shuō),可以用來(lái)實(shí)現不同的存儲模塊,特別適合于大位數的數據存儲?焖偻ǖ朗怯脕(lái)實(shí)現LE之間,ESB 與I/O之間的快速互連,并且具有高扇出能力,它是一系列縱橫交錯的連續式分布通道,能夠得到高性能和快速的信號傳輸,提高本設計運算效率和信號的穩定性。I/O單元由一個(gè)雙向緩沖器和一個(gè)寄存器組成,含有可編程延時(shí),可確保零保持時(shí)間或最小的時(shí)鐘到輸出時(shí)間,減少設計數據輸出的毛刺現象。另外FPGA可以重復使用,以方便修改代碼或參數時(shí)再重新配置FPGA。

本設計采用Altera的APEX20KE160EQC240_1X 芯片實(shí)現,其功能模塊及PC接口原理圖見(jiàn)圖5。


圖中FPGA編程器采用QuartusⅡ2.0軟件, HMAC_SHA1_96應用環(huán)境設置主要配置軟件控制HMAC_SHA1_96的運行機制,PCI控制器用來(lái)控制FPGA芯片與PCI BUS的通訊。先通過(guò)QuartusⅡ2.0軟件對代碼布局布線(xiàn)生成pof文件或sof文件, pof文件可直接用來(lái)配置FPGA,但每次使用時(shí)必須重新配置;而sof文件可以先存入EEPROM,再由 EEPROM對FPGA配置,每次上電前由EEPROM配置,這樣可以直接應用于信息安全硬件系統中。
本文地址:http://selenalain.com/thread-13860-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页