馮 峰,周清雷,李 斌
(鄭州大學信息工程學院,河南 鄭州 450001)
消息認證碼MAC(Message Authentication Code)是一種使用密鑰對通信消息進行認證的機制,在開放的、通用的網絡上常利用該機制來保證通信消息的機密性、完整性和有效性。基于Hash算法(如MD5、SHA系列、SM3等)的消息認證碼是目前廣泛使用的消息認證碼,即HMAC(keyed-Hash Message Authentication Code),它是美國國家標準與技術研究院NIST(National Institute of Standards and Technology)指定的標準[1,2],且被要求在IPsec協議族和其他如SSL的Internet協議中實現。可以用HMAC認證的消息種類有很多,本文中HMAC-SHA1(Hash-based Message Authentication Code-secure Hash Algorithm 1)針對的應用場景是基于SHA1算法對用戶密碼進行認證,以確認密碼的正確性。正因為HMAC具有較高的安全性,所以也經常被不法分子所利用,以傳播危害公共安全的數據信息,這給信息安全監管和計算機取證工作帶來了很大困難。因此,HMAC口令認證碼的快速口令恢復對信息安全具有很重要的意義。
對于口令的恢復,僅依靠暴力窮舉是不可行的。有研究表明,用戶密碼服從Zipf分布[3],這樣就可以利用“口令猜測算法”和“口令猜測模型”并結合社會工程學等方法[4 - 6]獲得對某一用戶有針對性的信息,從而分析出對應高概率口令的特征并生成字典,最后采用字典+窮舉結合的方法猜出口令。但是,隨著口令長度的增加,口令的驗證速度依然是最亟待解決的問題。口令恢復加速的研究與具體算法具有強依賴性。因此,從計算平臺的角度來看,目前口令恢復加速的研究現狀主要是基于CPU的通用平臺以及基于OpenCL和CUDA架構的GPU平臺。前者破解效率較低,后者有功耗高且因受到訪存限制而影響性能提升的問題。現場可編程門陣列FPGA(Field Programmable Gate Array)目前已廣泛應用在各個領域[7 - 9],利用FPGA硬件并行的優勢并采用邏輯上的流水線工作模式,可使每個時鐘周期能夠完成更多的處理任務且具有相當低的能耗[10,11],再構建多核FPGA硬件平臺則可完成多流水線的并行計算。因此,基于FPGA硬件平臺的口令恢復更具有優勢。
本文實現了基于多核FPGA的高速HMAC-SHA1口令恢復,通過深入分析HMAC-SHA1算法,使用可重構硬件FPGA和流水線技術,以展開結構和引入保留進位加法器CSA(Carry Save Adder)優化SHA1算核,同時實現了全流水線和狀態機模式的HMAC-SHA1算子,最后設計并實現了字典+窮舉模式的口令恢復架構。
SHA是著名的密碼散列算法家族,這些算法具有單向性、抗沖突性等特性,SHA1是其中之一。SHA1能對輸入的消息產生160 bit固定長度的消息摘要。SHA1的內容如下所示:
(1)消息填充與分塊。
在輸入消息的后面加1位1,再向后用0填充,直到總位長對512取模時的結果為448,最后繼續填充64位,用于保存初始輸入消息的長度。填充后的消息位長為512的整數倍,按每512位進行分塊。
(2)單個消息塊的計算過程。
各個消息塊按分塊順序執行本過程。本過程總共4輪,每輪20步。設t為本過程的步數,則0≤t≤79。本過程的計算如式(1)所示:
(1)
其中,參量Hi,i=0,1,…,4在消息塊為首塊時是固定的5個常數,為非首塊時是前一個消息塊的計算結果;參量Kt和ft()分別是輪常數和輪函數,它們在4輪上均不相同;參量Wt是明文分組,設消息塊(512 bit)按每32 bit進行分割后的順序表示為{M0,M1,…,M15},則它的取值如式(2)所示:
(2)
最后在本過程結束時,將求得的Hi與它們在本過程剛開始時的初始值分別相加作為結果輸出。
HMAC-SHA1口令處理算法的過程如下所示:
設pwd為密鑰,salt為鹽值。若pwd的長度大于512 bit則用SHA1處理pwd并將結果作為新的pwd;salt的長度小于448 bit。
(1)對pwd補0至512位,然后與一個512位且每8位重復出現十六進制36的值進行異或得到消息塊Message,此Message和SHA1初始H輸入SHA1進行運算,結果H記為IPAD。
(2)對pwd補0至512位,然后與一個512位且每8位重復出現十六進制5c的值進行異或得到消息塊Message,此Message和SHA1初始H輸入SHA1進行運算,結果H記為OPAD。
(3)對salt進行SHA1規則的消息填充,其中長度部分要算上產生IPAD時Message所占的64 B,即512 bit,填充后得到本次消息塊Message。此Message和IPAD輸入SHA1進行運算,結果H向下繼續傳遞。
(4)對上次的結果H進行SHA1規則的消息填充,其中長度部分要算上產生OPAD時Message所占的64 B,即512 bit,填充后得到本次消息塊Message。此Message和OPAD輸入SHA1進行運算,結果H為RESULT。
HMAC-SHA1口令處理算法的過程[1]如圖1所示。

