專利名稱:包括執(zhí)行變換序列以隔離一個變換的指令的指令組合的制作方法
包括執(zhí)行變換序列以隔離一個變換的指令的指令組合
領(lǐng)域
本發(fā)明公開涉及高級加密標(biāo)準(zhǔn)(AES),尤其涉及使用包括執(zhí)行AES的 變換序列的子集以提供AES之一結(jié)果的指令在內(nèi)的指令的組合。
祖旦 冃爾
密碼學(xué)是一種依賴于算法和密鑰來保護信息的工具。算法是復(fù)雜的數(shù)學(xué)算
法,而密鑰是一串位。有兩種基本類型的密碼學(xué)系統(tǒng)私鑰系統(tǒng)和公鑰系統(tǒng)。
也被稱為對稱系統(tǒng)的私鑰系統(tǒng)具有由兩方或更多方共享的單個密鑰("私鑰")。
單個密鑰用于加密和解密信息。
由國家標(biāo)準(zhǔn)技術(shù)研究所(NIST)公布作為聯(lián)邦信息處理標(biāo)準(zhǔn)(FIPS) 197 的高級加密標(biāo)準(zhǔn)(AES)是私鑰系統(tǒng)。AES是可加密和解密信息的對稱塊密碼。
加密(密碼)利用私鑰(密碼密鑰)執(zhí)行變換序列以將稱為"明文"的可 理解數(shù)據(jù)變換成稱為"密文"的不可理解形式。密碼中的變換可包括(1) 利用異或(XOR)運算將輪回(round)密鑰(從密碼密鑰導(dǎo)出的值)加至狀 態(tài)(字節(jié)的二維陣列);(2)利用非線性字節(jié)替換表(S-Box)處理狀態(tài);(3) 以不同的偏移循環(huán)地移位狀態(tài)的最后三行;以及(4)取出狀態(tài)的所有列并混 合它們的數(shù)據(jù)(相互獨立地)以產(chǎn)生新的列。
解密(逆向譯碼)利用密碼密鑰執(zhí)行變換序列以將"密文"塊變換成相同 大小的"明文"塊。逆向譯碼中的變換是密碼中的逆變換。
在AES標(biāo)準(zhǔn)中指定Rijindael算法來利用長度是128位、192位和256位 的密碼密鑰處理128位數(shù)據(jù)塊。通??蓪⒉煌拿荑€長度稱為AES-128、 AES-192和AES-256。
AES算法在10、 12或14個連續(xù)輪回中將明文變換成密文或?qū)⒚芪淖儞Q 成明文,且輪回的數(shù)量取決于密鑰的長度。
附圖簡述
在參照附圖進(jìn)行以下的詳細(xì)描述時所要求保護的主題的實施例的特征將 變得顯而易見,其中相似的附圖標(biāo)記描述相似的部件,附圖中
圖1是包括在通用處理器中執(zhí)行AES加密和解密的指令的系統(tǒng)的框圖; 圖2是圖1所示的處理器的實施例的框圖3是利用至少一個AES輪回指令隔離AES算法中的混合列(Mix Column)變換的混合列隔離變換函數(shù)的實施例的流程圖4是利用至少一個AES輪回指令隔離AES算法中的混合列逆變換的混 合列隔離逆變換函數(shù)的實施例的流程圖5示出使用壓縮混洗字節(jié)(PSHUFB)指令來隔離移行和移行逆變換;
圖6是利用至少一個AES輪回指令隔離AES算法中的替換字節(jié)變換的替 換字節(jié)隔離變換函數(shù)的實施例的流程圖;以及
圖7是利用至少一個AES輪回指令隔離AES算法中的替換字節(jié)逆變換的
替換字節(jié)隔離逆變換函數(shù)的實施例的流程盡管以下的詳細(xì)描述將參照所要求保護主題的說明性實施例進(jìn)行,但它的 很多替換、修改和變化對本領(lǐng)域的技術(shù)人員是顯而易見的。因此,旨在廣泛地 理解所要求保護的主題,并且僅按照所附權(quán)利要求中闡述地限定所要求保護的 主題。
詳細(xì)描述
由國家標(biāo)準(zhǔn)技術(shù)研究所(NIST)公布作為聯(lián)邦信息處理標(biāo)準(zhǔn)(FIPS) 197 的高級加密標(biāo)準(zhǔn)(AES)是通常在軟件或?qū)S锰幚砥髦袌?zhí)行的計算密集算法。 AES算法在軟件中通過執(zhí)行存儲在存儲器中的加載/存儲/遞增中央處理單元
(CPU)指令序列來執(zhí)行。該變換很慢,因為AES算法消耗很多CPU周期來 變換明文或密文的每個字節(jié)。因此,加密一般僅用于加密計算機中存儲的信息 的子集,例如,可被歸類為"絕密"的信息。然而,需要加密更多存儲在計算 機上的信息。例如,如果加密存儲在移動計算機中的所有信息,則在移動計算 機丟失的情況下可保護該信息。
AES是對128位塊運算的塊密碼,且密鑰大小是128、 192或256位。AES 算法在10、12或14個連續(xù)輪回中將128位明文塊變換成128位密文塊(加密), 或?qū)?28位密文塊變換成128位明文塊(解密),且輪回的數(shù)量取決于密鑰的 大小(128、 192或256位)。對于每個輪回(10、 12或14)重復(fù)一變換序列
(子步驟)。
6加密輪回的變換序列包括
(1) AddRoundKey (加輪回密鑰)變換利用異或(XOR)運算將輪回 (round)密鑰(從密碼密鑰導(dǎo)出的值)加至狀態(tài)(字節(jié)的二維128位陣列)。
AddRoundKey是(128位,128位)一128位變換,該變換被定義為其兩個自 變量的逐位異或(XOR)。在AES流中,自變量是狀態(tài)和輪回密鑰。
(2) SubBytes (替換字節(jié))變換利用非線性字節(jié)替換表(S-Box)處理狀 態(tài)。SubBytes是通過將S-box變換施加到輸入的16字節(jié)中的每一個所定義的 16字節(jié)至16字節(jié)(逐字節(jié))變換。S-box變換可由査找表表示如下査找表 的輸入是字節(jié)[7:0],其中x和y指示低四位和高四位x[3:0]二B[7:4], y[3:0]= B[3:0]。輸出字節(jié)在表中被編碼為十六進(jìn)制(H)記數(shù)法的兩個數(shù)字。例如, 輸入85H得到97H。
(3) ShiftRows (移行)變換以不同的偏移循環(huán)地移位狀態(tài)的最后三行。 ShiftRows是以下的逐字節(jié)排列(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) —(11, 6, 1, 12, 7, 2, 13, 8, 3, 14, 9, 4, 15, 10, 5, 0)。將該變換看作對狀態(tài)的4x4 矩陣表示的運算。4x4矩陣中的第一行是不變的。使第二行左旋轉(zhuǎn)一字節(jié)位置。 使第三行左旋轉(zhuǎn)二字節(jié)位置。使第四行左旋轉(zhuǎn)三字節(jié)位置。
(4) MixColumns (混合列)變換混合來自狀態(tài)的所有列的數(shù)據(jù)(相互 獨立地)以產(chǎn)生新的列。MixColumns是對輸入的44矩陣表示的列進(jìn)行運算 的128位一128位變換。該變換將每個列視為帶有AES-伽羅瓦字段256中的系 數(shù)的三次多項式。狀態(tài)的44矩陣表示的每個列乘以多項式a(x) = {03}x3 + {01}x2+{01}x+{02}并取模(reduced modulo) x4+l。
針對上述加密輪回的變換序列可通過如下表1所示的單個AES加密輪回 指令A(yù)ESENC來執(zhí)行,且針對最后加密輪回的變換序列通過如下表2所示的 單個AES最后加密輪回指令A(yù)ESENCLAST執(zhí)行。
AESENC xmml, xmm2/ml28
狀態(tài)=xmml;
輪回密鑰=xmm2/ml28;
Tmp-移行(狀態(tài));
Tmp-替換字節(jié)(Tmp);
7Tmp一昆合列(Tmp);
Output = xmm 1 =加輪回密鑰(Tmp, Round Key) 表1
AESENCLAST xmml, xmm2/ml28 狀態(tài)=xmml; 輪回密鑰=xmm2/ml28; Tmp一多行(狀態(tài)); Tmp-替換字節(jié)(Tmp);
輸出=xmml=加輪回密鑰(Tmp, Round Key) 表2
表1和表2中所示的AESENC和AESENCLAST指令對狀態(tài)(xmm寄 存器中指定的128位)和輪回密鑰(xmm寄存器中或作為存儲器指針指定的 128位)或?qū)γ荑€(xmm寄存器和/存儲器中指定的128位、192位或256位) 執(zhí)行某些變換序列。這些指令產(chǎn)生128位輸出。利用FIPS公布197的術(shù)語, 描述對應(yīng)的128位一128位變換序列。
如FIPS公布197所定義的,以上表1和表2中所示的AES指令 (AESENC, AESENCLAST)串行處理存儲在128位變量(temp)(也稱為狀 態(tài))中的數(shù)據(jù)。在以下的表3中示出用于處理N個數(shù)據(jù)塊的串行運算序列的示 例。
For i從1至U N—BLOCKS do xmml = BLOCK [i] 〃加載 xmml = AESENC (xmml, RK [l]) xmml = AESENC (xmml, RK [2]) xmml = AESENC (xmml, RK [3])
xmml = AESENC (xmml, RK [9〗) xmml = AESENCLAST(xmml, RK [10]) 存儲xmml表3
對于待加密的N—Block中的每一個,數(shù)據(jù)塊被存儲在寄存器中,例如 具有128位的xmm寄存器(xmml)可用于存儲128位塊。對數(shù)據(jù)塊串行執(zhí)行 10次加密輪回。對于10次輪回AES運算的輪回1至9,調(diào)用AESENC指令以 利用輪回密鑰和前一輪回的結(jié)果或初始塊數(shù)據(jù)(在輪回1時)來執(zhí)行輪回運算。 調(diào)用AESENCLAST指令來處理最后的輪回(在該示例中為輪回10)。
解密輪回的變換序列包括-(1) AddRoundKey (加輪回密鑰)變換利用異或(XOR)運算將輪 回(round)密鑰(從密碼密鑰導(dǎo)出的值)加至狀態(tài)(字節(jié)的二維128位陣列)。 AddRoundKey是(128位,128位)一128位變換,該變換被定義為其兩個自 變量的逐位異或(XOR)。在AES流中,自變量是狀態(tài)和輪回密鑰。
逆替換字節(jié)(SubBytes)變換利用非線性字節(jié)逆替換表(S-Box)處 理狀態(tài)。逆替換字節(jié)是通過將InvS-Box函數(shù)施加到輸入的每個字節(jié)來定義的 16字節(jié)一16字節(jié)(逐字節(jié))變換,艮P[P, O, N, M, L, K, J, I, H, G, F, E, D, C, B, A] —[InvS-Box (P), InvS-Box (O), InvS國Box (N), InvS-Box (M), InvS-Box (L), InvS國Box (K), InvS-Box (J), InvS-Box (I), InvS-Box (H), InvS-Box (G), InvS陽Box (F), InvS-Box (E), InvS-Box (D), InvS-Box (C), InvS-Box (B), InvS-Box (A)]。
(3) ShiftRows (移行)逆變換這種變換是ShiftRows變換的逆變換。 ShiftRows逆變換是以下的逐字節(jié)排列(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,0)—(3, 6,9, 12, 15,2, 5, 8, 11, 14, 1,4,7, 10, 13,0)。在P-A符號中,它讀取 [P,O,N,M,L,K,J,I,H,G,F,E,D,C,B,A] — [D,G,J,M,P,C,F(xiàn),I,L, O,B,E,H,K,N,A]。
MixColumns逆變換是對輸入的4x4矩陣表示的列運算的128位一128 位變換。該變換將4x4矩陣中的每個列視為帶有AES-GF256-Field中的系數(shù)的 三次多項式。狀態(tài)的44矩陣表示的每個列乘以多項式a—、x) = {0b}x3 + {0d}x2+ {09}x+《0e)并取模x4+ 1。
針對上述加密輪回的變換序列可通過如下表4所示的單個AES加密輪 回指令A(yù)ESDEC來執(zhí)行,且針對最后加密輪回的變換序列通過如下表5所示 的單個AES最后加密輪回指令A(yù)ESDECCLAST執(zhí)行。
以下表4和表5中所示的AESDEC和AESDECLAST指令對狀態(tài)(xmm寄存器中指定的128位)和輪回密鑰(xmm寄存器中或作為存儲器指針指定 的128位)或?qū)γ荑€(xmm寄存器和/存儲器中指定的128位、192位或256 位)執(zhí)行某些變換序列。這些指令產(chǎn)生128位輸出。利用FIPS公布197的術(shù) 語,描述對應(yīng)的128位一128位變換序列。
AESDEC xmml, xmm2/ml28
狀態(tài)=xmml;
輪回密鑰=xmm2/ml28;
Tmpz逆移行(狀態(tài));
Tmpz逆替換字節(jié)(Tmp);
Tmp:逆混合列(Tmp二);
輸出二xmml-加輪回密鑰(Tmp^輪回密鑰) 表4
AESDECLAST xmml, xmm2/ml28 狀態(tài)=xmml; 輪回密鑰=xmm2/ml28 Tmp^逆移行(State); Tmp-逆替換字節(jié)(Tmp); 輸出=xmml -加輪回密鑰(Tmp, Round Key) 表5
表1、 2、 4禾B 5所示的四個AES輪回指令(AESENC、 AESNECLAST、 AESDEC、 AESDECLAST)中的每一個通過共同執(zhí)行數(shù)個AES變換而提升性 能。然而,指令僅支持AES標(biāo)準(zhǔn)的當(dāng)前版本。
本發(fā)明的實施例使用包括AES加密和解密指令的指令組合來獲取AES 算法的子步驟(變換)作為隔離的變換。隔離的變換包括由加密AES指令 (AESENC、 AESENCLAST)所使用的移行、替換字節(jié)和混合列變換以及由解 密AES指令(AESDEC、 AESDECLAST)所使用的逆移行、逆替換字節(jié)和混 合列逆變換。
隔離變換的能力增加了使用AES加密和解密指令的靈活性。例如,獲 取AES算法的子步驟(變換)的能力允許構(gòu)造AES變量,并允許支持AES標(biāo)準(zhǔn)中的可能未來修改。還允許將AES原語(變換)用作其它密碼和密碼學(xué)散
列函數(shù)的構(gòu)建塊。
圖1是包括在通用處理器中執(zhí)行AES加密和解密的指令的系統(tǒng)100的框 圖。系統(tǒng)100包括處理器101、存儲器控制器集線器(MCH)或(圖形存儲器 控制器集線器(GMCH) ) 102和輸入/輸出(I/O)控制器集線器(ICH) 104。 MCH 102包括控制處理器101和存儲器108之間的通信的存儲器控制器106。 處理器101和MCH 102通過系統(tǒng)總線116通信。
處理器101可以是諸如單核Intel Pentium IV⑧處理器、單核Intel Celeron 處理器、Intel XScale處理器或諸如Intel Pentium D、 Intel Xeon⑧處理器或 Intel Core Duo處理器之類的多核處理器或任何其它類型的處理器等多個處 理器中的任一個。
存儲器108可以是動態(tài)隨機存取存儲器(DRAM)、靜態(tài)隨機存取存儲器 (SRAM)、同步動態(tài)隨機存取存儲器(SDRAM)、雙數(shù)據(jù)率2 (DDR2) RAM或 Rambus動態(tài)隨機存取存儲器(RDRAM)或任何其它類型的存儲器。
ICH 104可利用諸如直接媒體接口(DMI)之類的高速芯片至芯片互連114 耦合到MCH 102。DMI支持經(jīng)由兩個單向線路的2千兆位/秒的并發(fā)傳輸速率。 ICH 104可包括用于控制耦合至ICH 104的至少一個存儲設(shè)備112的通 信存儲I/0控制器110。存儲設(shè)備可以是例如盤驅(qū)動器、數(shù)字視頻盤(DVD) 驅(qū)動器、緊致盤(CD)驅(qū)動器、獨立盤冗余陣列(RAID)、磁帶驅(qū)動器或其 它存儲設(shè)備。ICH 104可通過存儲協(xié)議互連118利用諸如串行連接小型計算機 系統(tǒng)接口 (SAS)或串行高級技術(shù)附件(SATA)的串行存儲協(xié)議與存儲設(shè)備 112通信。
處理器101包括執(zhí)行AES加密和解密運算的AES函數(shù)103。 AES函數(shù) 103可用于加密或解密可存儲在存儲器108和/或存儲在存儲設(shè)備112中的信 息。
可存儲在存儲器108中或存儲設(shè)備112中的變換隔離函數(shù)120使用AES 函數(shù)103來隔離AES加密或解密指令中的變換之一。稍后將結(jié)合圖3-7描述變 換隔離函數(shù)120。
圖2是圖1所示的處理器101的實施例的框圖。處理器101包括用于解碼從l級(Ll)指令高速緩存202接收的處理器指令的取出(fetch)和解碼單元 206。用于執(zhí)行處理器指令的數(shù)據(jù)可被存儲在寄存器堆(register file) 208中。 在一個實施例中,寄存器堆208包括多個128位寄存器,它們被AES輪回指 令用于存儲由AES輪回指令所使用的數(shù)據(jù)。
在一個實施例中,寄存器堆208是一組與設(shè)置在Intel PentiumMMX處理 器中的具有(單指令多數(shù)據(jù)(SIMD))流送擴展(SSE)指令集的128位MMX 寄存器的128位寄存器。在SIMD處理器中,通過一次加載一個128位塊 來分128位塊地處理數(shù)據(jù)。
取出和解碼單元206從Ll指令高速緩存202取出宏指令,解碼宏指令 并將其分成可存儲在微碼只讀存儲器(ROM) 214中的稱為微運算(pops)的 簡單運算。流水線化的執(zhí)行單元210編排并執(zhí)行微運算。在所示的實施例中, 執(zhí)行單元210中的AES函數(shù)103包括對含有AES加密/解密輪回指令的AES 輪回指令集的微運算。AES輪回指令是完全流水線化的使得處理器(CPU)可 在每個周期分派指令,如果有數(shù)據(jù)準(zhǔn)備好要處理的話。退役單元212將所執(zhí)行 的指令的結(jié)果寫入寄存器或存儲器。AES輪回指令所使用的輪回密鑰216可被 存儲在L1數(shù)據(jù)高速緩存204中并加載到執(zhí)行單元210,由微運算用其執(zhí)行AES 加密/解密輪回指令中的任一個。在Ll數(shù)據(jù)高速緩存204中存儲輪回密鑰216 保護輪回密鑰216免受側(cè)面信道攻擊,例如嘗試獲取輪回密鑰以便獲得存儲在 系統(tǒng)100中的加密信息。
在AES輪回指令已經(jīng)被取出和解碼單元206解碼之后,由執(zhí)行單元210 執(zhí)行AES輪回指令包括執(zhí)行與可存儲在微碼ROM 214中的AES輪回指令相 關(guān)聯(lián)的微運算。
在一實施例中,提供AES輪回指令集,其包括用于執(zhí)行加密輪回、解 密輪回、加密最后輪回和解密最后輪回的單獨AES輪回指令。在實施例中, 每個AES輪回指令具有唯一的運算碼(opcode)。
正如結(jié)合表l、 2、 4和5已經(jīng)討論的,AES指令集包括四個AES輪回 指令(加密、解密、加密最后輪回、解密最后輪回)。AES指令集中的AES 輪回指令包括單個輪回運算以執(zhí)行將用于除最后輪回以外的所有輪回的加密 和解密輪回運算。例如,在表1所示的AESENC單輪回指令中,輸入數(shù)據(jù)被存儲在128 位寄存器(xmmsrcdst)中且輪回密鑰被存儲在另一個128位寄存器(Xmm)中。該 指令對存儲在128位xmmsrcdst寄存器中的輸入數(shù)據(jù)(源)執(zhí)行AES輪回運算, 并用輪回運算的執(zhí)行結(jié)果重寫存儲在128位xmmsrcdst寄存器中的輸入數(shù)據(jù)。 因此xmmsrcdst首先存儲輸入數(shù)據(jù),稍后存儲AES輪回運算的結(jié)果。
例如,在表2所示的AESENCLAST單輪回指令中,輸入數(shù)據(jù)被存儲在 128位寄存器(xmmsrcdst)中且輪回密鑰被存儲在另一個128位寄存器(Xmm) 中。該指令對存儲在xmmsrcdst寄存器中的輸入數(shù)據(jù)(源)執(zhí)行AES輪回運算, 并用輪回運算的執(zhí)行結(jié)果重寫存儲在xmmsrcdst寄存器中的輸入數(shù)據(jù)。因此 xmmsrcdst首先存儲輸入數(shù)據(jù),稍后存儲輪回運算的結(jié)果。Xmm寄存器存儲用 于輪回運算的輪回密鑰。
密鑰的大小可以是128位、192位或256位。將執(zhí)行的輪回次數(shù)(n)可 以是1、 10、 12或14,這取決于密鑰的大小,且每個輪回密鑰是固定大小的(128 位)。利用值為10、 12、 14的多次輪回,AES微運算可針對128位、192位 或256位的密鑰大小執(zhí)行標(biāo)準(zhǔn)AES加密和解密。
當(dāng)將相同的密鑰用于很多塊時,可將用于每次輪回的輪回密鑰(密鑰編 排)預(yù)先計算并存儲在存儲器中(例如輪回密鑰216存儲在1級數(shù)據(jù)高速緩存 204中)。輪回密鑰216可包括具有IO個元素的陣列(RK)以存儲用于該密 鑰的密鑰編排。用于AES-128加密的輸入密鑰被存儲在RK
中,且預(yù)先計算 9個輪回密鑰RK
-RK[l]。
在一個實施例中,寄存器堆304具有可由AES指令使用的多個128位 寄存器。128位寄存器可存儲源運算數(shù)、輪回密鑰和AES指令的結(jié)果。對于第 一輪回,AES指令接收可以是待加密的128位明文或待解密的128位密文的源 運算數(shù)。
在本發(fā)明的實施例中,前面描述的AES指令集(AESENC、 AESDEC、 AESENCLAST、 AESDECLAST)可用于隔離由FIPS 197定義的AES算法的
子步驟(變換)。該子步驟是移行、替換字節(jié)、混合列、逆移行、逆替換字節(jié) 和逆混合列。
六個子步驟(變換)對128位狀態(tài)進(jìn)行運算并產(chǎn)生128位結(jié)果。"逆向"變換是變換的相對應(yīng)的逆變換,例如,如果Tmp-替換字節(jié)(狀態(tài)),則逆替換 字節(jié)CTmp一狀態(tài)。加輪回密鑰變換對兩個128位輸入(狀態(tài)和輪回密鑰)進(jìn)行 運算,并輸出其逐位XOR。
圖3是利用至少一個AES輪回指令隔離AES算法中的混合列變換的混 合列隔離變換函數(shù)300的實施例的流程圖。
針對混合列變換的微運算僅在表1所示的AESENC指令中使用。 AESDEC指令包括對AESENC指令中變換的逆變換。
在框302,混合列變換隔離函數(shù)調(diào)用AESDECLAST指令,且當(dāng)前狀態(tài) 和輪回密鑰被設(shè)置為0。 AESDECLAST執(zhí)行以下表6所示的微運算。 Tmp =逆移行(狀態(tài)) Tmp :逆替換字節(jié)(Tmp) Tmp = AddRoundKey (Tmp,輪回密鑰) 表6
首先,對狀態(tài)執(zhí)行移行逆變換,并將變換的結(jié)果存儲在Tmp中。接下 來,對Tmp的內(nèi)容執(zhí)行替換字節(jié)逆變換并將結(jié)果存儲在Tmp中。最后,對Tmp 的內(nèi)容和設(shè)置為0的輪回密鑰執(zhí)行AddRoundKey變換。AddRoundKey微運 算基本上是NOP (無運算),因為對Tmp的內(nèi)容和O執(zhí)行異或運算且結(jié)果是 Tmp的內(nèi)容。然后,將AESENCLAST指令的輸出X作為輸入提供給AESENC 指令。
在框304, AESENC指令接收AESDECLAST指令的結(jié)果(X)。結(jié)果 X是逆替換字節(jié)(逆移行(狀態(tài))),即對狀態(tài)的兩個變換逆替換字節(jié)和逆移 行的結(jié)果。AESINC指令的輸入是AESBECLAST指令和設(shè)置為0的輪回密鑰 的結(jié)果。AESENC指令執(zhí)行以下表7所示的微運算。 Tmpl =移行(X) Tmpl =替換字節(jié)(Tmpl) Tmpl =混合列(Tmpl) Tmpl = AddRoundKey (Tmpl,輪回密鑰) 表7
首先,對輸入X執(zhí)行移行變換,并將變換的結(jié)果存儲在Tmp中。接下
14來,對Tmp的內(nèi)容執(zhí)行替換字節(jié)變換并將結(jié)果存儲在Tmp中。接下來,對Tmp 的內(nèi)容執(zhí)行混合列變換。最后,對Tmp的內(nèi)容和為0的輪回密鑰執(zhí)行 AddRoundKey變換。AddRoundKey微運算基本上是NOP (無運算),因為 對Tmp的內(nèi)容和0執(zhí)行異或運算且結(jié)果是Tmp的內(nèi)容。AESENCLAST指令 和AESENC指令的組合隔離混合列變換,因為AddRo皿dKey微運算執(zhí)行 NOP,且其它微運算(移行、替換字節(jié))通過執(zhí)行逆微運算(逆移行、逆替換 字節(jié))進(jìn)行換算。
因此,AESENC指令的輸出是利用如下所示的AESDECLAST指令和 AESENC指令的組合隔離的混合列(狀態(tài))。
Y =逆混合列(逆替換字節(jié)(逆移行(替換字節(jié)(移行(狀態(tài))))) 圖4是利用至少一個AES輪回指令隔離AES算法中的混合列逆變換的混 合列隔離逆變換函數(shù)400的實施例的流程圖。
針對混合列逆變換的微運算僅在表2所示的AESENCLAST指令中使用。 AESDEC指令包括對AESENC指令中的變換的逆變換。
在框402,混合列逆變換隔離函數(shù)400中的第一指令是在輪回密鑰設(shè)置為 0的情況下調(diào)用的AESENCLAST指令。AESENCLAST指令執(zhí)行下表8所示的
微運算
Tmp=移行(State) Tmp=替換字節(jié)(Tmp) Tmp = AddRoundKey (Tmp,輪回密鑰) 表8
首先,對狀態(tài)執(zhí)行移行變換,并將變換的結(jié)果存儲在Tmp中接下來,對 Tmp的內(nèi)容執(zhí)行替換字節(jié)變換并將結(jié)果存儲在Tmp中。最后,對Tmp的內(nèi)容 和為0的輪回密鑰執(zhí)行AddRoundKey變換。AddRoundKey微運算基本上是 無運算(NOP),因為利用Tmp的內(nèi)容和O執(zhí)行異或運算且XOR運算的結(jié)果 是Tmp的原始內(nèi)容。AESENCLAST指令的輸出X被輸入到AESECC指令。
在框404,混合列逆變換隔離函數(shù)中的第二指令是向其提供 AESENCLAST指令的結(jié)果(X)的AESDEC指令。結(jié)果X是替換字節(jié)(移行 (狀態(tài))),即對狀態(tài)的兩個變換替換字節(jié)和移行的結(jié)果。AESDEC指令的輸入是AESENCLAST指令和設(shè)置為0的輪回密鑰的結(jié)果。AESDEC指令
執(zhí)行下表9所示的微運算。 Tmp=逆移行(X) Tmp :逆替換字節(jié)(Tmp) Tmp 二逆混合列(Tmp)
Tmp = AddRoundKey (Tmp,輪回密鑰)
表9
首先,對輸入X執(zhí)行移行逆變換,并將變換的結(jié)果存儲在Tmp中接下來, 對Tmp的內(nèi)容執(zhí)行替換字節(jié)逆變換并將結(jié)果存儲在Tmp中。然后,對Tmp的 內(nèi)容進(jìn)行混合列逆變換。最后,對Tmp的內(nèi)容和為0的輪回密鑰執(zhí)行 AddRoundKey變換。AddRoundKey微運算基本上是NOP (無運算),因為對 Tmp的內(nèi)容和0執(zhí)行異或運算且結(jié)果是Tmp的內(nèi)容。
因此,AESENCLAST指令和AESENC指令的組合隔離混合列逆變換,因 為AddRoundKey微運算執(zhí)行NOP,且其它微運算(移行、替換字節(jié))通過執(zhí) 行逆微運算(逆移行、逆替換字節(jié))進(jìn)行換算。因此,AESDEC指令的輸出是 通過組合由如下所示的AESENCLAST指令所執(zhí)行的變換和AESDEC指令所執(zhí) 行的變換隔離的逆混合列(狀態(tài))。
Y=逆混合列(逆替換字節(jié)(逆移行(替換字節(jié)(移行(狀態(tài)))))
因此,兩個AES指令序列的結(jié)果是隔離的混合列逆變換。
圖5示出使用壓縮混洗字節(jié)(PSHUFB)指令來隔離移行變換和移行逆變 換。狀態(tài)500具有標(biāo)記為A-L的16個字節(jié)(128位)。PSHUFB指令具有兩 個128位輸入,其可被稱為字節(jié)A和B的兩個寄存器。PSHUFB指令取出字 節(jié)A = [a15 al4 a13 ... a。]和B = [b15 b14 b13…b。]的兩個寄存器,并用^15 abl4 abl3… aw)]取代寄存器A。如果b,的最高位被設(shè)置為1,則結(jié)果的第i位條目是0。
在圖5所示的示例中,狀態(tài)500對應(yīng)于字節(jié)A二[a,5aMa,3…ao]。移行變 換的結(jié)果在狀態(tài)502中示出。為了執(zhí)行移行變換,將字節(jié)B二[t^b,4bu…bo] 設(shè)置成'0B06010C07020D08030E0卯40F0A0500'(十六進(jìn)制)。將狀態(tài)500 的字節(jié)[15:0]移到狀態(tài)502的位位置(3, 6, 9, 12, 15, 2, 5, 8, 11, 14, 1, 4, 7, 10, 13, 0)。例如,狀態(tài)500的標(biāo)記為"A"的字節(jié)
被移到狀態(tài)502的字節(jié)
,而狀 態(tài)500的標(biāo)記為"L"的字節(jié)[15]被移到狀態(tài)502的字節(jié)[11] "B"。
16利用字節(jié)A被設(shè)置成狀態(tài)502而字節(jié)B被設(shè)置成'0306090C0F0205080B 0E0104070A0D00'(十六進(jìn)制)的PSHUSB指令對狀態(tài)502執(zhí)行移行逆變換。將 狀態(tài)500的字節(jié)[15:0]移到狀態(tài)502的位位置(3,6, 9, 12, 15,2,5,8, 11, 14, 1,4, 7, 10, 13, 0)。例如,狀態(tài)502的標(biāo)記為"A"的字節(jié)
, 而狀態(tài)500的標(biāo)記為"L"的字節(jié)[15]被移到狀態(tài)504的字節(jié)[3]。
因此,可基于B字節(jié)的選擇利用PSHUFB指令執(zhí)行移行變換和移行逆變 換,即'0B06010C07020D08030E09040F0A0500'(十六進(jìn)制)用于執(zhí)行移行變換 而'0306090C0F0205080B0E0104070A0D00'(十六進(jìn)制)用于執(zhí)行移行逆變換。
圖6是利用至少一個AES輪回指令隔離AES算法中的替換字節(jié)變換的替 換字節(jié)隔離變換函數(shù)600的實施例的流程圖。
針對替換字節(jié)變換的微運算在表2所示的AESENCLAST指令和表1所 示的AESENC指令中使用。在結(jié)合圖5所述的實施例中,AESENCLAST指令
用于隔離替換字節(jié)變換。
在框602,在B寄存器被設(shè)置為0306090C0F0205080B0E0104070A0D00
(十六進(jìn)制)以對狀態(tài)執(zhí)行逆移行的情況下,調(diào)用替換字節(jié)隔離變換函數(shù)600的 PSHUFB指令。如前面結(jié)合圖5所討論的,移行逆變換基于B寄存器中存儲的
相應(yīng)字節(jié)位置執(zhí)行狀態(tài)中字節(jié)的排列。
在框604,利用PSHUFB指令的結(jié)果(X),調(diào)用替換字節(jié)變換隔離函 數(shù)600中的AESDECLAST指令。AESDECLAST指令的輸入是PSHUFB指令 和設(shè)置為0的輪回密鑰的結(jié)果。AESDECLAST指令執(zhí)行下表IO所示的微運算。 Tmp =移行(X) Tmp =替換字節(jié)(Tmp) Tmp = AddRoundKey (Tmp,輪回密鑰) 表10
首先,對輸入X執(zhí)行移行變換,并將變換的結(jié)果存儲在Tmp中。接下 來,對Tmp的內(nèi)容執(zhí)行替換字節(jié)變換并將結(jié)果存儲在Tmp中。最后,對Tmp 的內(nèi)容和為0的輪回密鑰執(zhí)行AddRoundKey變換。AddRoundKey微運算基本 上是NOP(無運算),因為對Tmp的內(nèi)容和O執(zhí)行異或運算且結(jié)果是Tmp的 內(nèi)容。PSHUFB指令和AESENCLAST指令的組合隔離替換字節(jié)變換,因為AddRoundKey微運算執(zhí)行NOP,且其它微運算(移行)通過由PSHUFB指令 所執(zhí)行逆微運算(逆移行)進(jìn)行換算。因此,AESENCLAST指令的輸出是利 用如下所示的AESENCLAST指令和PSHUFB指令的組合隔離的替換字節(jié)(狀 態(tài))。
Y =替換字節(jié)(移行(乂))=替換字節(jié)(移行(逆移行(狀態(tài))))=替換字節(jié)(狀態(tài)) 因此,包括一個AES輪回指令的該指令序列的結(jié)果是隔離的替換字節(jié)變換。
在另一個實施例中,可利用以下的AES指令隔離替換字節(jié)變換 AESKEYGENASSIST xmml, xmm2/ml28, imm8
AESKEYGENASSIST指令用于幫助生成用于密鑰編排的輪回密鑰,并且 與密鑰的大小無關(guān)地運算,即不論密鑰大小是128位、192位還是256位都可 執(zhí)行相同的運算。AESKEYGENASSIST指令執(zhí)行用于生成FIPS 197密鑰編排 的"temp = SubWord(RotWord(temp)) xor Rcon[i/Nk]"和"temp = SubWord(temp)"運算。
然而,代替一次對一個32位字(dword)的運算,AESKEYGENASSIST 指令一次對四個32位字執(zhí)行運算(即同時對四個dwords (128位)),從而增 加生成輪回密鑰的速度。
AESKEYGENASSIST指令提供以下運算的結(jié)果 結(jié)果二
其中
X3 [31-0] :=Tmpl [127-96]; X2 [31-0]:= Tmpl [95-64]; XI [31-0]:= Tmpl [63陽32];以及 X0 [31-0]:= Tmpl [31-0];
以及
RCON [7陽0] := imm8[7] imm8[6]imm8[5] imm8[4] imm8[3]imm8[2]imm8[l]imm8
RotWord (Rot)是取出四字節(jié)32位dword并執(zhí)行周期性排列的函數(shù)。 Rotword按順序(a0, al, a2, a3)取出標(biāo)記為a0-a4的四個字節(jié),并執(zhí)行周期性排 列以返回按順序(al, a2, a3, aO)的四個字節(jié)。RotWord函數(shù)在小端(little Endian)
變換中被定義為
Rot Word X[31陽0〗=[X[7墨0] || X [31-8]], 艮P, Rot (x) = (X 8) I (X《24);
例如,如果X[31-0] = 、3c4fcf09; RotWord (、3c4fcf09、) = [ '09, I 、3c4fcf) =(、093c4fcf)
S-Box4指示單個dword S-Box函數(shù)至4個dword的應(yīng)用如下
S-Box4 (X) [31-0]) = [S-Box (X[31-24]), S-Box (X[23-16]), S-Box (X[15-8]), S-Box (X[7-0〗)]。
S-box是字節(jié)值的一對一替換的非線性替換表。SubWord函數(shù)取出四字 節(jié)輸入(32位字(dword))并將S-box (字節(jié)替換(SubBytes))施加于dword 中的四個字節(jié)中的每一個以產(chǎn)生32位輸出dword。 SubWord函數(shù)(32位)得 到4個獨立的(并行)SubByte運算(8位)。
因此,替換字節(jié)變換可利用AESKEYGENASSIST指令來隔離,且中間 輸入(imm8)被設(shè)置為0且將輸入預(yù)混洗如下
AESKEYGENASSIST xmml, xmml, imm8
PSHUFB xmml, mask AESKEYGENASSIST指令去除與rcon異或的效應(yīng),且針對PSHUFB指 令的掩碼被選擇成不旋轉(zhuǎn)編號為3和1的雙字。
圖7是利用至少一個AES輪回指令隔離AES算法中的替換字節(jié)逆變換 的替換字節(jié)隔離逆變換函數(shù)700的實施例的流程圖。
針對替換逆變換的微運算在表5所示的AESDECCLAST指令中使用。 在結(jié)合圖5所述的實施例中,PSHUFB指令用于隔離移行變換。
在框702,在B寄存器被設(shè)置為'0B06010C07020D08030E09040F0A0 500'以對狀態(tài)執(zhí)行移行的情況下,調(diào)用替換字節(jié)隔離變換函數(shù)600的PSHUFB 指令。如前面結(jié)合圖5所討論的,移行變換基于另一個寄存器中存儲的相應(yīng)字 節(jié)位置來執(zhí)行第一寄存器中存儲的狀態(tài)中字節(jié)的排列。在框704,利用PSHUFB指令的結(jié)果(X),調(diào)用替換字節(jié)變換隔離函 數(shù)700中的AESDECLAST指令。AESDECLAST指令的輸入是PSHUFB指令 和設(shè)置為0的輪回密鑰的結(jié)果。AESDECLAST指令執(zhí)行下表IO所示的微運算。 Tmp=逆移行(X) Tmp :逆替換字節(jié)(Tmp) Tmp = AddRoundKey (Tmp,輪回密鑰) 表10
首先,對輸入X執(zhí)行移行逆變換,并將變換的結(jié)果存儲在Tmp中接下 來,對Tmp的內(nèi)容執(zhí)行替換字節(jié)逆變換并將結(jié)果存儲在Tmp中。最后,對Tmp 的內(nèi)容和為0的輪回密鑰執(zhí)行AddRoundKey變換。AddRoundKey微運算基本 上是NOP(無運算),因為對Tmp的內(nèi)容和O執(zhí)行異或運算且結(jié)果是Tmp的 內(nèi)容。PSHUFB指令和AESDECLAST指令的組合隔離替換字節(jié)變換,因為 AddRoundKey微運算執(zhí)行NOP,且其它微運算(逆移行)通過由PSHUFB指 令所執(zhí)行的微運算(移行)進(jìn)行換算。因此,AESDECLAST指令的輸出是利 用如下所示的AESDECLAST指令和PSHUFB指令的組合隔離的逆替換字節(jié) (狀態(tài))。
Y ^逆替換字節(jié)(逆移行(X))=逆替換字節(jié)(逆移行(移行(狀態(tài))))=逆替換字 節(jié)(狀態(tài))
因此,包括至少一個AES輪回指令的該指令序列的結(jié)果是隔離的替換 字節(jié)逆變換。
如上所述,通過使用AES輪回加密/解密指令的特定組合,可隔離由 AES輪回加密/解密指令執(zhí)行的AES變換。這增加了 AES指令使用的靈活性, 因為它們可用于例如構(gòu)造AES變量,支持AES標(biāo)準(zhǔn)中可能的未來修改和/或?qū)?AES原語用作密碼和密碼學(xué)散列函數(shù)的構(gòu)建塊。由AES指令的組合隔離的變 換可用于特別是全芯片和認(rèn)證目的的調(diào)試、確認(rèn)。
本領(lǐng)域的技術(shù)人員將顯而易見,本發(fā)明的實施例中所涉及的方法可具體 體現(xiàn)在包括計算機可用介質(zhì)的計算機程序產(chǎn)品中。例如,這種計算機可用介質(zhì) 可包括諸如緊致盤只讀存儲器(CD ROM)盤或常規(guī)ROM設(shè)備的只讀存儲設(shè) 備或具有計算機可讀程序代碼存儲于其上的計算機磁盤。盡管已經(jīng)參考本發(fā)明的實施例具體示出并描述了本發(fā)明的實施例,但本 領(lǐng)域的技術(shù)人員將理解可在其中進(jìn)行各種形式和細(xì)節(jié)的變化,而不背離由所附 權(quán)利要求書包括的本發(fā)明的實施例的范圍。
權(quán)利要求
1. 一種方法,包括組合多個指令,所述指令中的至少一個執(zhí)行變換序列,所述指令被組合成這樣的順序在執(zhí)行時,所述指令的組合僅執(zhí)行所述變換序列中的變換之一。
2. 如權(quán)利要求1所述的方法,其特征在于,所述指令的組合包括AESDECLAST輪回指令和AESENC輪回指令,所述指令的組合執(zhí)行 MixColumns變換。
3. 權(quán)利要求2所述的方法,其特征在于,由所述AESDECLAST輪回指 令執(zhí)行的所述變換序列包括移行逆變換和替換字節(jié)逆變換,且由所述AESENC 輪回指令執(zhí)行的所述變換序列包括移行變換、替換字節(jié)變換和MixColumns變換。
4. 如權(quán)利要求1所述的方法,其特征在于,所述指令的組合包括 AESENCLAST輪回指令和AESDEC輪回指令,所述指令的組合執(zhí)行 MixColumns逆變換。
5. 權(quán)利要求4所述的方法,其特征在于,由所述AESENCLAST輪回指 令執(zhí)行的所述變換序列包括移行變換和替換字節(jié)逆變換,且由所述AESDEC 輪回指令執(zhí)行的所述變換序列包括移行逆變換、替換字節(jié)逆變換和 MixColumns逆變換。
6. 如權(quán)利要求1所述的方法,其特征在于,所述指令的組合包括PSHUFB 指令和AESENCLAST輪回指令,所述指令的組合執(zhí)行替換字節(jié)變換。
7. 權(quán)利要求6所述的方法,其特征在于,由所述AESENCLAST輪回指 令執(zhí)行的所述變換序列包括移行變換和替換字節(jié)變換,且所述PSHUFB指令包 括移行變換。
8. 如權(quán)利要求1所述的方法,其特征在于,所述指令的組合包括PSHUFB 指令和AESDECLAST輪回指令,所述指令的組合執(zhí)行替換字節(jié)逆變換。
9. 權(quán)利要求7所述的方法,其特征在于,由所述AESDECLAST輪回指令 執(zhí)行的所述變換序列包括移行逆變換和替換字節(jié)逆變換,且所述PSHUFB指令 包括移行逆變換。
10. 如權(quán)利要求l所述的方法,其特征在于,所述變換序列包括來自下組的變換由聯(lián)邦信息處理標(biāo)準(zhǔn)(FIPS) 197定義的移行、逆移行、替換字節(jié)、 逆替換字節(jié)、MixColumns和逆MixColumns。
11. 一種裝置,包括存儲器,用于存儲多個指令,所述指令中的至少一個執(zhí)行變換序列;以及處理器,其包括執(zhí)行單元,所述指令在所述存儲器中被存儲成這樣的順 序在被所述執(zhí)行單元執(zhí)行時,所述執(zhí)行單元僅提供所述變換序列中的變換之一的結(jié)果。
12. 如權(quán)利要求11所述的裝置,其特征在于,所述指令的組合包括AESDECLAST輪回指令和AESENC輪回指令,所述指令的組合執(zhí)行 MixColumns變換。
13. 如權(quán)利要求11所述的裝置,其特征在于,所述指令的組合包括 AESENCLAST輪回指令和AESDEC輪回指令,所述指令的組合執(zhí)行 MixColumns逆變換。
14. 如權(quán)利要求11所述的裝置,其特征在于,所述指令的組合包括 PSHUFB指令和AESENCLAST輪回指令,所述指令的組合執(zhí)行替換字節(jié)變 換。
15. 如權(quán)利要求11所述的裝置,其特征在于,所述指令的組合包括 PSHUFB指令和AESDECLAST輪回指令,所述指令的組合執(zhí)行替換字節(jié)逆變換。
16. 如權(quán)利要求11所述的裝置,其特征在于,所述變換序列包括來自下 組的變換由聯(lián)邦信息處理標(biāo)準(zhǔn)(FIPS) 197定義的移行、逆移行、替換字節(jié)、 逆替換字節(jié)、MixColumns禾卩逆MixColumns。
17. —種包括含相關(guān)聯(lián)信息的機器可訪問介質(zhì)的制品, 其中所述信息在被訪問時致使機器執(zhí)行組合多個指令,所述指令中的至少一個執(zhí)行變換序列,所述指令被組合成 這樣的順序在執(zhí)行時,所述指令的組合僅執(zhí)行所述變換序列中的變換之一。
18. 如權(quán)利要求17所述的制品,其特征在于,所述變換序列包括來自下組的變換由聯(lián)邦信息處理標(biāo)準(zhǔn)(FIPS) 197定義的移行、逆移行、替換字節(jié)、逆替換字節(jié)、MixColumns和逆MixColumns。
19. 一種系統(tǒng),包括 處理器;以及存儲設(shè)備,其可由處理器訪問且在其中存儲有多個指令,所述指令中的 至少一個執(zhí)行變換序列,所述指令被組合成這樣的順序在被所述處理器執(zhí)行 時,導(dǎo)致處理器至少僅執(zhí)行所述變換序列中的變換之一 。
20. 如權(quán)利要求19所述的系統(tǒng),其特征在于,所述變換序列包括來自下 組的變換由聯(lián)邦信息處理標(biāo)準(zhǔn)(FIPS) 197定義的移行、逆移行、替換字節(jié)、 逆替換字節(jié)、MixColumns禾卩逆MixColumns0
全文摘要
高級加密標(biāo)準(zhǔn)(AES)是可加密和解密信息的對稱塊密碼。加密(密碼)利用私鑰(密碼密鑰)執(zhí)行變換序列(移行、替換字節(jié)、混合列)以將稱為“明文”的可理解數(shù)據(jù)變換成稱為“密文”的不可理解形式。逆向譯碼(解密)中的變換(逆移行、逆替換字節(jié)、逆混合列)是密碼中的變換的逆變換。通過使用執(zhí)行該變換序列的指令,高效率地執(zhí)行加密和解密。這些指令的組合允許隔離將獲取的變換(移行、替換字節(jié)、混合列、逆移行、逆替換字節(jié)、逆混合列)。
文檔編號H04L9/28GK101520965SQ200910128119
公開日2009年9月2日 申請日期2009年3月2日 優(yōu)先權(quán)日2008年2月29日
發(fā)明者S·格倫, Z·斯波伯 申請人:英特爾公司