專利名稱:為aes rijndael分組密碼產生輪次密鑰的制作方法
技術領域:
本發明涉及一種用于執行高級加密標準(AES)算法的方法和設備,尤其涉及一種用于實時產生在算法的加密與解密輪次(round)期間所要求的輪次密鑰的方法和設備。
本發明在諸如安裝在智能卡中的那些密碼裝置以及其中處理器和存儲器資源受限的其它裝置中具有特定的應用,但這并不是排他的。
可以使用對輸入數據的相繼128位分組(block)進行操作的128位、192位或256位密鑰來實現所述AES(Rijndael)算法。在依照所述AES算法執行加密運算或解密運算(在下文,通稱為“密碼運算”)期間,必須擴展所述原始或“初始”密鑰以便為加密或解密運算的每個相繼輪次提供輪次密鑰。輪次的數目(Nr)對128位密鑰是10,對192位密鑰是12,對256位密鑰是14。
從而,所述擴展輪次密鑰大小是所述初始密鑰乘以(Nr+1)。在128位密鑰的情況下,所述擴展密鑰包括128×11=1408位;對所述192位密鑰而言,所述擴展密鑰包括128×13=1664位;并且對所述256位密鑰而言,所述擴展密鑰包括128×15=1920位。
該擴展密鑰的存儲消耗密碼引擎的數量顯著的存儲空間,這在有些應用中是十分重要的,所述應用諸如是供應在智能卡上的密碼引擎等等,在那里存儲空間是有限的。如果在操作密碼引擎期間在沒有導致其延遲的情況下產生了輪次密鑰,那么提供這些空間并不是絕對必要的。
本發明致力于密鑰擴展方法和設備,其使用基本上比現有技術降低的存儲器分配來實時地實現所述輪次密鑰產生函數。
本發明認識到可以在所述密碼引擎中與執行所述加密或解密算法并行地執行所述相繼輪次密鑰的實時產生,并且在加密或解密過程中幾乎不影響執行時間,同時減少硬件的數目。
依照一個方面,本發明提供一種根據初始密鑰產生擴展密鑰的相繼輪次密鑰的方法,所述初始密鑰用于加密和/或解密引擎,包括以下步驟在存儲器的Nk個單元上存儲所述初始密鑰的Nk個字;
向密碼引擎提供所述初始密鑰,用于執行第一密碼輪次;重復地獲取擴展密鑰的所選擇的第一個字和所選擇的第二個字,這兩個字中的至少一個字是從所述存儲器中獲取的,并且根據所選擇的第一和第二個字產生所述擴展密鑰的相繼后續字;向所述密碼引擎提供所產生的擴展密鑰字,作為用于執行后續密碼輪次的輪次密鑰;和通過循環地重寫先前產生的擴展密鑰字來在所述存儲器中存儲所產生的后續字的相繼字。
依照另一方面,本發明提供一種輪次密鑰產生器,用于根據供加密和/或解密引擎使用的初始密碼密鑰來產生擴展密鑰的相繼輪次密鑰,包括存儲器,用于存儲所述初始密鑰的Nk個字;擴展處理器,用于重復地獲取所述擴展密鑰的所選擇的第一個字和所選擇的第二個字,這兩個字中的至少一個字是從所述存儲器中獲取的,并且根據所選擇的第一和第二個字產生所述擴展密鑰的相繼后續字;用于向所述密碼引擎提供所產生的擴展密鑰字作為用于執行后續密碼輪次的輪次密鑰的裝置;和用于通過循環地重寫先前產生的擴展密鑰字來在所述存儲器中存儲所產生的后續字的相繼字的裝置。
依照另一方面,本發明提供了一種包括移位寄存器的AES輪次常數函數產生器,具有第一控制輸入端,用于使寄存器內容左移;第二控制輸入端,用于使所述寄存器內容右移;和第三控制輸入端,用于使所述移位寄存器內容預置為一些可能值中的一個。
現在將參考附圖并通過舉例來描述本發明的實施例,其中
圖1是舉例說明使用所述AES分組密碼算法來執行加密運算的流程圖;圖2是用于產生所述擴展加密密鑰的AES輪次密鑰進度表的流程圖,其提供在加密運算期間所需要的多個輪次密鑰;圖3是依照本發明的輪次密鑰產生器的示意性框圖4是在加密期間用于產生相繼輪次密鑰的密鑰擴展處理器的示意性框圖;和圖5是在解密期間用于產生相繼輪次密鑰的密鑰擴展處理器的示意性框圖。
在圖1示出了將明文加密為密文的AES算法。可以使用對輸入數據的相繼128位分組進行操作的128位、192位或256位密鑰來實現所述AES算法。現在在使用128位密鑰基本實現的環境下描述圖1。
輸入明文10的初始128位分組與原始的128位密鑰12在初始輪次15進行XOR組合11。然后使由此初始輪次15產生的輸出13在加密輪次28經過許多重復的變換階段,所述加密輪次28包括依照所定義的AES算法的子字節(SubBytes)變換20,移行(ShiftRows)變換21和混列(MixColumns)變換22。
來自所述混列變換22的輸出與新的128位輪次密鑰26進行XOR組合23,所述新的128位輪次密鑰26根據所述初始(原始)密鑰12獲得。將由此XOR組合得到的輸出反饋以便使其再多次經過所述加密輪次28。
對于每個經由所述加密輪次28的相繼迭代,依照所述AES輪次密鑰進度表根據現有的輪次密鑰26獲得新的輪次密鑰26@。
所述加密輪次28迭代的次數(Nr-1),當使用128位加密密鑰時是9,使用192位加密密鑰時是11,以及使用256位加密密鑰時是13。
在輪次28的必要次數(Nr-1)之后,在判定框24的控制下進入最終輪次,Nr。所述最終輪次30包括進一步的子字節變換31,進一步的移行變換32和后續將所述變換結果與根據先前輪次密鑰產生的35最終輪次密鑰36進行的XOR組合33。從而所述輸出包括所述加密算法的密文輸出39。
根據圖1應當注意,所述AES加密算法的實現要求根據為每個輪次28、30準備的所述初始密鑰12產生新的輪次密鑰。
遍及本說明書,所述密鑰將按照32位字的數目Nk表示。對初始128位加密密鑰12,即4×32位字,Nk=4,并且所述“擴展”密鑰包括11×432位字,或44字,寫為W(0)...W(43)。對初始192位加密密鑰(Nk=6),所述擴展密鑰升為13×432位字,或52字,寫為W(0)...W(52)。對初始256位加密密鑰(Nk=8),所述擴展密鑰升為15×432位字,或60字,寫為W(0)...W(59)。
在執行所述AES解密算法期間,所述輪次密鑰與加密情況相同,但是是以逆序出現的。
參考圖2,現在將描述用于在128位密鑰環境下(在所述密鑰中的字數,Nk=4)產生相繼輪次密鑰的通用AES密鑰擴展算法。應當理解,所述技術還適用于192位(Nk=6)和256位(Nk=8)密鑰。
包括四個32位字W(0)、W(1)、W(2)和W(3)的所述初始密鑰50被載入到適當的存儲器單元510、511、512、513。在常規的實現方式中,所述存儲器包括足夠的空間,一旦產生擴展密鑰的所有字,就在51n容納所述擴展密鑰的所有字。
在所述擴展密鑰中的四個字的每個新序列包括新的輪次密鑰并且被稱為“伸展(strech)”。一般地說,伸展是W(i)到W(i+Nk),其中i是Nk的整數倍數減1(Nk=4時,為0,3,7;Nk=8時,為0,7,15)。一開始,唯一的伸展是所述初始密鑰50,并且第一任務是產生新的伸展的第一個字,從而所述判定框53指示路徑“是”。
在密鑰擴展算法的初始輪中,提取(在52)在先前伸展(513)的最后字并且左移這些位(步驟54),使用S-box查找55依照所述AES密鑰擴展算法對其進行變換。所述S-box函數與用于所述AES子字節變換20(圖1)的函數相同。作為結果的32位輸出56只有第一個八位與在所述AES密鑰次序表中定義的常數Rcon 58進行XOR組合57。然后將由此操作得到的輸出60與在先前伸展的第一個字(即510)進行XOR組合62,并在514將該結果W(4)寫入存儲器。
在經過所述流程圖中的第二輪,得到第二伸展的下一字W(5)。這是伸展的第二個字,使用所述流程圖左手邊的路徑,在514,新產生的字W(4)被直接復制到為與所述初始密鑰50的下一字511作簡單XOR組合62而準備的Wtmp緩沖器60。將新產生的字W(5)寫入(在63)存儲器515。
再重復左手邊路徑過程兩次,在重新開始第三伸展周期以前使用右手路徑產生第二伸展的最后兩個字W(6)和W(7)。
事實上,可以看出,每個新的伸展的每個字是在其緊接著的先前字和在先前伸展的相應位置的字的XOR組合,在每個伸展的第一個字除外。對在每個伸展中的第一個字,它是所使用的緊接著的先前字的函數,而不是緊接著的先前字本身的函數,所述函數依照圖2的步驟54-59執行。
除每個伸展長度分別是六字或八字以外,配置192位(Nk=6)和256位(Nk=8)密鑰的原理是相同的。
四個字的每個相繼組被用作圖1的加密過程的每個相繼輪次28、30的輪次密鑰。在解密期間,以逆序應用所述輪次密鑰。
在一個方面,本發明認識到,在任一時刻只需在存儲器中保持原始密鑰的Nk個字以及所述擴展輪次密鑰的最近的Nk個字。在步驟23或33,將最近產生的四個字(或一般地說,在當前保持的Nk個字中的四個相繼字)饋送到所述加密引擎,同時所保持的Nk個字被用來產生如圖2所描述的新的伸展。
假如產生新的伸展足夠快以跟得上所述加密引擎,并且同時與其保持同步(伸展長度(Nk=4、6或8)和輪次密鑰長度(=4)的差異的公差內)以,致最近產生的伸展包括在所述加密引擎中當前所要求的所述輪次密鑰,那么只需要提供非常有限的存儲器容量和緩沖器需求。
參考圖3,所述輪次密鑰產生器100包括RAM區101,其被分為相等的部分102、103,每個部分具有例如4×32位字(對所述128位密鑰算法而言)、6×32位字(對所述192位密鑰發生器而言)或8×32位字(對所述256位密鑰算法而言)的大小。遍及下列描述,假定輪次密鑰產生器100能處理256位密鑰算法,其可適應容納更小的密鑰長度處理。
為方便起見,將把兩個部分102、103稱為下半部103和上半部102。由OffSetHiRd指針通過mux 104來為讀訪問引用各自的部分。對OffSetHiRd=0而言,讀取下半部103;對OffSetHiRd=1而言,讀取上半部102。在所述RAM 101的下半部103,所述初始加密密鑰50存儲在單元W0到W7(即第一伸展W(0)...W(7),對Nk=8);在上半部102中,新的計算伸展,例如W(8)...W(15)存儲在相應的上半部單元W0...W7。指針OffSetHiWr(未示出)可能用來指向要寫入的存儲器的半部分。當每個相繼伸展被產生并被用于所述加密引擎時,計算下一伸展值(例如W(16)...W(23))并將其重寫到所述上半部102中。
所述個體單元W0...W7(下半部)或W1...W7(上半部)由OffSetCnt計數器111為讀和寫操作而加以引用,所述OffSetCnt計數器111是三位的計數器,其指向在上半部中的一個字單元和/或在下半部中的相應的單元。通常,把所述OffSetCnt計數器111實現為模Nk上/下計數器。
輪次密鑰計數器110保持當前計算的輪次密鑰(即當前伸展)的計數。狀態機106維護所述輪次密鑰產生過程的總體控制,并且擴展處理器107執行擴展輪次密鑰值(字)的計算。
當完成當前明文分組的加密運算時,所述過程可以從在下半部103中的加密密鑰重新開始。做為選擇,如果要求解密運算,那么所述解密周期的第一輪次密鑰包括根據所述RAM上半部102最近計算的輪次密鑰,其可以被移入所述下半部,或從上半部讀出。同樣,計算相繼解密輪次密鑰。在完成所述解密輪次密鑰產生操作之時,返回所述原始的加密密鑰并且可以將其恢復到或保持在RAM 101的下半部,以用于后續加密運算。
圖4示出了所述擴展處理器107的框圖。所述擴展處理器107包括第一32位的寄存器W,在120示出,和第二32位的寄存器Wtmp,在121示出。每個寄存器W、Wtmp可以從所述RAM 101直接填充。32位的、雙輸入端多路復用器122還允許經由反饋線路123填充Wtmp。所述擴展處理器107還包括特殊處理邏輯150,用于實現結合圖2的變換54、55、58所描述的變換旋轉字(RotateWord)154、子字(SubWord)155、Rcon 158。32位的多路復用器124從所述特殊處理邏輯150或者直接從寄存器Wtmp 121中選擇輸出以便向32位寬的XOR門162提供輸入。
加密運算開始時,將初始密鑰50(W(0)...W(7))載入到RAM101中的下半部103,位置W0...W7。
將來自RAM 101的所述初始密鑰50的第一個字W(0)載入到緩沖器120中,并且將所述初始密鑰50的最后字W(Nk-1)載入到緩沖器Wtmp 121中。一般地說,對相繼加密輪次,將W(i)載入到緩沖器120中,并且將W(i+Nk)的最后計算的值存儲在Wtmp 121中。
如參考圖2所定義的那樣,在加密的密鑰擴展過程期間,一個下列方程式適用于所述擴展輪次密鑰的每個新字W(i)的產生對于除了下面之外所有的i(即沒有特殊處理150),規則1W(i)=W(i-Nk)W(i-1)當i mod Nk=0時(每個伸展的開始),規則2W(i)=W(i-Nk)SubWord(RotWord(W(i-1)))Rcon(i/Nk)當i mod Nk=4并且Nk=8時(每8個字的伸展的中間周期),規則3W(i)=W(i-Nk)SubWord(W(i-1))其中RotWord(Wtmp)是Wtmp的逐字節旋轉,SubWord是所述AES的S-box變換,Rcon是如在所述AES標準中定義的輪次常數,其只應用于在每個伸展中第一個字的第一個字節,而對于其它字節不改變順利通過,i=0...4Nr+3,即對于Nk=4,i=0...43;對于Nk=6,i=0...51并且對于Nk=8,i=0...59。
換句話說,對每個新的伸展的第一個字,應用所述特殊處理的步驟54-59并且用來自寄存器120的W(0)和所述變換W(Nk-1)進行XOR組合62來計算W(Nk)。當Nk=8時對于每個伸展的中間字,只應用所述特殊處理的步驟55。對于在每個伸展的其它字,在沒有特殊處理步驟54到59的情況下直接XOR組合寄存器120和寄存器121的內容。
參考圖4,寄存器W裝載著W(0)并且寄存器Wtmp裝載著W(Nk-1)[例如,對于Nk=8為W(7)]。然后從XOR門162輸出所述計算的結果,W(Nk)[例如W(8)],并將其存儲在RAM101[例如在上半部的單元W0]和寄存器Wtmp 121中。然后,寄存器W裝載著W(1),而寄存器Wtmp保持W(Nk),[例如W(8)]。然后計算W(Nk+1)[例如W(9)]并將其存儲在RAM 101[在上半部的單元W1]和寄存器Wtmp中。
通常,寄存器W從RAM 101加載W(i),而寄存器Wtmp保持所述值W(i+Nk-1)。然后計算W(i+Nk)并將其存儲在RAM 101,在上半部的位置W(i+Nk)mod8(即循環地在上半部102存儲新值),和Wtmp中。
所述密鑰擴展過程與所述加密處理器130并行運行,所述加密處理器130優選逐字工作而不是以128位寬的分組進行工作。用這樣的方式,可以將內容W直接傳遞到所述加密處理器,以便立即用作所述加密過程的輸入。可選擇地,所述加密處理器130可以直接耦合來訪問RAM 101以便獲取所要求的輪次密鑰字。這種配置允許在所述加密引擎130和擴展處理器107的操作周期的相對定時過程中具有更強的靈活性。
對于每個操作周期,Wtmp的新值是這樣Wtmp=WtmpW,除下列情況外當i mod Nk=0,那么Wtmp=SubWord(RotWord(Wtmp))Rcon(i/Nk)W當i mod Nk=4并且Nk=8時,那么Wtmp=SubWord(Wtmp)W在所述密鑰擴展過程期間,指針OffSetHiRd 105實際上指向在RAM 101中上半部102或者下半部103中的基字單元。通過這個一位的指針來實現讀取單元的控制,所述一位的指針分別選擇所述存儲器的讀取半部分。從而,在密鑰擴展的第一周期期間(在第二伸展的計算期間),從所述下半部102讀取所述初始密鑰字W(0)...W(7),即所述讀取標志105選擇OffSetLo。在加密密鑰擴展期間,始終將輪次密鑰的新值寫入上半部102。
開始,應用下列初始化設置OffSetCnt=0,OffSetHiRd=0,OffSetHiWr=1,RndCnt=4Nr+3。
在地址Wk-1讀取所述RAM 101,其由OffSetHiRd和OffSetCnt(即OffSetCnt+Nk-1)確定,并將其存儲在Wtmp。
然后執行下列過程Nk次1.從下半部的WOffSetCnt讀取所述RAM,并將其存儲在W中。
2.產生下一擴展密鑰字并將其寫入Wtmp以及存儲器上半部102的WOffSetcnt。
3.遞增OffSetCnt并且遞減RndCnt。
4.只是在所述Nk周期的第一周期以后更新Rcon。
現在已經使用來自下半部103的初始密鑰的所有字。OffSetHiRd被設置為1,以致從上半部102讀取所有后續的輪次密鑰字。例如,對于Nk=8,在地址W8的存儲器包含W(8)。
現在,重復地執行下列過程直到RndCnt=Nk-1。
1.從上半部(OffSetHi=1)的OffSetCnt讀取RAM并將其存儲在W中。
2.產生下一輪次密鑰字并將其寫入到Wtmp和在RAM中上半部的OffSetCnt。
3.當OffSetCnt=0時,更新Rcon4.遞增OffSetCnt并且遞減RndCnt。
對Nk=4,最后計算是W(43)=W(39)W(42)。OffSetCnt=43 mod 4=3。
對Nk=6,最后計算是W(51)=W(45)W(50)。OffSetCnt=51 mod 6=3。
對Nk=8,最后計算是W(59)=W(51)W(58)。OffSetCnt=59 mod 8=3。
因此,與Nk無關地,總是把最后輪次密鑰字存儲在OffSetCnt=3。
就此,由所述加密處理器130使用最后的Nk個輪次密鑰字,但所述擴展處理器不再產生更多的輪次密鑰字。從而,重復地執行下列過程直到RndCnt=01.從上半部的WoffSetCnt讀取RAM并將其存儲在W。
2.遞增OffSetCnt并且遞減RndCnt。
人們注意到現在所述RAM 101的下半部103包含初始加密密鑰(Nk個字),并且現在RAM的上半部102包含所述擴展密鑰的最終Nk個字。所述擴展密鑰的最終Nk個字是所述解密密鑰的最初Nk個字。
因此,現在所述RAM包含用于加密的初始輪次密鑰和用于解密的初始輪次密鑰。因此,由密碼引擎執行的下一運算是加密運算還是解密運算無關緊要-所述擴展處理器可以從上半部102或者下半部101開始密鑰擴展。
在解密期間,以逆序應用所述加密輪次密鑰。
因此,在操作本發明的過程中,在解密期間有必要根據W(i+Nk)和W(i+Nk-1)產生W(i)。
所述密鑰擴展過程的逆向要求規則1W(i-Nk)=W(i)W(i-1))對于所有的i,除非規則2W(i-Nk)=W(i)SubWord(RotWord(W(i-1)))Rcon(i/Nk)當i mod Nk=0,和規則3W(i-Nk)=W(i)SubWord(W(i-1))當i mod Nk=4并且Nk=8。
注意,所有的W(i-Nk)和W(i)已經互換位置,但是復雜的第二輸入與用于加密的相同。
以Nk=4為例,在加密期間產生的最后W是W(43)。在解密密鑰擴展期間,第一次加載W時,其從RAM 101加載;此后可以從Wtmp處獲得后續的W。
從而,第一步是將W(43)加載到W(在RAM上半部102的W11處找到的,OffSetCnt 3)以及將W(42)加載到Wtmp(在RAM上半部102的W10處找到的,OffSetCnt 2)。然后,我們計算W(39)=W(43)W(42)并將結果寫入到RAM 101的下半部103的W3處。然后將Wtmp的內容移動到W,接下來所述W保持W(42)并且Wtmp裝載著W(41)。
在下一周期中,我們計算W(38)=W(42)W(41)并將結果寫入到RAM 101的W1,并且我們將Wtmp的內容移動到W,接下來所述W保持W(41)并且我們將W(40)加載到Wtmp中。對相繼W重復該周期。
通常,從RAM(或從Wtmp)向寄存器W加載W(i),并且從RAM向寄存器Wtmp加載W(i-1)。然后計算W(i-Nk)并將其存儲在RAM低半部位置Wi mod 8上,而Wtmp的內容轉送到W。
與解密處理器并行運行所述解密密鑰擴展過程,所述解密處理器優選逐字運轉而不是以128位寬的分組運轉,即所述W的內容還通過所述解密引擎140以用作為解密運算的輸入。
開始,應用下列初始化設置OffSetCnt=3,OffSetHiRd=1,OffSetHiWr=0,RndCnt=4Nr+3。
在地址OffSet Cnt[OffSet Cnt=3,給定W(4Nr+3),例如對Nk=4為W(43)]讀取所述RAM 101并將其存儲在W。
然后,執行下列過程Nk-1次1.從所述上半部的WoffSetCnt-1 mod Nk處讀取所述RAM并將其存儲在Wtmp[對于Nk=4,W(42)、W(41)和W(40)]。
2.產生下一擴展密鑰字并將其寫入到RAM的在下半部的OffSetCnt[對于Nk=4,W(39)、W(38)和W(37)]。
3.將Wtmp的內容轉送到W4.遞減OffSetCnt并且遞減RndCnt。
現在已經使用來自上半部的所有字。OffSetHiRd被設置為0,因此從下半部讀取所有后面的密鑰字。例如,對于Nk=4,所述存儲器在上半部的地址3包含W(39)。
現在,重復地執行下列過程直到RndCnt=Nk-1。
1.從下半部的WoffSetCnt-1 mod Nk處讀取所述RAM并將其存儲在Wtmp。
2.產生下一輪次密鑰字并將其寫入到Wtmp和在存儲器的下半部的OffSetCnt。
3.將Wtmp的內容轉送到W4.當OffSetCnt=0時,更新Rcon5.遞減OffSetCnt和RndCnt。
此時,由所述解密處理器140使用最后的Nk個輪次密鑰字,但是我們不需要產生更多的輪次密鑰字。從而,重復地執行下列過程直到RndCnt=01.從下半部的WoffSetCnt-1 mod Nk處讀取所述存儲器并將其存儲在Wtmp中。
2.將Wtmp的內容轉送到W。
3.遞減OffSetCnt和RndCnt。
注意可以省略最后的讀取,這是因為將不會使用它。
在優選實施例中,可以用與實現加密/解密過程的子字節變換20、31相同的硬件來實現所述密鑰擴展過程中的子字(SubWord)函數55、155。實際上,據發現,如果任何延遲影響所述加密/解密過程,那么其已經是最小的了。只有在每個第N個輪次,對于相同硬件,所述密鑰擴展處理器才與所述的加密/解密過程相互競爭。
在密鑰擴展和密碼過程逐字地前后緊接進行的場合,所述密鑰擴展引擎和密碼引擎在進入下一輪次以前會彼此等待,并且每第N個輪次它們還必須等待來相互獨立地訪問S-box變換函數。然而,當所述密碼引擎執行所述移行變換21或所述混列變換22時,所述密鑰擴展處理器可以使用S-box硬件。
高效的雙向運算所需要的存儲器101的最低量是2Nk個字一半(Nk)用于存儲所述加密密鑰并且另一半用于存儲所述解密密鑰。
在加密期間,從所述加密(下)半部分取出最初的Nk個字。將所有產生的輪次密鑰字寫入所述解密(上)半部分。在加密結尾,所述解密(上)半部分保持所述解密密鑰。
在解密期間,從所述解密(上)半部分取出最初的Nk個字,其實際上是用于解密的“初始密鑰”。將所有產生的輪次密鑰字寫入所述加密(下)半部分。盡管這意味著臨時重寫所述加密密鑰,但在解密之后,重新產生所述加密密鑰。所述解密密鑰不被重寫。
因此,在第一加密過程之后,所述密鑰擴展處理器可以通過選擇從下半部103或上半部102開始來立即產生擴展加密密鑰或擴展解密密鑰。對于第一次操作,如果使用新的密鑰,就有必要執行加密運算以便產生所述解密密鑰。
有可能將存儲器的數量減少到和Nk個字一樣。然而,如果要求許多連續的加密或解密運算那么這并不是高效的,每一個必須用啞解密或加密運算填充,以便重新產生初始加密(或解密)密鑰。通常,這是不怎么希望的。
狀態機106按照如下來控制各個寄存器和計數器,適于Nk=4、6或8的所有情況。
所述3比特的上/下計數器OffSetCnt 111指向所述存儲器的每個半部分的地址。其在加密期間遞加計數;當它達到Nk-1時,它就又被重置為0。在解密期間其遞減計數。當其是0時,它被重置為Nk-1。
當OffSetCnt=0時,那么應用W(i)的規則2。當OffSetCnt=4并且Nk=8時,那么應用規則3。對于所有其它OffSetCnt值,應用規則1。
所述1比特的變量OffSetHiRd在加密期間被設置為最初指向(對于最初的Nk次讀取)所述RAM下半部分,然后對于所有后續讀取指向RAM上半部分。在解密期間,OffSetHiRd被設置為最初指向(對于最初的Nk次讀取)所述RAM上半部分,然后對于所有后續讀取指向所述RAM下半部分。所述1比特的變量OffSetHiWr在加密期間被設置為對于所有的寫入指向所述RAM上半部分102,而在解密期間對于所有寫入指向所述RAM下半部分。6位的遞減計算器RndCnt110計數輪次的數目。
再次參考圖2,所述輪次常數Rcon 58必須每個周期被更新(步驟59)、即在每次使用之后被更新。
對于第一周期,Rcon[1]=1。在每個周期之后,按照如下來更新Rcon值Rcon[i/Nk]=xtime(Rcon[i/Nk-1],即Rcon的先前值被左移,并且當最高有效位=1時,那么將十六進制值1B加到Rcon上。
依照所述AES規范,在如下之時來調用函數Rcon[i/Nk]i mod Nk=0,同時Nk≤i<Nb(Nr+1)。
對于Nk=4,在i=4、8、...40調用Rcon[i/Nk],即調用10次。最后值=36h。
對于Nk=6,在i=6、12、...48調用Rcon[i/Nk],即調用8次。最后值=80h。
對于Nk=8,在i=8、16、...56調用Rcon[i/Nk],即調用7次。最后值=40h。
在優選實施例中,以8位移位寄存器的方式實現所述RCon函數58、59,所述移位寄存器可以左移(對于加密)和右移(對于解密)。所述移位寄存器可以被預置為下列值01h、1Bh、36h、80h和40h。
對于加密,其預置為01h。其移向左邊,除了當其達到80h時,這時它預置為1Bh。
對于解密,對于Nk=4它預置為36h,對于Nk=6預置為80h以及對于Nk=8為40h。其移向右邊,除了當其達到1Bh時,這時它預置為80h。
從而,所述移位寄存器實際上具有三個控制輸入端。第一控制輸入端引起所述寄存器的左移(位循環),其在所述加密密鑰擴展的每個周期期間使用。第二控制輸入端引起所述寄存器的右移(位循環),其在所述解密密鑰擴展的每個周期期間使用。第三控制輸入端依照所述寄存器的當前值和方向(加密或解密),使所述寄存器預置為許多預先確定的值中的一個。
應當注意,從一般意義上講,本發明提供了根據初始密鑰產生擴展密鑰的相繼輪次密鑰字的方法,所述方法基本上只在需要這些產生的擴展密鑰的相繼輪次密鑰字用來產生相繼輪次密鑰字和用在密碼過程的并行操作中時,才在存儲器中保持所產生的相繼輪次密鑰字。
在該優選實施例中,所述初始密鑰字還保持在所述存儲器中。
其它實施例意欲落入所附權利要求的范圍內。
權利要求
1.一種從供加密和/或解密引擎使用的初始密碼密鑰產生擴展密鑰的相繼輪次密鑰的方法,包括步驟在存儲器的Nk個單元上存儲所述初始密鑰的Nk個字;向密碼引擎提供所述初始密鑰,以便執行第一密碼輪次;重復地獲取所述擴展密鑰的所選擇的第一個字和所選擇的第二個字,這兩個字中的至少一個字是從所述存儲器中獲取的,并且根據所選擇的第一和第二個字產生所述擴展密鑰的相繼后續字;向所述密碼引擎提供所產生的擴展密鑰字,作為用于執行后續密碼輪次的輪次密鑰;和通過循環地重寫先前產生的擴展密鑰字來在所述存儲器中存儲所產生的后續字的相繼字。
2.如權利要求1所述的方法,其中重寫先前產生字的步驟只在那些字已經在產生各自后續字的步驟中被用作所述第一和/或所述第二個選擇字之后才發生。
3.如權利要求1所述的方法,其中所使用存儲單元的數目小于所述擴展密鑰中字的數目。
4.如權利要求1所述的方法,其中所使用的存儲單元的數目等于Nk。
5.如權利要求4所述的方法,其中在所述重寫步驟期間還通過所述擴展密鑰字重寫所述初始密鑰字。
6.如權利要求1所述的方法,其中所使用的存儲單元的數目等于2Nk。
7.如權利要求1所述的方法,其中所述存儲器被分成兩個部分,第一部分存儲所述初始密鑰,第二部分接收相繼產生的所述擴展密鑰字。
8.如權利要求7所述的方法,還包括這樣完成所述擴展密鑰產生的步驟,以致把所述最終輪次密鑰存儲在存儲器的第二部分中,并且仍然把所述初始密鑰存儲在所述存儲器的第一部分中。
9.如權利要求8所述的方法,還包括從存儲在所述存儲器的第一部分的所述初始密鑰開始執行重復密鑰擴展的步驟。
10.如權利要求8所述的方法,還包括從存儲在所述存儲器第二部分的所述最終輪次密鑰開始執行逆向密鑰擴展的步驟。
11.如權利要求1至4中任何一項的方法,還包括這樣完成所述擴展密鑰的產生的步驟,以致將所述最終輪次密鑰存儲在所述存儲器中并且使得所述初始密鑰已經被重寫。
12.如權利要求11所述的方法,還包括從存儲在所述存儲器中的所述最終輪次密鑰開始執行逆向密鑰擴展的步驟,以便重新產生用于后續密碼運算的初始密鑰。
13.如權利要求7所述的方法,其中所使用的存儲單元的數目等于2Nk,第一和第二部分均具有Nk個單元。
14.如之前任一項權利要求所述的方法,其中產生所述擴展密鑰的相繼后續字的步驟包括依照AES密鑰擴展函數產生AES Rijndael分組密碼輪次密鑰的相繼字。
15.如權利要求14所述的方法,其中Nk=8。
16.如之前任一項權利要求所述的方法,其中所述擴展密鑰的相繼后續字包括加密輪次密鑰字。
17.如權利要求1到15中任一項所述的方法,其中所述擴展密鑰的相繼后續字包括解密輪次密鑰字。
18.如權利要求1所述的方法,其中向所述密碼引擎提供產生的所述擴展密鑰字的步驟包括當所述密碼引擎把這些字當作輪次密鑰耗用時逐字地提供所述字。
19.如權利要求1所述的方法,其中在所述獲取步驟,所述選擇的第一個字和選擇的第二個字均從所述存儲器獲取。
20.如權利要求1所述的方法,其中在所述獲取步驟,從存儲器中獲取所選擇的第一個字而從用于前面迭代的寄存器中獲取所選擇的第二個字。
21.如權利要求1所述的方法,其中向所述密碼引擎提供產生的所述擴展密鑰字的步驟包括提供來自所述存儲器的所述產生的字。
22.如權利要求1所述的方法,其中所述產生步驟包括,在輪次密鑰字產生的至少一些周期中,執行S-box變換的步驟,所述S-box變換使用與所述密碼引擎共享的S-box。
23.如權利要求22所述的方法,還包括保持產生相繼輪次密鑰字與由所述密碼引擎耗用所述輪次密鑰字的同步的步驟。
24.一種輪次密鑰產生器,用于根據供加密和/或解密引擎使用的初始密碼密鑰產生擴展密鑰的相繼輪次密鑰,包括存儲器,用于存儲所述初始密鑰的Nk個字;擴展處理器,用于重復地獲取所述擴展密鑰的所選擇的第一個字和所選擇的第二個字,這兩個字中的至少一個是從所述存儲器中獲取的,并且根據所選擇的第一和第二個字產生所述擴展密鑰的相繼后續字;用于向所述密碼引擎提供所產生的擴展密鑰字作為用于執行后續密碼輪次的輪次密鑰的裝置;用于通過循環地重寫先前產生的擴展密鑰字來在所述存儲器中存儲所產生的后續字的相繼字的裝置。
25.如權利要求24所述的設備,還包括用于保證只在那些先前產生的字已經被所述擴展處理器用作所述第一和/或第選個擇字之后才重寫那些先前產生的字的控制裝置。
26.如權利要求24所述的設備,其中在存儲器中字單元的數目小于所述擴展密鑰中字的數目。
27.如權利要求24所述的設備,其中在所述存儲器中字單元的數目等于Nk。
28.如權利要求27所述的設備,其中在所述重寫期間還通過所述擴展密鑰字重寫所述初始密鑰字。
29.如權利要求24所述的設備,其中在所述存儲器中字單元的數目等于2Nk。
30.如權利要求24所述的設備,其中所述存儲器被分成兩個部分,第一部分存儲所述初始密鑰并且第二部分接收相繼產生的所述擴展密鑰字。
31.如權利要求30所述的設備,其中用于存儲的裝置在完成產生所述擴展密鑰之后在所述存儲器第二部分存儲所述最終輪次密鑰并且在所述存儲器第一部分保持所述初始密鑰。
32.如權利要求31所述的設備,還包括用于從存儲在所述存儲器第一部分的所述初始密鑰開始執行重復密鑰擴展的裝置。
33.如權利要求31所述的設備,還包括從存儲在所述存儲器第二部分的所述最終輪次密鑰開始執行逆向密鑰擴展的裝置。
34.如權利要求24至27中任一項的設備,還包括用于完成所述擴展密鑰的產生以致將所述最終輪次密鑰存儲在所述存儲器中并且使得所述初始密鑰已經被重寫的裝置。
35.如權利要求34所述的設備,還包括用于從存儲在所述存儲器中的所述最終輪次密鑰開始執行逆向密鑰擴展以便重新產生用于后續密碼運算的初始密鑰的裝置。
36.如權利要求30所述的設備,其中在存儲器中字單元的數目等于2Nk,第一和第二部分均具有Nk個單元。
37.如之前任一項權利要求所述的設備,其中所述擴展處理器包括用于依照AES密鑰擴展函數產生所述AES Rijndael分組密碼輪次密鑰的相繼字的裝置。
38.如權利要求37所述的設備,其中Nk=8。
39.如之前任一項權利要求所述的設備,其中所述擴展處理器產生加密輪次密鑰字。
40.如權利要求24到38中任一項所述的設備,其中所述擴展密鑰處理器產生解密輪次密鑰字。
41.如權利要求24所述的設備,還包括密碼引擎,和用于當所述密碼引擎把這些字當作輪次密鑰耗用時逐字地向所述密碼引擎提供所述產生的擴展密鑰字的裝置。
42.如權利要求24所述的設備,還包括用于從所述存儲器獲取所選擇的第一個字和所選擇的第二個字的裝置。
43.如權利要求24所述的設備,還包括用于從存儲器獲取所選擇的第一個字和從所述擴展處理器中的寄存器獲取所選擇的第二個字的裝置。
44.如權利要求1所述的設備,還包括密碼引擎,在所述密碼引擎中,所述擴展處理器和所述密碼引擎共享S-box。
45.如權利要求44所述的設備,還包括用于保持所述擴展處理器和所述密碼引擎之間的同步的裝置。
46.一種智能卡,包括根據權利要求24到45中任一項所述的輪次密鑰產生器。
47.一種根據初始密鑰產生擴展密鑰的相繼輪次密鑰字的方法,所述方法基本上只在要求所述產生的擴展密鑰的相繼輪次密鑰字用來產生相繼輪次密鑰字和用在密碼過程的并行操作中時,才在存儲器中保持所產生的相繼輪次密鑰字。
48.如權利要求47所述的方法,其中還在產生所述擴展密鑰的整個過程期間在所述存儲器中保持所述初始密鑰字。
49.一種包括移位寄存器的AES輪次常數函數產生器,具有第一控制輸入端,用于使寄存器內容左移;第二控制輸入端,用于使所述寄存器內容右移;和第三控制輸入端,用于使所述移位寄存器內容預置為一些可能值中的一個。
50.如權利要求49所述的設備,其中所述第三控制輸入端使所述移位寄存器內容預置為依照寄存器當前內容所確定的值。
51.如權利要求49所述的設備,其中所述一些可能的值是十六進制的01、1B、36、80和40。
52.如權利要求49所述的設備,其中對于每個AES加密運算的輪次都把第一控制輸入端置為有效一次,并且其中對于每個AES解密運算輪次都把第二控制輸入端置為有效一次。
53.一種基本參考附圖在此所描述的的設備。
54.一種基本上參考附圖在此所描述的方法。
全文摘要
當執行密碼過程時,依照所述AES分組密碼算法根據初始密鑰實時地產生擴展密鑰的相繼輪次密鑰,所述初始密鑰供密碼(加密和/或解密)引擎使用。通過重寫先前產生的所述擴展密鑰字,只在所述存儲器中留下所述初始密鑰和最終密鑰字,以只使用有限的密鑰存儲器。從而,在不對所述密碼引擎產生延遲的情況下,可以在所述加密或解密方向上重新開始后續的密碼運算。
文檔編號G09C1/00GK1663172SQ03814926
公開日2005年8月31日 申請日期2003年6月12日 優先權日2002年6月25日
發明者G·T·M·胡伯特 申請人:皇家飛利浦電子股份有限公司