Figure 1 Process of HMAC-SHA1 password processing algorithm圖1 HMAC-SHA1口令處理算法的過程
由于Hash算法的單向性,HMAC-SHA1口令恢復的主要思路就是不斷嘗試HMAC-SHA1口令認證,直到碰撞出目標口令認證碼所代表的正確密鑰。本文將目標口令認證碼稱為HashValue,HashValue和salt的組合稱為特征串。
HMAC-SHA1口令恢復的過程如下所示:
(1)根據給定的特征串解析出HashValue和salt。
(2)采用字典+窮舉結合的方法來生成試探密鑰。
(3)若試探密鑰已全部枚舉完則就此結束口令恢復,口令恢復失敗,否則繼續。
(4)以試探密鑰和salt進行HMAC-SHA1口令處理,處理結果記為digest。
(5)若digest與HashValue一致,則digest對應的試探密鑰即為正確密鑰,口令恢復成功,否則重新從(2)開始。
HMAC-SHA1口令恢復的過程如圖2所示。

Figure 2 Password recovery process of HMAC-SHA1圖2 HMAC-SHA1口令恢復的過程
至此,本文對HMAC-SHA1口令進行恢復的相關算法已介紹完畢。由前述算法分析可知,對HMAC-SHA1口令進行恢復的主要運算量在于SHA1算核的運算,在具體實現中,SHA1算核的運算速度將成為整個HMAC-SHA1口令恢復速度的瓶頸。因為SHA1算核需要經歷80步運算,每一步運算中包含與、或、異或、移位等子運算,站在FPGA硬件設計的角度,可以針對這些步驟、子運算等結合時鐘周期因素產生許多設計思路,但是不同的思路將最終得到不同的SHA1計算速度。比如,SHA1的串行實現設計難度小,但是最終工作的時鐘頻率卻很低,這無疑成為了速度瓶頸。
為了后續描述方便,本文將“對單個消息塊進行SHA1運算”稱為“一次SHA1”。由于整個HMAC-SHA1口令處理過程中只包含4個消息塊,因此,每進行一次HMAC-SHA1口令處理實際需要進行4次SHA1。
(1)流水線。
對于FPGA的設計,用硬連線的方式實現復雜的運算是不可取的。首先,復雜的硬連線會占用大量的資源。其次,復雜的硬連線會加大時鐘延遲進而目標邏輯不能工作在高頻時序,如果時鐘頻率降低,則吞吐量也會降低,對應的運算速度也隨之降低,強行設置較高的時鐘頻率將會導致布線失敗。最后,硬連線不可緩存數據,需要通過寄存器進行緩存,且寄存器的讀寫需要占用一個時鐘周期。因此,需在此基礎上考慮SHA1的實現。
根據一次SHA1運算的過程可知,一次SHA1運算需要80步,每一步的輸入、輸出僅與相鄰的步具有依賴關系,因此可將SHA1算法通過流水線技術實現為并行模式,從而降低時間復雜度。在本文實現中,為了算法整體的銜接所加入的輸入緩存和輸出緩存各占用一個時鐘周期,因此,本文對一次SHA1的實現為82級流水線模式,本文后續將該實現稱為流水線SHA1算核。FPGA中的流水線是以空間、可編程邏輯資源來換取運算速度的技術,流水線SHA1算核在滿負荷工作時,每一個時鐘周期都可得出一次SHA1運算的結果。
由前述算法分析可知,一次SHA1運算中的Wt參量在80步中各不相同且需要由之前已有的Wt計算得出。因此,Wt的計算和流水線傳遞是流水線SHA1算核的一個較大部分,以下是對Wt在具體實現中的邏輯描述,包括了緩存、計算和傳遞3個方面:
①緩存。
Wt的緩存需要依靠比較多的寄存器。在流水線SHA1中,不僅要求能夠提供每一步運算所需的Wt,還要保證新的Wt能夠同時被算出,而需要計算得到的Wt總共是64個,實際上在流水線SHA1中,輸入緩存時鐘時就可以開始Wt的計算了。因此,流水線SHA1的前63步在提供當前步驟Wt的同時還在計算后續的Wt,至于最后17步則只用輸出已經算好的Wt即可。這樣來看,首先需要一個長度為64的寄存器數組來保存通過計算得到的Wt值;然后需要80個寄存器數組分別對應SHA1的80步,其中,前64個寄存器數組的長度均是16,后16個寄存器數組的長度從16開始依次遞減。
②計算。
流水線SHA1對Wt計算最大的優勢是高度的并行性。在某一時鐘周期內,前述緩存方式能夠同時對應82個獨立的SHA1運算,邏輯上的每一步都有對應的寄存器數組配合完成Wt的計算。例如流水線SHA1的第63步中,進行第80個Wt的計算,這將通過存儲了該Wt所需前16個值的寄存器數組來輔助完成,其余步驟下均是如此。
③傳遞。
流水線SHA1對Wt的傳遞是為了在每一步中順利輸出該步驟所需的Wt值。具體做法是80個對應每一步的寄存器數組之間進行錯位賦值,即舍棄數組中首個寄存器內的值,并將后續寄存器內的值依次傳遞到下個數組編號減1的寄存器中去,最后把新計算得到的Wt值追加到下個數組的最后一個寄存器。這些在寄存器數組間的賦值同樣是完全并行的。
Wt計算和傳遞的邏輯如圖3所示。

