專利名稱:一種硬件快速實現雜湊算法的方法
技術領域:
本發明涉及一種通過硬件設計實現信息加密的方法,特別是涉及一種通過集成電路硬件快速實現雜湊算法(hash函數又稱單向散列函數)的方法。
背景技術:
在信息化高度發達的今天,信息傳輸的高速性和安全性越來越得到人們的重視。信息的安全性既包含了信息的保密性,又包含了信息的完整性和信息能被認證。雜湊函數(hash函數、單向散列函數)能夠對任意長度(<2^64bit)的消息進行運算,產生固定長度的消息摘要作為消息的標識。由于hash函數具有單向性,所以根據hash函數計算結果難以反向推算出原消息,同時如果原消息有微小改動,所計算得出的消息摘要也將有相當大的不同,基于這一特性,hash函數在信息安全的數字簽名等領域占據了重要的一席之地。在利用hash函數對消息進行單向運算的方面,可行的方法有軟件實現和硬件實現兩種。其中軟件實現比較簡單,但速度較慢,效率低,不適應信息傳輸高速性的要求。為了適應數據高速傳輸的要求,人們提出了hash函數硬件化的要求。但是基于hash函數硬件化設計方法的困難,目前國內包含雜湊算法的專用集成電路還是空白。
發明內容
本發明的目的是為設計高速通用型的雜湊算法集成電路處理提供一套設計方法,即提供一種硬件快速實現雜湊算法的方法,在保證硬件高速處理輸入數據流和輸入數據流穩定性的同時盡可能地減少邏輯門數。
為了實現發明目的,所采用的技術方案一種硬件快速實現雜湊算法的方法,按雜湊算法的流水作業操作順序將集成電路的硬件進行如下的部署一、使數據首先經過接口模塊,該接口模塊設置有一個是處理器的控制接口,連接處理器對各個寄存器進行讀寫,另外設置一個數據輸入接口;二、使數據填充和數據的收集和處理在數據處理模塊中完成,該數據處理模塊設置2個數據緩沖器,對與MD5函數,一個緩沖器向處理核輸出數據時,另一個緩沖器收集下一個512位數據塊,對于SHA-1函數,先由二號緩沖器收集滿512位數據,第一輪運算由二號緩沖器由低到高給出數據,同時一號緩沖器收集這些數據并進行移位,第二輪運算開始由一號緩沖器取特定位置的數據進行計算得到輸出到處理核的數據,同時把輸出數據作為一號緩沖器的移位輸入,另外,在該數據處理模塊設置A、B、C、D、E5個寄存器分別代表hash運算中使用的CVR從低到高的五個32位域,在A寄存器與Adder1之間設置一個S2單元,當函數是sha1時其輸出是輸入的循環左移5位的值,否則直接輸出輸入數據,在Adder1與Adder2之間引入S1單元,當函數是sha1是直接輸出輸入數據,否則根據hashcore輸入的S進行循環左移再輸出,設置一個數據選擇器MUX6為Adder2從B和E中選擇一個輸入數據,當函數是md5時選B,當函數是sha1時選E,同時,在該數據處理模塊中設置MUX1、MUX2、MUX3、MUX4、MUX55個數據選擇單元,依次對應所述A、B、C、D、E5個寄存器,并分別為對應的寄存器提供下一時鐘上升沿所需的數據,所述每個數據選擇單元在有寫CVR信號時輸出所要寫的相應數據,在有寫OMR信號時輸出CVR的初始化數據,除此之外輸出各自的上一時鐘沿之后,根據CVR運算所得的數據,當最后的512位數據處理完畢,所述CVR寄存器中的值就是集成電路硬件實現的hash結果,通過所述接口模塊中的處理器的控制接口輸出;三、使數據適應多種處理器的存儲映射模式,設置一個存儲映射轉換模塊,根據所選hash函數以及OMR綜ER寄存器的設置,對寫入HU單元中指定寄存器的值和從CVR中讀出的值進行big-endian與little-endian之間的相互轉換。
本發明采用的技術方案與現有技術或產品相比,具有明顯的優點和積極效果本發明的設計思路是按照算法的操作順序采取流水作業,數據首先經過接口模塊,再到數據預處理模塊,接著進入是處理單元,最后結果通過接口輸出。其接口模塊的設計既考慮了使用的方便性,也考慮了高速數據輸入的方便性。兩個接口一個是處理器的控制接口用于處理器對各個寄存器進行讀寫進而控制的工作,另一個是數據輸入接口,這樣硬件模塊的數據就不需要由外部處理器進行輸入了,一方面減輕了處理器的負擔,另一方面又可以使得數據處理的速度不受處理器的影響。根據hash算法的要求,每一次處理都必須集齊512位數據,所以數據首先進入消息數據緩沖器,集齊512位數據后選擇處理核所需的32位數據送交處理核處理。為了不出現一次處理后要等待集齊下一個512位數據塊,本發明設計在集成電路硬件中采用兩個數據緩沖器,這樣就可以即滿足兩個函數的計算要求,同時又使得數據的收集和數據的處理同時工作,提高速度。本發明利用md5函數與sha1函數運算中的共同點和不同點,設計了兩個函數共用的hashcore處理核,使兩個函數共用了CVR寄存器,Adder1,Adder2等單元,實現了兩函數共用數據處理核的設想。所以,本發明在保證硬件高速處理輸入數據流和輸入數據流穩定性的同時盡可能地減少了邏輯門數,減少了集成電路芯片的面積,實現了發明目的。應用本發明設計的雜湊算法集成電路芯片可以作為一款協處理器芯片使用,也可以作為IP核提供給其它的更大的芯片或者FPGA開發板等使用。
圖1為hashcore設計硬件部署流程圖;圖2為接口模塊與數據處理模塊連接關系示意圖;圖3為接口模塊控制單元框圖;圖4為數據處理單元框圖;圖5為數據填充單元框圖;圖6為數據填充單元狀態轉換圖;圖7為數據壓縮單元框圖;圖8為消息數據緩沖器框圖;圖9為壓縮單元狀態控制器框圖;圖10為壓縮單元狀態轉換圖;圖11為hashcore框圖。
具體實施例方式
下面結合各個附圖,對本發明進一步詳細描述一種硬件快速實現雜湊算法的方法,按雜湊算法的流水作業操作順序將集成電路的硬件進行如下的部署,如圖2所示,一、使數據首先經過接口模塊,該接口模塊設置有一個是處理器的控制接口,連接處理器對各個寄存器進行讀寫,另外設置一個數據輸入接口,本方法實現的硬件電路模塊的工作需要有一個外部32位處理器的控制,為了不占用過多處理器的時間,本方法實現的接口模塊設計了兩個接口,一個處理器的控制接口,用于和外部處理器通信,一個數據輸入接口,用于接受大量處理數據,其中,處理器的控制接口包含一個數據輸入輸出雙向接口、地址總線、異步復位信號、讀寫允許信號、讀寫控制信號以及模塊各狀態位輸出信號(如模塊使能、輸入數據允許、輸入數據請求、Hash不可操作工作標志、模塊忙狀態標志、模塊出錯標志、Hash操作退出標志、操作完成信號),數據輸入接口包含一個32位數據輸入接口、輸入數據時鐘、輸入隊列數據預寫允許信號、數據隊列寫允許信號以及隊列狀態輸出信號(如輸入隊列空、輸入隊列滿、輸入隊列半滿);二、使數據填充和數據的收集和處理在數據處理模塊中完成,該數據處理模塊設置2個數據緩沖器,對與MD5函數,一個緩沖器向處理核輸出數據時,另一個緩沖器收集下一個512位數據塊,對于SHA-1函數,先由二號緩沖器收集滿512位數據,第一輪運算由二號緩沖器由低到高給出數據,同時一號緩沖器收集這些數據并進行移位,第二輪運算開始由一號緩沖器取特定位置的數據進行計算得到輸出到處理核的數據,同時把輸出數據作為一號緩沖器的移位輸入,另外,在該數據處理模塊設置A、B、C、D、E 5個寄存器分別代表hash運算中使用的CVR從低到高的五個32位域,在A寄存器與Adder1之間設置一個S2單元,當函數是sha1時其輸出是輸入的循環左移5位的值,否則直接輸出輸入數據,在Adder1與Adder2之間引入S1單元,當函數是sha1是直接輸出輸入數據,否則根據hashcore輸入的S進行循環左移再輸出,設置一個數據選擇器MUX6為Adder2從B和E中選擇一個輸入數據,當函數是md5時選B,當函數是sha1時選E,同時,在該數據處理模塊中設置MUX1、MUX2、MUX3、MUX4、MUX5 5個數據選擇單元,依次對應所述A、B、C、D、E5個寄存器,并分別為對應的寄存器提供下一時鐘上升沿所需的數據,所述每個數據選擇單元在有寫CVR信號時輸出所要寫的相應數據,在有寫OMR信號時輸出CVR的初始化數據,除此之外輸出各自的上一時鐘沿之后,根據CVR運算所得的數據,當最后的512位數據處理完畢,所述CVR寄存器中的值就是集成電路硬件實現的hash結果,通過所述接口模塊中的處理器的控制接口輸出;三、使數據適應多種處理器的存儲映射模式,設置一個存儲映射轉換模塊,根據所選hash函數以及OMR綜ER寄存器的設置,對寫入HU單元中指定寄存器的值和從CVR中讀出的值進行big-endian與little-endian之間的相互轉換。
在步驟二中所述的A、B、C、D、E5個寄存器設置復位信號,當復位信號置低,CVR立即置0,否則就在時鐘上升沿置為各自對應的所述MUX1、MUX2、MUX3、MUX4、MUX5數據選擇單元的輸出值。
1.接口模塊本方法實現的硬件電路模塊有兩個接口數據輸入接口和控制接口。數據輸入接口直接與輸入隊列相連,由外界輸入數據;控制接口與外部處理器相連,根據處理器給出的地址和讀寫信號讀寫內部各個寄存器。本模塊的數據輸入既可以由數據輸入接口輸入也可以由外部處理器從控制接口輸入到datainreg中,供hash單元處理。接口模塊包括控制單元(HU Control),輸入隊列(input fifo)、32位數據選擇單元(mux32)以及數據轉換單元(d32to64conv)。控制單元管理著處于接口模塊中的各個寄存器(STAT、HCR、ERR、datainreg),控制整個接口數據的輸入與輸出,并將datainreg的數據傳輸到數據選擇單元;輸入隊列從數據輸入接口接受數據,并將數據傳輸到數據選擇單元;數據選擇單元根據控制單元給出的選擇信號對datainreg和輸入隊列的數據進行選擇,實現兩個接口都可以輸入數據的功能;數據轉換單元將連續輸入的兩個32位數據轉換成一個64位數據,作為hash處理模塊的輸入。
1.1接口模塊中的控制單元(HUControl)為實現上述控制單元的功能,設計時在控制單元中引入地址譯碼單元(addrdec)、寄存器單元(HUregs、datainreg)和Husm,如圖3所示。
1.1.1接口模塊中的控制單元中的寄存器單元接口模塊中的寄存器單元有HUregs和datainreg兩個,HUregs中包含了STAT、ERR、HCR寄存器。其中,STAT寄存器中包含了模塊的各種狀態信息,其中有模塊忙狀態信號、模塊出錯信號、模塊不可操作信號、輸入請求信號、模塊使能信號、輸入隊列空、滿、半滿信號。ERR寄存器中包含了模塊具體出錯的信息,如填充出錯、工作時改寫操作寄存器的值、所寫入的hash函數選擇數據不對。HCR寄存器中包含控制模塊運作的信號數據輸入使能、單元使能、單元復位。datainreg是從控制接口接收數據的寄存器,當該寄存器空時,就向HUregs單元給出輸入請求信號,并最終輸出到模塊IRF引腳上,以提示處理器可以對從控制接口輸入數據;當該寄存器滿時,就向hash處理單元發出輸出請求信號,以提示有數據可供處理。
1.1.2接口模塊中的控制單元中的地址譯碼單元(addrdec)地址解析單元對控制接口輸入的地址進行譯碼,輸出各寄存器的選擇信號,具體設計中,模塊規定控制接口讀寫數據的周期為兩個時鐘周期,為了避免數據被重復讀寫兩次,在接口處設置一個mimsb引腳,在addrdec單元中設置了一個AccessReg信號,當有數據讀寫操作時,應將mimsb引腳置低,在時鐘上升沿如果AccessReg=’0’則AccessReg=NOT mimsb否則AccessReg=’0’。如此,AccessReg在數據讀寫的兩個時鐘周期中只有一個周期有效,從而既保證了與工作頻率較低的外部處理器正常通信又避免了多次讀寫數據。
1.1.3接口模塊中的控制單元中的HUsm單元HUsm對模塊實施控制,如模塊使能,數據輸入允許等,同時還給出模塊是否處于忙狀態的標志,以示hash處理是否完成。
1.2接口模塊中的數據輸入隊列(input fifo)為了適應多種與外界的數據傳輸模式,模塊在接口處引入了一個輸入隊列,使得外界可以一次性寫入多組數據供模塊壓縮,從而可以提高整個系統的工作效率。具體實現上,inputfifo可以分為存儲單元和輸入輸出控制單元。inputfifo的存儲單元以雙口RAM為基礎,根據本模塊的需要封裝而成。封裝后,存儲單元提供讀寫時鐘、讀寫地址、讀寫數據以及寫允許等接口供輸入輸出控制單元操作。Inputfifo的輸入輸出控制單元在設計中引入了寫控制器和讀控制器對雙口RAM數據的輸入輸出進行管理,通過內部機制將雙口RAM作為一個循環隊列來使用。寫控制器負責向雙口RAM提供寫數據允許信號和寫數據地址(gray碼)。其輸入時鐘是外部寫數據時鐘,同時還輸入讀控制器輸出的讀地址信號(gray碼)。內設狀態機、計數器、gray碼轉換器等單元。Gray碼轉換器將輸入的讀地址轉換成普通二進制碼;將內部的寫地址轉換成gray碼。狀態機比較RAM的寫地址和讀地址的普通二進制碼,進行狀態轉換并向外界提供隊列的狀態信息(IFF,IFHF,IFE),同時,還控制著計數器的增加允許信號(隊列不滿,增加允許);當增加允許時,加法器作以128為周期的加法運算。讀控制器負責向雙口RAM提供讀數據地址,以及向內部輸出數據輸出允許信號OAF。其輸入時鐘是模塊內部時鐘,同時還輸入寫控制器輸出的寫地址信號(gray碼)。實現上和寫控制器基本相似。
1.3接口模塊中的數據轉換(d32to64conv)32位的輸入數據首先填入數據轉換單元中64位寄存器的高位,接下來的32位數據填入低位,之后根據pad unit單元的輸入請求信號再輸出已填充好的64位數據。與前后單元的通信機制當64位寄存器未滿時,d32to64conv傳遞一個輸入請求信號IRF給輸入隊列,當輸入隊列給出輸出允許信號OAF時,d32to64conv開始讀取數據。當d32to64conv中數據已滿時,輸出輸出允許信號給填充單元。
2.數據處理模塊根據hash算法的規則,設計中將hash處理單元(HU)劃分成狀態控制模塊,填充模塊、數據壓縮模塊三部分,如圖4所示2.1數據處理模塊中的狀態控制模塊整個hash處理單元的狀態控制基本都是基于操作模式寄存器(OMR)來管理數據的壓縮運算的。對OMR的操作,設計中引入OMRReg單元進行管理。該單元負責對OMR寄存器進行讀寫,并把寫入到OMR中的值以及根據該值產生的狀態信息輸出到各個功能模塊中以控制模塊的工作。值得一提的是HFW信號,該信號在pad unit和hashcell中都將用到,在每次對OMR進行寫操作以后,該信號被置高,表示一次hash壓縮開始,此高電平將一直保持到所有此次壓縮所需數據填充完成;完成后,pad unit單元輸出ResetHFW信號,使HFW信號置低,一次數據輸入結束。
OMR包含如下寄存器HU_EH規定在出現錯誤以后HU如何對數據進行處理;HU_DIS位規定了HU的數據接口;
HMTR是一個一位寄存器,規定輸入的hash消息是否是已經填充好了的數據;ER是一個2-bit寄存器,規定在CVR寄存器中的數據和數據流之間的轉換方式;HFR是一個3-bit寄存器,規定hash運算中所使用的hash函數。
2.2數據處理模塊中的數據填充(pad unit)如圖5所示,由數據轉換單元輸出的64位數據首先進入pad unit中的數據緩沖器databuffer,同時對輸入的64位進行高低位置換。由填充規則可知有4種可能的填充數據數據本身(數據不是最后的64位數據塊,或數據本身不需要填充);數據結尾加上一個1后再填0的64位數據塊(最后一個數據塊,或緊跟最后一塊數據塊的附加填充塊);全零數據塊(輸入數據已填充完,但填充所得數據未滿448位);長度數據塊。根據以上填充數據的特性,模塊引入一個數據選擇器selector,由databuffer單元、padder單元、zero單元以及長度計算單元提供被選數據,同時databuffer單元還向padder單元提供被填充數據。此外,引入控制單元來產生數據選擇信號。
在具體的實現上padder對其輸出數據的每一位做3種可能的處理1、如果數據位處于輸入數據長度之內,則該輸出數據位等于輸入數據位。2、如果數據位緊跟輸入數據的最后一位,則該數據位輸出1。3、如果數據位超出輸入數據兩位以上,則該數據位輸出0。其中padder單元填充數據1的位置信息由數據長度寄存器HMLR的低6位提供,當輸出位置等于HMLR低六位所示數時,代表輸入數據已在前一位結束(前提是該數據塊是最后的數據塊),padder單元在此處填充1。如果數據塊不是最后的數據塊,padder也做同樣處理,但接下來的數據選擇器對數據進行選擇時,不會選擇padder的數據輸出,而是選擇databuffer的數據直接輸出。當填充了1的64位數據填入512位空間后,數據未滿448或超過448,接下來的數據全都填零,直到數據總長度是512的整數倍余448。Zero單元就提供此時填充所需要的0數據塊。該數據填充模塊使用了數據塊計數器(DBCR)、長度寄存器(HMLR)、長度填充轉換器(WSBS)、長度比較器(lengthcmp)以及數據填充狀態機(dataflowctrl)五個部件來控制整個填充流程。長度比較器比較DBCR(56位)和HMLR的高56位比較,當前者少1時,輸出數據輸入完畢信號。狀態機根據所輸入數據類型、長度比較器輸出、已填充數據等信號跳轉狀態并輸出相應選擇信號,其中狀態分為Idle,PaddedMess,PassDataBlock,PadDataBlock,AddZeroBlock,AddLengthBlock,TransToIdle等7個狀態,狀態轉換如圖6所示。
狀態分析由于pad unit中引入了databuffer,輸入數據在此會延時一個時鐘周期,但d32to64conv單元的輸出允許信號是于輸入數據同步的,所以在pad unit中要引入一個于databuffer輸出數據同步的數據輸入允許信號IAFDel,以表示databuffer輸出數據的正確性。Idle狀態表示沒有數據輸入或模塊未使能情況下,填充單元所處的狀態。要離開該狀態,需要滿足兩個條件1、必須在OMR中寫入正確的函數值(HashFunc/=“000”并且HFW=‘1’);2、d32to64conv允許輸出。在這兩個條件滿足的情況下,如果輸入的數據不需要填充(OMR中HMTR=1),則下一狀態跳轉到PaddedMess,如果OMR中HMTR=0,則繼續判斷DBCR寄存器和HMLR寄存器,如果DBCR[57..0]=HMLR[63..6]或是HMLR<64,說明接下來的是最后一塊數據塊,填充單元跳轉到PadDataBlock;否則,數據不是最后一塊數據,可直接將其輸出無需填充,所以接下來的狀態跳轉到PassDataBlock。另外,我們還要注意到一種情況如果要對一個空數據塊壓縮,接下來的狀態就應該是數據填充狀態,但此時將不會有d32to64conv的輸出允許信號傳到pad unit單元,所以我們將這種情況單列出來。PassMess狀態是在輸入數據不需要填充時pad unit處于的工作狀態。在該狀態,選擇器選擇databuffer的數據輸出。當OMR再次被執行寫操作時,pad unit狀態轉換到Idle狀態。PassDataBlock狀態表示輸入數據塊不是最后的一塊數據塊,該數據塊可以直接經selector輸出到endian convertor中。如果此時壓縮單元可以接受數據進行處理(ReadyToReceive=‘1’),并且數據已經是倒數第二塊數據塊DBCR=HMLR[63..6]-1(equal=1),則下一狀態將跳轉到PadDataBlock。PadDataBlock狀態表示databuffer中的數據是最后一塊數據塊,此時selector選擇padder的數據輸出。如果此時輸入數據有效(IAFDel=’1’)或是需填充’1’的單元是一個空單元(HMLR[5..0]=0),且此時填充單元不是512位中的第7個64位數據塊(HMLR[8..6]/=”110”),則下一狀態跳轉到AddZeroBlock,否則,如果此時填充單元是512位中的第7個64位數據塊(HMLR[8..6]=”110”),則下一狀態跳轉到AddLengthBlock。AddZeroBlock表示填充‘1’工作已經做完但數據塊還不是512位的第7個64位數據塊的狀態,此時需要用0數據塊來填充,selector選擇zero的數據輸出,直到數據塊還已是512位的第7個64位數據塊,之后跳轉到AddLengthBlock。AddLengthBlock表示pad unit此時對數據填充長度數據塊。Selector選擇WSBS的數據輸出。如果此時壓縮單元可以接受數據進行處理(ReadyToReceive=‘1’),則下一狀態跳轉到TransToIdle狀態。TransToIdle是數據填充已經完成,pad unit由工作狀態跳轉到Idle狀態的一個過度狀態。之所以要有此狀態,要聯系到OMRReg中的HFW信號,該信號為高表示此時HFR的值是有效的,該信號從0到1說明一次數據壓縮運算開始。當一次填充完成以后,對應于原先的HFR的待壓縮數據已經全部輸入到數據壓縮單元,所以設計中引入一個HFWReset信號,該信號在此時置高將HFW置零。如果沒有這一個設置,狀態跳轉到Idle后又會由于HFW=1而錯誤跳出Idle狀態。
數據由數據選擇器輸出后,交由endian單元對其存儲映射模式進行轉換。轉換過程中,根據不同的hash函數進行不同的轉換處理。如果所選函數是md5函數,則將每個字節的高低位置換;如果是sha1函數,則將每4個字節的高低位進行置換。至此,數據的前期操作已經完成。
2.2數據處理模塊中的數據壓縮(hashcell)如圖7所示,該數據壓縮模塊的最終目的是利用hash函數對輸入消息進行壓縮,生成128(md5)或160(sha1)位的消息摘要。根據兩個函數的規則可以看出,它們每次都是對512位數據進行運算,所以在正式壓縮前要將輸入到壓縮單元的64位數據分成每8個一組,組成512位后再做hash運算。之后,數據處理單元還要在做下一次運算之前要將前一次的運算結果和前一次的輸入相加作為下一次的初始向量。如此繼續下去,直到全部數據處理完成。為實現上述算法,該數據壓縮模塊采用以數據處理為中心,狀態控制單元和其它參數提供單元、結果處理單元以及鏈接寄存器單元為輔助的設計思路,引入一個hash處理核(hashcore)、一個狀態控制器(hashcontrol)、一個消息數據緩沖器(hashmblk),一個hash結果處理器(hashfa)以及一個鏈接變量寄存器(hashhr)。消息數據緩沖器,用于將輸入壓縮單元的64位數據轉換成512位數據,并根據控制單元的信號輸出hash處理核所需的輸入消息,如圖8所示。在實現上,為了不出現一次數據壓縮完畢后,為集齊512位數據的等待現象,在數據緩沖器中引入兩個512位的寄存器,其中寄存器1還為sha1設置了移位功能。以md5和sha1的數據流程分述如下對md5來說,兩個512位寄存器的地位是一樣的,輸入數據時具體選擇哪一個由hashmblk中的控制單元regctrl給出選擇信號,在兩個寄存器都是空時,數據填入寄存器1;當寄存器1已經填滿仍有數據輸入時,數據填入寄存器2;寄存器填滿后,向regctrl給出填滿信號,regctrl隨即向壓縮單元給出一個starthash信號,并根據寄存器的狀態選擇接下來接受數據的寄存器。寄存器中輸入填充的位置由pad unit中DBCR的低3位決定。兩個寄存器的數據輸出都接到各自的一個md5數據選擇器wordmux3以及wordmux2,數據選擇信號由壓縮控制單元給出。對于md5函數,將只用到MBSel1選擇信號。該信號與壓縮單元給出的寄存器選擇信號一起選擇出壓縮單元所需的輸入數據。實現上引入一個選擇器mbmux,該選擇器在壓縮函數是md5時,根據壓縮單元給出的寄存器選擇信號來選擇wordmux3和wordmux2的輸出數據作為壓縮單元的輸入。對于sha1來說,寄存器1與寄存器2相比,多了移位功能;寄存器2的輸入來源于數據填充單元(pad unit),而寄存器1的輸入來源于消息數據緩沖器本身的輸出。當512位數據依次到來時,數據必須首先填入寄存器2中。當壓縮處理過程處于第一輪運算時,計算所需數據是原始輸入數據的第1至32塊。此時,32位數據由數據選擇信號MBSel2來選擇,被選數據經由wordmux1輸出到shamux;shamux在第一輪將來自wordmux1的數據直接輸出到mbmux和寄存器1,mbmux將輸入傳入壓縮單元;寄存器1進行移位寄存,依次將本單元的輸出數據存儲下來,以備在之后的運算中提供計算W[k]所需的W[k-3],W[k-8],W[k-14]和W[k-16]。當數據運算處于第二、三、四輪運算時,壓縮單元已不從寄存器2讀取數據,而是利用寄存器1中的數據來產生所需的W[k]。實現上,寄存器1中的數據經由shaxor得到W[k]后,輸出到shamux,此時shamux選擇shaxor的數據,并對數據進行循環左移一位的操作,之后將所得結果同時傳給mbmux和寄存器1。Mbmux將輸入傳入壓縮單元;寄存器1進行移位寄存。
狀態控制器,為hash處理核提供運算時所需的各常量信號,為消息數據緩沖器提供寄存器選擇信號和數據選擇信號,同時還為結果處理器以及鏈接變量寄存器提供控制信號。狀態控制器主要由三部分組成decodestate(常數提供單元)、counter(計數單元)和hashsm(狀態機)。在hashsm與counter之間,hashsm向counter發出置位信號,counter計數完成后向hashsm返回計數完成信號通知其一輪計算完成;在decodestate與counter之間,counter向decodestate傳輸在具體一輪中運算的所處步數;在hashsm與decodestate之間,hashsm向decodestate發出處理輪數和各個常量的提取信號,decodestate根據輪數和counter提供的步數向處理核給出相應的常量數據,如圖9所示。
Counter是一個遞增計數器,并且根據所選函數不同,自動設置計數周期(md516;sha120)。當計數周期滿或hashsm給出置零信號時,計數器返回零開始計數,其中,計數周期滿時計數器還給出相應的信號通知hashsm,以告知一輪處理結束。
Decodestate中有兩種函數的常量存儲單元md5ds和sha1ds,兩者根據所處在輪數此時的運算次數給出下一次運算的常數輸出(此處“所處輪數此時的運算次數”的產生將在后續的hashsm的論述中詳細講述),并通過selconstfunc由所選函數信號選擇改函數所需的輸出。Hash運算在做完一次后,下一輪運算的鏈接變量要由上一輪的結果和初始鏈接變量運算得到。因此,我們在hashcontrol中引入selectorfa單元,根據不同的函數給出不同的運算控制信號,同時也產生md5ds和sha1的輪數信號。所有由selconstfunc和selectorfa輸出的信號都要經過一個寄存器單元registers以引入芯片復位信號的影響和使各個常量和數據可以在同一時鐘上升沿打到處理核的輸入,保證了同步性。這也是為什么在當前運算次數時要給出下一次運算所需常量的原因。
Hashsm是控制單元的核心,它控制著數據運算的狀態。根據數據運算流程,我們可以大致分成空閑狀態、數據預取狀態、數據運算1~4輪,結果處理狀態和數據等待狀態。
狀態分析芯片復位或所設定的hash函數不正確時,處理核無需處理數據,此時處于空閑狀態;當消息數據緩存器向處于空閑狀態的處理核發出運算請求信號時,由于hash運算要求有輸入數據、各個運算常量的配合,而在空閑狀態這些數據都沒有給出(空閑態不知道接下來要做的是哪個函數的運算,無法給出下一狀態所需的數據),所以在第一輪運算之前需要加入一個預處理狀態,以為第一輪運算做好準備;預處理狀態完成后,芯片將根據所選處理函數跳轉到相應的運算狀態,并依次執行幾輪運算,由于不同輪處理所需的數據、常量等不同,因此為每一輪處理設置一個狀態;最后一輪處理結束后,鏈接變量還要與初始鏈接變量運算得到一次512位數據的運算結果,為此我們設立一個結果處理狀態,此時控制器輸出結果處理時所需的各種信號;一次512位數據處理結束后,可能有三種情況處理函數被設為無效值,此時狀態將跳轉到空閑狀態;新的數據沒有準備好,芯片跳轉到等待數據狀態;新的512位數據已經準備好了,芯片直接跳轉到第一輪數據處理狀態。芯片處于數據等待狀態后,如果處理函數被置保留值,則跳轉到空閑狀態;如果數據已經準備好了,則跳轉到第一輪運算狀態。不論是處于結果處理狀態時512位數據已經準備好,還是處于數據等待狀態時數據已經準備好,亦或是處于預處理狀態,芯片要跳轉到第一輪運算的另一個條件是第一輪的第一次運算所需的各個數據都要在之前準備好,所以當芯片處于上述幾個狀態時,輪數輸出應當是一次512位數據運算的最后一輪,并且此時md5ds和sha1ds的運算次數輸入應當是一輪中的最后一次,但此時計數器要被置位,不能提供次數信息。為了保證這一點,我們回到介紹decodestate單元時留下的問題。在decodestate單元中用selectorfa來提供運算次數信號,我們為這三個狀態引入一個信號preload,該信號在這三個狀態下被置高,selectorfa在preload處于低時輸出counter的計數值,在preload處于高時輸出一輪中的最后一次運算的計數值。這樣就解決了運算時所需各個數據的問題。
狀態轉換圖如圖10所示,在消息數據緩沖器中引入了兩個寄存器,一個寄存器處于工作狀態時另一個可以收集數據,并在收集滿時向hashcontrol發出starthash信號,如果此時數據處理核正在壓縮數據,就不能及時響應該信號,所以設計中引入了一個針對starthash信號的計數器,當該計數器值不為0時,狀態圖中的StartHashReg將置‘1’。
數據處理核,實現md5函數和sha1函數的運算過程,是hash運算的核心部分。運算的目的就是得到新的鏈接寄存器值,設計中設有5個寄存器A,B,C,D,E。由于md5和sha1處理有許多共同之處,利用這些共同之處,可以共用一些單元。在sha1得到A寄存器和md5得到B寄存器的路徑上都用到了非線性函數,一個四輸入加法器和一個二輸入加法器,設計遵從共用單元和共用路徑兩條原則,實現了兩個處理函數共用同一個處理核的目的。實現過程中采取在時鐘上升沿對CVR賦值,之后又根據所得到的CVR在一個時鐘周期內產生下一次CVR的值,以便在下一個上升沿給CVR賦值,如圖11所示。
3.存儲映射轉化模塊為了適應多種處理器的存儲映射模式,設計中為此加入一個存儲映射轉換模塊,根據所選hash函數以及OMR綜ER寄存器的設置,對寫入HU單元中指定寄存器的值和從CVR中讀出的值進行big-endian與little-endian之間的相互轉換。
權利要求
1.一種硬件快速實現雜湊算法的方法,按雜湊算法的流水作業操作順序將集成電路的硬件進行如下的部署,其特征在于一、使數據首先經過接口模塊,該接口模塊設置有一個是處理器的控制接口,連接處理器對各個寄存器進行讀寫,另外設置一個數據輸入接口;二、使數據填充和數據的收集和處理在數據處理模塊中完成,該數據處理模塊設置2個數據緩沖器,對與MD5函數,一個緩沖器向處理核輸出數據時,另一個緩沖器收集下一個512位數據塊,對于SHA-1函數,先由二號緩沖器收集滿512位數據,第一輪運算由二號緩沖器由低到高給出數據,同時一號緩沖器收集這些數據并進行移位,第二輪運算開始由一號緩沖器取特定位置的數據進行計算得到輸出到處理核的數據,同時把輸出數據作為一號緩沖器的移位輸入,另外,在該數據處理模塊設置A、B、C、D、E5個寄存器分別代表hash運算中使用的CVR從低到高的五個32位域,在A寄存器與Adder1之間設置一個S2單元,當函數是shal時其輸出是輸入的循環左移5位的值,否則直接輸出輸入數據,在Adder1與Adder2之間引入S1單元,當函數是shal是直接輸出輸入數據,否則根據hashcore輸入的S進行循環左移再輸出,設置一個數據選擇器MUX6為Adder2從B和E中選擇一個輸入數據,當函數是md5時選B,當函數是shal時選E,同時,在該數據處理模塊中設置MUX1、MUX2、MUX3、MUX4、MUX55個數據選擇單元,依次對應所述A、B、C、D、E5個寄存器,并分別為對應的寄存器提供下一時鐘上升沿所需的數據,所述每個數據選擇單元在有寫CVR信號時輸出所要寫的相應數據,在有寫OMR信號時輸出CVR的初始化數據,除此之外輸出各自的上一時鐘沿之后,根據CVR運算所得的數據,當最后的512位數據處理完畢,所述CVR寄存器中的值就是集成電路硬件實現的hash結果,通過所述接口模塊中的處理器的控制接口輸出;三、使數據適應多種處理器的存儲映射模式,設置一個存儲映射轉換模塊,根據所選hash函數以及OMR中ER寄存器的設置,對寫入HU單元中指定寄存器的值和從CVR中讀出的值進行big-endian與little-endian之間的相互轉換。
2.根據權利要求1所述的一種硬件快速實現雜湊算法的方法,其特征在于為步驟二中所述A、B、C、D、E5個寄存器設置復位信號,當復位信號置低,CVR立即置0,否則就在時鐘上升沿置為各自對應的所述MUX1、MUX2、MUX3、MUX4、MUX5數據選擇單元的輸出值。
全文摘要
本發明公開了一種硬件快速實現雜湊算法的方法,其硬件部署如下,一、使數據首先經過接口模塊,該模塊設置一個處理器控制接口和一個數據輸入接口;二、使數據填充、數據的收集和處理在數據處理模塊中完成,在該模塊設置2個數據緩沖器,5個寄存器和對應的S1、S2單元,以及6個數據選擇單元;三、使數據適應多種處理器的存儲映射模式,設置一個存儲映射轉換模塊。本發明在保證硬件高速處理輸入數據流和輸入數據流穩定性的同時盡可能地減少了邏輯門數,減少了集成電路芯片的面積。應用本發明的雜湊算法集成電路芯片可以作為一款協處理器芯片使用,也可以作為IP核提供給其它的更大的芯片或者FPGA開發板等使用。
文檔編號H04L9/10GK1716848SQ20041002513
公開日2006年1月4日 申請日期2004年6月14日 優先權日2004年6月14日
發明者周玉潔, 喬國培, 陳志敏, 鄧忠紅 申請人:上海安創信息科技有限公司