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