Figure 3 Logical sketch of calculation and transfer of Wt圖3 Wt計算和傳遞的邏輯示意
在流水線SHA1算核中,對Wt的維護是隊列式緩存邏輯。從邏輯上看,在隊首元素參與運算的同時計算隊尾元素,在隊首元素出隊的同時將新的隊尾元素入隊。流水線模式使得上述邏輯按流水線級數并行,在一個時鐘周期內每一級處理都對應著互不相關的SHA1運算,并隨著時鐘周期以流水線的方式將這種對應關系通過寄存器數組向下傳遞。
(2)展開結構。
通過分析SHA1算法可知,SHA1的每一步運算中,對第1個緩存H0的計算最為復雜。對于FPGA硬件來說,無緩存式運算參與的器件參數越多,則布線的空間距離越大,即運算的關鍵路徑越長,這會使得延遲增大進而拉低最大工作頻率。因此,可通過展開結構的方式做進一步優化。
基于前述流水線的實現方式,本文對緩存H0的計算進行拆分,以優化上述問題。因為輸入緩存的存在使SHA1運算推后了一個時鐘周期,所以計算緩存H0所需的E+Wt+Kt部分可預先計算完成。因此,對緩存H0的計算被分成2個時鐘周期來完成,第1個時鐘周期進行預計算,這樣做使得單次參與緩存H0計算的參數個數減少了。對計算緩存H0的結構展開前后對比,如圖4所示,圖4a為展開前,圖4b為展開后。

Figure 4 Comparison of calculation structure of H0 before and after expansion 圖4 對計算緩存H0的結構展開前后對比
(3)使用保留進位加法器。
在對計算緩存H0進行實現時,本文對其中的加法運算進行了優化。FPGA編程面向的是底層硬件,因此FPGA適合進行位運算,加法運算的延遲要比位運算高。保留進位加法器CSA能夠通過增加位運算來減少加法運算,從而降低計算延遲,保證流水線的吞吐率[12]。CSA運算如下所示:

其中,S(a,b,c)為和輸出,Ca(a,b,c)為進位輸出,并且a、b、c的二進制位數一致。
前文已指出HMAC-SHA1口令處理需要進行4次SHA1。為了描述方便,本文對這4次SHA1進行命名,并根據前文算法描述的邏輯過程排列命名的順序:

