本發(fā)明涉及國密商用密碼算法的硬件實現領域,特別是涉及一種基于SM4密碼算法的加解密裝置。
背景技術:
SM4分組對稱密碼算法作為我國商用密碼算法,該算法的分組數據長度為128比特,密鑰數據長度為128比特其在數據加解密的應用范圍非常廣泛。例如數據存儲的加解密,數據通訊的加解密等等,都需要對數據進行分組對稱加解密運算。
對于硬件實現SM4分組對稱算法芯片的使用方式,通常是CPU+SM4芯片的硬件設計方式,由CPU直接或間接控制調度SM4芯片。當CPU需要實行一個或多個數據源進行SM4算法加解密運算時,即向SM4芯片發(fā)送所需要加解密的分組數據源和相對應的密鑰數據,SM4芯片接收到加解密數據源之后,開始進行分組對稱加解密運算,等加解密運算結束后,返回加解密結果給CPU。
通常SM4芯片設計方法的加解密運算模塊只能一個一個數據源地竄行執(zhí)行加解密運算,在應對SM4 ECB處理模式可以獲得非常高的運算性能,但在應對SM4 CBC/OFB等反饋處理模式時卻變得性能低下。
如果CPU是多核多線程同時申請調度SM4芯片運算的情況,多核多線程之間并發(fā)處理任務的將受到SM4芯片串行運算的影響,特別是在SM4CBC或OFB加解密模式下更為突出。
技術實現要素:
為了克服上述現有技術的缺陷,本發(fā)明要解決的技術問題是提供一種基于SM4密碼算法的加解密裝置,用以提高現有SM4密碼算法的運行性能。
為解決上述技術問題,本發(fā)明中的一種基于SM4密碼算法的加解密裝置,具有多路存儲單元,每路存儲單元用于對應連接多核CPU的一CPU核;
所述加解密裝置通過每路存儲單元接收一CPU核的數據源,并基于接收的所有CPU核的數據源進行并發(fā)SM4密碼算法的加解密運算,以及將各加解密運算結果數據通過每路存儲單元返回給相應的CPU核。
本發(fā)明有益效果如下:
本發(fā)明通過將外部接口(存儲單元)設計多隊列存儲模式,可以與多核CPU實現無縫對接,解決CPU多核之間由于競爭調度SM4算法單元導致系統(tǒng)性能下降問題,適應比較復雜的應用設計方案。
同時,通過多路并發(fā)運算,可以進行多路不同數據源同時進行加解密運算,避免由于個別隊列數據源比較多的情況下,阻塞其他隊列數據源無法及時得到運算。特別是在SM4算法的ECB、CBC、CFB、OFB多種處理模式同時使用的情況下,避免不同模式之間的相互影響。
附圖說明
圖1是本發(fā)明實施例中基于SM4密碼算法的加解密裝置的系統(tǒng)架構圖;
圖2是本發(fā)明實施例中基于SM4密碼算法的加解密裝置的結構示意圖;
圖3是本發(fā)明實施例中輪密鑰運算模塊的結構示意圖;
圖4是本發(fā)明實施例中輪密鑰運算硬件實現模式示意圖;
圖5是本發(fā)明實施例中分組數據加解密模塊的結構示意圖;
圖6是本發(fā)明實施例中加解密運算硬件實現模式示意圖;
圖7是本發(fā)明實施例中一種具有2個存儲輪密鑰RAM加解密裝置的結構示意圖;
圖8是本發(fā)明實施例中另一種具有2個存儲輪密鑰RAM加解密裝置的結構示意圖;
圖9是本發(fā)明實施例中支持八個并發(fā)分組數據源運算的分組數據加解密模塊的結構示意圖。
具體實施方式
為了提高現有SM4密碼算法的運行性能,本發(fā)明提供了一種基于SM4密碼算法的加解密裝置,以下結合附圖以及實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不限定本發(fā)明。
如圖1所示,本發(fā)明實施例中一種基于SM4密碼算法的加解密裝置(簡稱加解密裝置),具有多路存儲單元,每路存儲單元用于對應連接多核CPU的一CPU核;
所述加解密裝置通過每路存儲單元接收一CPU核的數據源,并基于接收的所有CPU核的數據源進行并發(fā)SM4密碼算法的加解密運算,以及將各加解密運算結果數據通過每路存儲單元返回給相應的CPU核。
進一步說,所述每路存儲單元包括上行單元和下行單元;所述下行單元用于存儲相應一CPU核的下行隊列的數據源,所述上行單元用于將與一加解密運算結果數據以上行隊列的形式返回給相應的一CPU核。
具體說,1、多核CPU與加解密裝置之間通過多通道DMA控制器聯(lián)接。每個DMA通道對應一個CPU核,每個CPU核通過對應的DMA通道獨立調度SM4算法加速模塊,實現多核并發(fā)運行。
2、多通道DMA控制器與SM4算法加速模塊設計有多路存儲buffer(存儲單元),存儲buffer設計成上行和下行兩種模式。下行buffer(下行單元)用于存儲CPU發(fā)送給SM4算法加速模塊的數據,上行buffer(上行單元)用于SM4算法加速模塊把加解密運算結果返回CPU。
3、SM4算法加速模塊對輸入多隊列數據源實行輪循讀取,各隊列的數據均等機會得到加解密運算,避免由于個別隊列的數據量大導致其他隊列的數據被阻塞的現象。內部實行多個數據源并發(fā)運算機制。
在上述實施例的基礎上,進一步提出上述實施例的變型實施例,在此需要說明的是,為了使描述簡要,在各變型實施例中僅描述與上述實施例的不同之處。
在本發(fā)明的一個實施例中,所述數據源包括秘鑰數據和分組數據;如圖2所示,所述裝置包括輸入加解密數據分轉控制模塊(即輸入分轉控制模塊)、輸出加解密數據分轉控制模塊(即輸出分轉控制模塊)、支持多路并發(fā)運算的輪密鑰模塊和支持多路并發(fā)運算的分組數據加解密模塊;
所述輸入分轉控制模塊,用于對所述各下行單元的數據源進行輪詢讀取,以及將讀取的各秘鑰數據送入到所述輪密鑰運算模塊,將讀取的各分組數據送入到所述分組數據加解密模塊;
所述輪密鑰運算模塊,用于對接收的各秘鑰數據進行輪密鑰并發(fā)運算,得到各輪秘鑰結果數據;
所述分組數據加解密模塊,用于獲取各輪秘鑰結果數據,根據每個輪秘鑰結果數據和相應接收的分組數據進行并發(fā)SM4密碼算法的加解密運算;
所述輸出分轉控制模塊,用于將所述分組數據加解密模塊的各加解密運算結果數據分別存儲在相應的上行單元。
具體說,加解密裝置包括四個模塊:
1)輸入加解密數據分轉模塊。
2)支持多路并發(fā)運算的輪密鑰模塊。
3)支持多路并發(fā)運算的分組數據加解密模塊。
4)輸出加解密數據分轉模塊。
下面是各個模塊的詳細設計描述:
1、輸入加解密數據分轉控制模塊;
SM4算法加速模塊與CPU DMA控制器之間(或者是其他外部總線接口)設計一個加解密數據分轉控制模塊,對多路入口buffer的加解密數據進行輪循讀取,提取出加解密數據的密鑰送入到輪密鑰運算模塊,加解密分組數據源則送入到SM4分組數據運算模塊,并標識數據的入口buffer序號。當加解密結果返回時,則根據數據的入口buffer序號,把運算結果寫入相對應的輸出buffer。
2、支持多路并發(fā)運算的輪密鑰模塊;
如圖3所示,所述輪密鑰運算模塊包括至少一路秘鑰數據接口緩存、輪運算主控制器、多個輪運算子控制器、SM4算法輪秘鑰邏輯運算資源模塊和雙口輪密鑰存儲模塊;
每一路秘鑰數據接口緩存,用于存儲所述輸入分轉控制模塊送入的秘鑰數據;
所述輪運算主控制器,用于針對每一路秘鑰數據接口緩存,在檢測到該路秘鑰數據接口緩存有秘鑰數據時,調度所述多個輪運算子控制器;
所述多個輪運算子控制器,用于在所述輪運算主控制器的調度下,從該路秘鑰數據接口緩存中并行讀取秘鑰數據,對每個秘鑰數據生成存儲寫地址,并以流水線方式將讀取的秘鑰數據發(fā)送給所述SM4算法輪秘鑰邏輯運算資源模塊;
所述SM4算法輪秘鑰邏輯運算資源模塊,用于針對每個秘鑰數據,對該秘鑰數據進行輪密鑰運算,并根據該秘鑰數據相應的存儲寫地址,將該秘鑰數據的輪密鑰運算結果數據存儲在所述雙口輪密鑰存儲模塊。
其中,所述SM4算法輪秘鑰邏輯運算資源模塊采用四個時鐘周期完成一級輪密鑰運算;所述子控制器的個數為4個、8個、16個或32個;所述雙口輪密鑰存儲模塊為2個。
所述輪密鑰運算結果數據包括加密輪密鑰運算結果數據和解密輪密鑰運算結果數據;
所述加密輪密鑰運算結果數據低位地址采用遞增方式;
所述解密輪密鑰運算結果數據低位地址采用遞減方式。
具體說:
a)密鑰數據buffer(即秘鑰數據接口緩存);
加解密數據分轉控制模塊剝離出密鑰數據寫入輪密鑰運算模塊的接口buffer,為后續(xù)做輪密鑰運算使用。
b)主控制模塊(即輪運算主控制器);
主控制模塊用于監(jiān)控密鑰buffer是否有有效密鑰以及控制其他四個子控制模塊,使四個子模塊輪流讀取密鑰buffer數據,并以流水線方式控制子控制器并發(fā)運行。
c)子控制模塊(輪運算子控制器)
本發(fā)明采用四個子控制模塊。子控制模塊受控于主控制模塊。當主控制模塊發(fā)送一個新密鑰需要進行輪密鑰運算的消息給其中一個子控制模塊,該子控制模塊則開始讀取密鑰buffer的密鑰數據,并啟動輪密鑰運算控制狀態(tài)機,通過控制狀態(tài)機把密鑰數據送入到輪密鑰運算資源模塊進行輪密鑰運算。控制狀態(tài)機控制輪密鑰運算過程中,同時生成存儲輪密鑰結果的RAM寫地址,一同與密鑰數據送入到輪密鑰運算資源模塊。當控制狀態(tài)機完成32輪密鑰數據傳送之后,將給主控制模塊發(fā)送ready信號,準備接收下一個密鑰數據。四個子控制模塊通過主控制模塊的調度控制,進行輪密鑰并發(fā)運算;同時,四個控制狀態(tài)機在主控制模塊控制下,以流水線方式傳送各組密鑰數據給輪密鑰運算模塊。
主控制模塊與四個子控制模塊的狀態(tài)機時序關系如下表所示:
d)sm4算法輪密鑰運算資源模塊(即SM4算法輪秘鑰邏輯運算資源模塊);
輪密鑰運算需要進行32級輪非線性邏輯運算,輪密鑰運算硬件實現模式如圖4所示,本發(fā)明采用用一級邏輯運算資源的設計方法,減少邏輯資源使用,通過外部子控制模塊實行輪循迭代方式完成32輪輪密鑰運算。輪密鑰運算資源設計成用四個時鐘周期完成一級輪密鑰運算,采用四級流水線設計方式。通過外部四個子控制模塊調度控制,實現4個不同密鑰的輪密鑰并發(fā)輪循迭代運算。每經過一級輪密鑰運算,輸出一個輪密鑰結果寫入到ram里面。ram的寫地址由外部子控制模塊控制:加密輪密鑰低位地址采用0--31遞增方式,解密輪密鑰低位地址采用31--0遞減方式。這樣設計將為后續(xù)分組數據的加密運算和解密運算使用輪密鑰達成統(tǒng)一方式。
e)存儲輪密鑰ram(即雙口輪密鑰存儲模塊)
存儲輪密鑰ram是一個雙口ram,寫地址、輸入數據由sm4算法輪密鑰運算資源模塊控制,讀地址、接收輸出數據則由分組數據運算模塊控制。
3、支持多路并發(fā)運算的分組數據加解密模塊;
如圖5所示,所述分組數據加解密模塊包括至少一路分組數據接口緩存、加解密主控制模塊、多個加解密子控制模塊、SM4算法分組數據邏輯運算資源模塊和至少一路加解密運算結果數據輸出接口緩存;
每一路分組數據接口緩存,用于存儲所述所述輸入分轉控制模塊送入的分組數據;
所述加解密主控制模塊,用于針對每一路分組數據接口緩存,在檢測到該路分組數據接口緩存中有分組數據,并且所述雙口輪密鑰存儲模塊中存儲對應輪密鑰運算結果數據時,調度所述多個加解密子控制模塊;
所述多個加解密子控制模塊,用于在所述加解密主控制模塊的調度下,從該路分組數據接口緩存中并行讀取分組數據,以及從所述雙口輪密鑰存儲模塊中讀取相應的輪密鑰運算結果數據,并以流水線的方式將讀取的分組數據和輪密鑰運算結果數據發(fā)送給所述SM4算法分組數據邏輯運算資源模塊;
所述SM4算法分組數據邏輯運算資源模塊,用于針對每個分組數據和對應的輪密鑰運算結果數據進行加解密數據;
每路加解密運算結果數據輸出接口緩存,用于將所述SM4算法分組數據邏輯運算資源模塊的加解密運算結果數據分別存儲在相應的上行單元。
進一步說,每一路分組數據接口緩存中存儲的每個分組數據攜帶長度信息和下行隊列序號;
每個加解密子控制模塊,用于針對每個分組數據,根據該分組數據的長度信息確定加解密運算次數,并將該分組數據和對應的輪密鑰運算結果數據發(fā)送給所述SM4算法分組數據邏輯運算資源模塊;
所述SM4算法分組數據邏輯運算資源模塊,用于根據所述加解密運算次數,針對每個分組數據和對應的輪密鑰運算結果數據進行加解密數據。
進一步說,每一路分組數據接口緩存中存儲的每個分組數據還攜帶ECB\CBC\OFB反饋模式;
每個加解密子控制模塊,還用于根據所述反饋模式,將所述下行隊列序號對應的加解密運算結果數據進行ECB\CBC\OFB處理;
每路加解密運算結果數據輸出接口緩存,用于將每個加解密子控制模塊處理后的加解密運算結果數據分別存儲在相應的上行單元。
其中,所述SM4算法分組數據邏輯運算資源模塊采用四個時鐘周期完成一個32位分組數據的加解密運算;所述分組數據加解密模塊具有一級SM4算法分組數據邏輯運算資源;所述子控制器為的個數為4個、8個、16個或32個;所述裝置包括多個分組數據加解密模塊。
具體說,
a)四路分組數據輸入buffer(即分組數據接口緩存)
用于存儲四路不同源的輸入分組數據,為后面并發(fā)運算提供分組數據源。buffer除了分組數據,還攜帶分組數據的長度、ECB/CBC/OFB等數據反饋模式以及外部數據隊列序號等,為后續(xù)分組數據運算提供長度、運算模式以及返回數據隊列序號等消息。
b)主控制模塊(即加解密主控制模塊)
本發(fā)明設計一個主控制模塊,用于監(jiān)控分組buffer是否有分組數據、輪密鑰RAM是否有輪密鑰結果以及控制其他四個子控制模塊,使能四個子模塊讀取分組數據和輪密鑰,并以流水線方式控制子控制器進行分組數據加解密并發(fā)運算。
c)子控制模塊(即加解密子控制模塊)
本發(fā)明設計四個子控制模塊。子控制模塊受控于主控制模塊。當主控制模塊發(fā)送一個新分組數據源需要進行加解密運算的消息給其中一個子控制模塊,該子控制模塊則啟動控制狀態(tài)機讀取分組數據的長度、ECB/CBC/OFB等數據反饋模式以及外部數據隊列序號等。子控制模塊根據長度確定執(zhí)行分組數據運算次數,讀取buffer的分組數據,并傳送入SM4算法分組數據邏輯運算資源模塊進行加解密運算;根據反饋模式對分組數據運算實行ECB/CBC/OFB等模式處理,并輸出分組數據運算結果;數據隊列序號則是輸出加解密結果的隊列號,與分組數據運算結果一起寫入到輸出buffer,用于外部DMA控制器返回數據給CPU使用。
主控制模塊狀態(tài)機與四個子控制模塊狀態(tài)機的時序關系如下表所示,
從狀態(tài)機時序關系表可知,主控制狀態(tài)機一直由四個運行狀態(tài)循環(huán)執(zhí)行,在主控制狀態(tài)機的控制下,四個子控制狀態(tài)機以流水線方式并發(fā)運行,實現四個不同數據源的分組數據進行加解密運算。
d)SM4算法分組數據邏輯運算資源模塊(即SM4算法分組數據邏輯運算資源模塊);
分組數據運算需要進行32級輪非線性邏輯運算,分組數據運算(即加解密運算)硬件實現模式如圖6所示。
本發(fā)明設計用一級邏輯運算資源的設計方法,通過外部子控制模塊實行輪循迭代方式完成32輪分組數據運算。分組數據運算邏輯資源設計成用四個時鐘周期完成一個32位分組數據運算,采用四級流水線設計方式,支持四路不同源分組數據同時運算。通過四個子控制模塊調度控制,實現4個不同源的分組數據并發(fā)輪循迭代運算。每經過一級分組數據運算,輸出一個加解密結果發(fā)送給子控制模塊暫存,子控制模塊判斷加解密結果是否需要實行OFB后反饋模式處理,如果需要則實行OFB處理之后再寫入輸出buffer,否則將直接寫入輸出buffer。
由于解密運算使用輪密鑰在計算過程中已經經過逆序處理,分組數據邏輯運算資源模塊不需要區(qū)分加密運算還是解密運算,統(tǒng)一用一種運算方式完成加密和解密運算。
e)輸出buffer(即加解密運算結果數據輸出接口緩存);
輸出buffer緩存加解密數據結果,數據將由輸出加解密數據分轉模塊發(fā)送給外部模塊。
4、輸出加解密數據分轉模塊;
輸出加解密數據分轉模塊將讀取輸出buffer的輸出序列號,把加解密數據返回給外部DMA控制器相應序列號隊列。
本發(fā)明中裝置支持并發(fā)運算的SM4密碼算法,用于解決現有技術方案中CPU多核多線程并發(fā)申請調度SM4密碼算法芯片的復雜應用場景,特別是在不降低SM4 ECB處理模式的性能前提,提高SM4 CBC、OFB等模式的運算性能。
本發(fā)明中裝置主要分為兩大運算部分,一部分數據源密鑰的輪密鑰運算模塊,另一部分既是分組數據的加解密運算模塊。
本發(fā)明中裝置為支持CPU多核調度SM4密碼算法硬件加速運算單元,SM4算法分組數據源和密鑰數據設計成支持多路輸入、輸出隊列架構,用于對應多核CPU并發(fā)調度SM4。
輪密鑰運算模塊對多個密鑰數據隊列進行輪循讀取輪密鑰實現并發(fā)運算,所計算得到多個輪密鑰結果緩存到一個雙口RAM,為后續(xù)的分組數據的加解密運算模塊使用。輪密鑰運算模塊支持并發(fā)運算的數量可以設計成4個、8個、16個或更多個,可以根據實際使用芯片資源數量或者設計需要來增加或減少并發(fā)數。
進一步地,本發(fā)明中輪密鑰運算模塊運算得到輪密鑰結果緩存入一個雙口RAM,分組數據的加解密運算模塊將讀取雙口RAM的輪密鑰和與該輪密鑰相關的數據源分組數據進行加解密運算;
分組數據的加解密運算模塊設計成支持多條不同分組加解密數據源并發(fā)運算。并發(fā)運算的數量可以設計成4個、8個、16個或更多個,可以根據實際使用芯片資源數量或者設計需要來增加或減少并發(fā)數。
進一步地,本發(fā)明裝裝置為配合使用并發(fā)運算的輪密鑰運算模塊和并發(fā)運算的分組數據的加解密運算模塊,密鑰和數據源輸入、輸出隊列設計為多隊列模式,每個輸入、返回隊列有各自編號。這樣通過加解密的數據結果能夠準確返回給多核CPU的。
本發(fā)明中裝置結合SM4算法的本質,充分利用SM4算法流水線方式的硬件運算資源模塊,進行設計架構方面的優(yōu)化,在不增加多少邏輯資源的情況,實現并發(fā)運算SM4密碼算法,提高SM4CBC、OFB模式的處理性能,在結合CPU多核多線程調度使用情況,充分提升整個系統(tǒng)性能。
本發(fā)明中裝置,進一步在上述各實施例的基礎上,如圖7所示,為了進一步提高運算性能,只需要增加一個存儲輪密鑰RAM,即可以滿足并發(fā)執(zhí)行八個不同分組數據源運算的要求。
在芯片資源比較豐富的情況下,為增加輪密鑰的運算速度,則輪密鑰模塊增加一級輪密鑰運算資源,同時子控制模塊設計為八個,主控制同時控制八個子控制模塊并發(fā)執(zhí)行。其具體結構如圖8所示。
為進一步提高運算性能,如圖9所示,本發(fā)明中裝置還支持并發(fā)執(zhí)行八路不同分組數據源,需要采用兩個分組數據運算資源,同時子控制模塊設計為八個。主控制模塊同時控制八個子控制模塊并發(fā)運行。
本發(fā)明實施例中裝置在已有SM4算法硬件實現的基礎上進行優(yōu)化,在不增加多少邏輯占用的資源的情況,實現并發(fā)運算SM4密碼算法,在不降低SM4ECB模式性能前提下,顯著地提高了SM4CBC、OFB模式的處理性能,再結合CPU多核多線程調度方式使用,充分提升整個系統(tǒng)性能。
雖然本申請描述了本發(fā)明的特定示例,但本領域技術人員可以在不脫離本發(fā)明概念的基礎上設計出來本發(fā)明的變型。
本領域技術人員在本發(fā)明技術構思的啟發(fā)下,在不脫離本發(fā)明內容的基礎上,還可以對本發(fā)明做出各種改進,這仍落在本發(fā)明的保護范圍之內。