其中,ipad_sha1+salt_sha1實際是SHA1對第1次消息輸入進行處理,opad_sha1+hmac_sha1實際是SHA1對第2次消息輸入進行處理。通過分析可知:
ipad_sha1與opad_sha1沒有運算上的依賴順序,兩者可同時進行運算;salt_sha1與opad_sha1沒有運算上的依賴順序,兩者可同時進行運算;其他任何組合都具有運算上的依賴順序,運算順序與上述命名順序相同。
HMAC-SHA1口令處理需要進行的SHA1次數在邏輯上是固定的,但用FPGA進行具體實現時,前述流水線SHA1算核的物理個數是可以進行設計的。本文后續把對HMAC-SHA1口令處理的實現稱為HMAC-SHA1口令處理算子。
對于HMAC-SHA1口令處理本文進行了以下2種實現:
(1)HMAC-SHA1口令處理全流水線算子。
本算子將流水線SHA1算核實例化了4份,即物理空間上存在4份算核電路。在工作邏輯上,本算子采用ipad_sha1與opad_sha1并行工作且兩者與salt_sha1、hmac_sha1按命名順序串行工作的工作邏輯。在算子滿負荷運行時,該工作邏輯在擁有4份算核電路的算子中以全流水線的方式推進。算子實現時,opad_sha1產生的階段結果經由FIFO進行了82級緩存,為的是在邏輯上延遲至hmac_sha1開始。該FIFO通過一個雙端口Block RAM實現的IP核來配置。本算子的工作邏輯如圖5所示。

Figure 5 Full pipeline operator working logic of HMAC-SHA1 password processing 圖5 HMAC-SHA1口令處理全流水線算子工作邏輯
本算子的資源占用主要是4份流水線SHA1算核電路,滿負荷工作時,每82×4個時鐘周期可產生82×4個口令處理結果。
(2)HMAC-SHA1口令處理狀態機算子。
本算子將流水線SHA1算核實例化了一份,即物理空間上存在一份算核電路。在工作邏輯上,本算子采用ipad_sha1、opad_sha1、salt_sha1、hmac_sha1按命名順序串行工作的工作邏輯。在算子滿負荷運行時,該工作邏輯在擁有一份算核電路的算子當中以狀態機流水線的方式推進,狀態機決定算核當前狀態是在進行哪一次SHA1運算且算核以流水線模式工作。算子實現當中,共需要2個FIFO來進行緩存,opad_sha1所需的512 bit消息塊經由第1個FIFO進行了82級緩存,為的是在邏輯上延遲至opad_sha1開始,ipad_sha1和opad_sha1產生的階段結果經由第2個FIFO進行了82級緩存,為的是在邏輯上延遲至salt_sha1和hmac_sha1開始。以上2個FIFO均通過一個雙端口Block RAM實現的IP核來配置。本算子的工作邏輯如圖6所示。

Figure 6 State machine operator working logic of HMAC-SHA1 password processing 圖6 HMAC-SHA1口令處理狀態機算子工作邏輯
本算子的資源占用主要是一份流水線SHA1算核電路,滿負荷工作時,每82×4個時鐘周期可產生82個口令處理結果。
最后,對比2種實現方式。綜合了資源占用和運算速度后,在同等工作頻率下,理論上兩者的總體性能相當,但狀態機方式能夠更好地支持擴展改進,具有更大的實際應用價值,而全流水線方式與算法本身具有強耦合性,不利于擴展改進。HMAC具有很多的應用場景或迭代使用,比如“PBKDF2-HMAC”對HMAC迭代了1 000次,此時全流水線的實現方式將不再適用。
前述工作中,本文實現了能夠高速進行HMAC-SHA1口令處理的算子,這是進行HMAC-SHA1口令恢復的核心工作模塊。圍繞它實現HMAC-SHA1口令恢復,本文設計了如圖7所示的架構,本文將該架構以外的部分稱為“外部”。

Figure 7 Password recovery architecture圖7 口令恢復架構
從圖7中可以看出,頂層模塊封裝了整個架構,口令恢復任務所需的相關數據從外部緩存到接口模塊中的FIFO,然后在內部時鐘頻率下被讀取到解析模塊進行解析處理,解析后的口令恢復任務被分配到對應的口令恢復模塊進行計算,所有的計算結果都將匯總到選擇模塊進行處理,若口令恢復成功,則相關信息再經過接口模塊輸出到外部。其中,口令恢復模塊接到任務后通過口令生成模塊來產生口令,口令經過口令處理模塊計算后,結果交給匹配模塊來進行檢查。以下是對各個模塊的介紹,其中所用到的FIFO均通過一個雙端口Block RAM實現的IP核來配置。
(1)TOP頂層模塊。作用是實例化INTERFACE、ANALYSIS、OPERATOR和SELECT模塊,并依照各模塊的功能正確連通它們的接口。
(2)INTERFACE接口模塊。作用是承擔與外部的交互工作,外部通過頂層TOP模塊連入INTERFACE模塊。外部與TOP模塊內部處在不同的時鐘域,因為TOP模塊內部需要完成計算任務,所以TOP模塊內部時鐘頻率要比外部時鐘頻率高很多。因此,INTERFACE模塊需要通過FIFO來緩存外部傳入的口令恢復配置信息,以此來隔離時鐘域。
(3)ANALYSIS解析模塊。作用是解析口令恢復配置信息并下發口令恢復任務,這些信息包括算例編號、字典規則、特征串等。
(4)OPERATOR口令恢復模塊。本文將該模塊的實例稱為口令恢復算例。該模塊包含ENUM、HMAC-SHA1和MATCH子模塊,作用是依照各子模塊的功能正確連通它們的接口。各子模塊具體如下所示:
①ENUM口令生成模塊。作用是根據本算例的口令恢復任務依照字典規則生成口令。因為口令處理需要經過復雜的計算過程,所以被處理的口令還需要通過FIFO進行緩存,以便與口令處理結果同步對應。
此處對本文中的可窮舉字典規則進行簡要說明。對于一條口令字典規則,它能表示的最大口令長度為32 bit可打印字符位置,一個口令字符位置可以是明文也可以是掩碼,掩碼有4種,分別是數字、小寫字母、大寫字母、標點符號。例如“#1#2#3?d?l?u?s”表示一個7位密碼,其中,#1、#2、#3表示1、2、3這3個明文字符,?d表示數字0~9的掩碼,?l表示小寫字母a~z的掩碼,?u表示大寫字母A~Z的掩碼,?s表示標點符號掩碼。
②HMAC-SHA1口令處理模塊。該模塊就是前文實現的HMAC-SHA1口令處理算子。
③MATCH匹配模塊。作用是檢查口令恢復是否成功。
(5)SELECT選擇模塊。作用是選擇口令恢復成功的算例,并將其口令恢復結果發送給INTERFACE模塊。
在以上架構的實現中,根據板卡上FPGA芯片的資源量和所選內部時鐘頻率,應盡可能多地實例化口令恢復算例并完成綜合以及布線,這樣能最大化單塊FPGA芯片的口令恢復速度。
本文中所謂多核FPGA就是一塊PCIe外設板卡上同時搭載多個獨立的FPGA芯片,該板卡的具體構成以及FPGA芯片型號將在后續實驗部分進行闡述。
對于基于多核FPGA的口令恢復,本文構建了對應的口令恢復系統并采用樹狀結構設計其管理方式。在整套系統中,FPGA板卡的宿主機將擔任口令恢復任務分配管理的重要角色。具體做法是,用戶機統一管理所有計算節點,一臺宿主機及其上所包含的若干前述板卡整體被定義為一個計算節點;單個計算節點上的宿主機管理其上所有可利用算例,這其中的關系是,宿主機包含若干板卡,一塊板卡搭載多個FPGA核,一個FPGA上實例化了多個算例。綜上,整個口令恢復任務通過分配可窮舉字典規則的方式進行逐級下放,使得最終所有算例根據所分得的字典規則能夠并行完成各自的任務,整個系統具有極高的效率。該結構如圖8所示。

Figure 8 Structure of password recovery system based on multi-core FPGA圖8 基于多核FPGA的口令恢復系統結構示意
從圖8中可以看出,該結構能夠通過增加計算節點的數量來動態擴展整個口令恢復任務的算力配置,具有很高的靈活性。
本文實驗涉及的硬件平臺如下所示:
(1)FPGA加速卡。該加速卡集成了4個FPGA芯片,每個芯片的型號均為XILINX公司的XCKU060,板卡通過PCIe接口與上位機通信和上電。圖9所示為該加速卡的簡要構成。

Figure 9 Brief composition of FPGA acceleration card圖9 FPGA加速卡簡要構成示意
(2)對比平臺。CPU,Intel Core i5-8500 @ 3.00 GHz 6核;GPU,NVIDIA GeForce GTX 1080 (8 GB/EVGA)。
輔助軟件有:
(1)Vivado。針對XILINX的FPGA芯片進行開發需要用到Vivado,它是XILINX公司提供給開發者的集成開發環境,能夠在FPGA開發的整個生命周期內提供支持。Vivado不僅功能強大,還能根據所配置的相關策略自動對開發者的FPGA工程進行底層優化。
(2)hashcat。hashcat是一款開源的口令破解軟件,其中包括眾多被優化后的口令恢復算法,且這些口令恢復算法是通過OpenCL實現的,所以hashcat能夠同時在CPU和GPU上進行口令恢復。hashcat因為其強大的口令恢復功能和跨平臺支持而得到了廣泛使用。因此,本文實驗通過hashcat軟件來獲取在CPU和GPU平臺上HMAC-SHA1口令恢復的速度。
本文實驗進行的第1項對比是對SHA1算核實現與優化的各個階段的資源占用與最大工作頻率的對比,結果如表1所示。其中,階段1是僅采用流水線;階段2是采用流水線并展開結構;階段3是采用流水線并展開結構,同時引入保留進位加法器,即最終實現。

Table 1 Resource occupancy and maximum frequency in different stages表1 不同階段的資源占用和最大頻率
從表1中可以看出,在階段3中本文實現的SHA1算核最高工作頻率達到了最大,而3個階段所占用的資源卻相差不大。
本文實驗進行的第2項對比是本文實現且優化后的流水線SHA1算核與其他文獻中SHA1性能的對比,結果如表2所示。

Table 2 Comparison of SHA1 implementation performance in different references表2 不同文獻SHA1實現性能對比
通過對比可知,本文實現且優化后的流水線架構SHA1算核在頻率上達到了480 MHz,吞吐量達到了245.76 Gbps。在吞吐量上,本文的實現是文獻[17]的33倍,比除本文外最高的文獻[10]的高出90 Gbps,性能提升顯著。在此需要說明,流水線SHA1算核僅是HMAC-SHA1口令恢復工程中的核心運算單元,整個工程還包括前文所述的許多模塊,并且最終需要滿載算例。對于FPGA工程來說,工程越復雜則越難提高工作頻率,因此,最終HMAC-SHA1口令恢復工程中的內部時鐘工作頻率為200 MHz。
本文實驗進行的第3項對比是HMAC-SHA1口令處理全流水線算子和狀態機算子在吞吐量和資源占用量上的對比,結果如表3所示。

Table 3 Comparison between full pipeline operator and state machine operator表3 全流水線算子和狀態機算子對比
根據表3可知,單個HMAC-SHA1口令處理全流水線算子的吞吐量和資源占用量均是狀態機算子的4倍左右。因此,每4個HMAC-SHA1口令處理狀態機算子與單個全流水線算子在吞吐量和資源占用量上相當。需要說明的是,當LUT等資源的使用超出85%后,本文實驗所用的XCKU060芯片在200 MHz的時序約束下將無法通過布線。因此,根據實際測試,在本文實驗中的單個FPGA芯片上最多能搭載4個全流水線算子或16個狀態機算子。在滿配全流水線算子后整套系統的資源利用率是LUT消耗194 866(58.75%)、FF消耗505 770(76.24%);在滿配狀態機算子后整套系統的資源利用率是LUT消耗273 620(82.50%)、FF消耗555 630(83.76%)。
本文實驗最后用基于滿載上述規模算子的4核FPGA加速卡與基于hashcat的CPU、GPU平臺對HMAC-SHA1口令恢復速度進行了對比,結果如表4所示。

Table 4 Comparison of speed on different platforms表4 不同平臺上的速度對比
根據表4可知,本文對HMAC-SHA1口令恢復的速度達到了CPU平臺上的72倍,GPU平臺上的2.6倍。這只是單塊板卡的速度對比,而單臺上位機可配置多塊參與口令恢復的板卡,最后若再以集群形式進行口令恢復,則口令恢復的速度也會成倍增長。因此,基于FPGA進行HMAC-SHA1口令恢復還具有橫向可擴展的優點。
本文實現了基于多核FPGA的高速HMAC-SHA1口令恢復。首先,對HMAC-SHA1口令處理的相關算法進行了深入分析。其次,先后實現和優化了SHA1算核,完成了基于全流水線和狀態機的HMAC-SHA1口令處理算子,設計并實現了HMAC-SHA1口令恢復架構。最后,通過實驗測試了本文SHA1算核的性能,測試結果表明,相比于其它文獻,本文SHA1算核的性能要高出很多,緊接著根據基于全流水線和狀態機的算子吞吐量、資源占用量進行了單塊板卡滿配算子的速度測試,在與其他平臺進行對比后得出,本文對HMAC-SHA1口令恢復的速度達到了CPU平臺上的72倍,GPU平臺上的2.6倍,充分利用了FPGA的硬件優勢。