專利名稱:并行運算模式中優(yōu)化高級加密標(biāo)準(zhǔn)加解密的方法和裝置的制作方法
并行運算模式中優(yōu)化高級加密標(biāo)準(zhǔn)加解密的方法和裝置領(lǐng)域本公開涉及高級加密標(biāo)準(zhǔn)(AES),尤其涉及優(yōu)化AES加密/解密。些旦密碼學(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ù)量取決于密鑰的長度。附圖簡述在參照附圖進行以下的詳細(xì)描述時所要求保護的主題的實施例的特征將變得顯而易見,其中相似的附圖標(biāo)記描述相似的部件,附圖中
圖1是包括在通用處理器中執(zhí)行AES加密和解密的指令的系統(tǒng)的框圖; 圖2是圖1所示的處理器的實施例的框圖;圖3是示出根據(jù)本發(fā)明的原理通過對不同的數(shù)據(jù)塊并行地執(zhí)行獨立運算 來提高AES加密/解密運算的吞吐量的方法的實施例的流程圖;以及 圖4示出每個周期分派一個AES輪回指令的示例。盡管以下的詳細(xì)描述將參照所要求保護主題的說明性實施例進行,但它的 很多替換、修改和變化對本領(lǐng)域的技術(shù)人員是顯而易見的。因此,旨在廣泛地 理解所要求保護的主題,并且僅按照所附權(quán)利要求中闡述地限定所要求保護的 主題。詳細(xì)描述高級加密標(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ù)-一運算序列。 加密輪回的運算序列包括(1)利用異或(XOR)運算將輪回密鑰(從密碼 密鑰導(dǎo)出的值)加至狀態(tài)(字節(jié)的二維128位陣列);(2)利用非線性字節(jié) 替換表(S-Box)處理狀態(tài);(3)以不同的偏移循環(huán)地移位狀態(tài)的最后三行; 以及(4)取出狀態(tài)的所有列并混合它們的數(shù)據(jù)(相互獨立地)以產(chǎn)生新的列。塊密碼可使用多種運算模式之一。運算模式包括向任何長度的消息提供保 密性的電子密碼本(ECB)、密碼塊鏈(CBC)、輸出反饋(OFB)、計數(shù)和密碼反饋5(CFB)。諸如用密碼塊鏈-消息認(rèn)證碼(CCM)的計數(shù)、伽羅瓦計數(shù)模式(GCM) 和偏移密碼本模式(OCB)的其它運算模式確保保密性和消息完整性。在ECB模式中,將待加密的明文分成n位塊,且分別加密每個塊,即獨 立于其它塊加密各塊。在CBC模式中, 一次處理n位明文,并將鏈接機制用 于加密明文塊,且明文塊的加密取決于前一塊的加密。例如,可如以下的表l 所示地描述用于加密運算的CBC運算模式 初始化向量(IV),Cj=AES—ENCRYPT (P」'XOR Cj》對于j=l, 2,…,加密的塊數(shù)(NB). 其中Cj是密文塊數(shù)j,以及 Pj是明文塊(輸入)數(shù)j。 表1在CBC運算模式中,在計算Cj.,之前不能計算Cj,因此CBC運算模式是 串行模式。并行運算模式是其中一個塊的加密/解密與其它塊的加密/解密結(jié)果無關(guān)的 運算模式。例如,ECB和計數(shù)運算模式是并行運算模式。以下在表2中示出利 用ECB模式的AES加密運算的偽代碼的示例,并在表3中示出利用計數(shù)運算 模式的AES加密運算的偽代碼的示例forj從1到待加密的塊數(shù)(NB)TargetBuffer [j] = AES—ENCRYPT—PROCEDURE (DataBlock[j], cipher—key) End循環(huán) 其中DataBlock 〃具有保持待加密數(shù)據(jù)的NB個128位的條目的緩 沖器TargetBuffer 〃具有NB個128位的條目的緩沖器以存儲加密結(jié) 果(可與DataBlock相同) 表2初始化COUNTER (隨機初始化向量(IV))6forj從1到待加密的塊數(shù)(NB)Tmpl = AES一ENCRYPT PROCEDURE (COUNTER, cipher—key)TargetBuffer [j〗=XOR (Tmpl, DataBlock[j]) End循環(huán) 其中DataBlock //具有保持待加密數(shù)據(jù)的NB個128位的條目的緩沖器TargetBuffer//具有NB個128位的條目的緩沖器以存儲加密結(jié) 果(可與DataBlock相同)表3表2和表3中的加密運算(AES—ENCRYPT_PROCEDURE)可在指令集 擴展中執(zhí)行,用于在通用處理器中執(zhí)行AES加密和解密。單個AES加密運算 包括可經(jīng)由串行AES指令序列實施的串行運算序列。以下在表4中示出執(zhí)行 多個128位數(shù)據(jù)塊的加密的指令序列的示例。 for (i=l; i <NB; i++)temp = Load (DataBlock [i])temp = xor (temp, RK
); 〃輪回0for(j=l;j <10;j++)〃對于10次AES輪回 temp = AESENC (temp, RK [j]); temp = AESENCLAST(temp, RK [10]); 將temp存儲到TargetBuffer [i]其中-NB是待加密的塊數(shù);IV是用于初始化計數(shù)器的隨機數(shù);DataBlock是存儲待加密數(shù)據(jù)的緩沖器;TargetBuffer是存儲加密結(jié)果的緩沖器;RK是存儲輪回密鑰的緩沖器;temp是一 128位變量表4表4中示出的AES指令(AESENC, AESENCLAST)串行地處理存儲在 128位變量(temp)(也稱為狀態(tài))中的數(shù)據(jù),如AES規(guī)范(FIPS出版197) 所定義的。以下在表5中示出用于處理數(shù)據(jù)的串行運算序列的示例。 For i從1至廿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]) 存儲XmmlEnd表5對于待加密的N—Block中的每一個,數(shù)據(jù)塊被存儲在寄存器中,例如具有 128位的Xmm寄存器(Xmml)可用于存儲128位塊。對數(shù)據(jù)塊串行執(zhí)行10 次加密輪回。對于10次輪回AES運算的輪回1至9,調(diào)用AESENC指令以利 用輪回密鑰和前一輪回或初始塊數(shù)據(jù)(在輪回1時)來執(zhí)行輪回運算。調(diào)用 AESENCLAST來處理最后的輪回(在該示例中為輪回10)。如果AES輪回指令(AESENC, AESENCLAST)的等待時間由L個處理 器周期(周期)表示。忽略加載、存儲和其它額外開銷的周期,如果以表5所 示的順序處理,表5的示例所示的10次AES輪回的N—BLOCKS的處理消耗 約N—BLOCKSH(^L周期。清楚地,執(zhí)行N—Blocks的加密/解密的總等待時間 取決于各個AES指令(AESENC, AESENCLAST)的等待時間。在本發(fā)明的實施例中,根據(jù)本發(fā)明的原理,通過并行加密(解密)多個數(shù) 據(jù)塊,AES輪回指令(L)的等待時間效應(yīng)被減少,致使執(zhí)行AES加密/解密 運算所需的總等待時間減少。在并行運算模式中,可通過在每一個周期分派 AES輪回指令來并行執(zhí)行不同數(shù)據(jù)塊的不同獨立加密(解密),而無需等待前一指令完成。圖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中的信 息。圖2是圖1所示的處理器101的實施例的框圖。處理器101包括用于解碼 從1級(LI)指令高速緩存202接收的處理器指令的取出(fetch)和解碼單元 206。用于執(zhí)行處理器指令的數(shù)據(jù)可被存儲在寄存器堆(register file) 208中。 在一個實施例中,寄存器堆208包括多個128位寄存器,它們被AES輪回指 令用于存儲由AES輪回指令所使用的數(shù)據(jù)。在一個實施例中,寄存器堆208是一組與設(shè)置在Intel Pentium MMX處理 器中的具有(單指令多數(shù)據(jù)(SIMD))流送擴展(SSE)指令集的128位MMX 寄存器類似的128位寄存器。在SIMD處理器中,通過一次加載一個128位塊 來分128位塊地處理數(shù)據(jù)。
取出和解碼單元206從LI指令高速緩存202取出宏指令,解碼宏指令 并將其分成可存儲在微碼只讀存儲器(ROM) 214中的稱為微運算(pops)的 簡單運算。流水線化的執(zhí)行單元210編排并執(zhí)行微運算。在所示的實施例中, 執(zhí)行單元210中的AES函數(shù)103包括對AES輪回指令集的微運算。AES指令 是完全流水線化的使得處理器(CPU)可在每個周期分派指令,如果有數(shù)據(jù)準(zhǔn) 備好要處理的話。退役單元212將所執(zhí)行的指令的結(jié)果寫入寄存器或存儲器。 AES輪回指令所使用的輪回密鑰216可被存儲在LI數(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)。以下在表6中示出關(guān)于固定寬度 輪回密鑰(例如128位)的一個實施例的AES指令集中的AES輪回指令。 AESENC xmmsrcdst xmm
輸入 數(shù)據(jù)(=目的地),輪回密鑰
輸出在利用輪回密鑰通過AES輪回的變換之后的數(shù)據(jù)
AESENCLASTxmmsrcdst xmm
輸入 數(shù)據(jù)(=目的地),輪回密鑰
輸出在利用輪回密鑰通過AES最后輪回的變換之后的數(shù)據(jù)
AESDEC xmmsrcdst xmm
輸入 數(shù)據(jù)(=目的地),輪回密鑰輸出在利用輪回密鑰通過AES輪回的變換之后的數(shù)據(jù)
AESDECLAST xmmsrcdst xmm
輸入 數(shù)據(jù)(=目的地),輪回密鑰
輸出在利用輪回密鑰通過AES最后輪回的變換之后的數(shù)據(jù)
表6
AES指令集包括四個AES輪回指令(加密、解密、加密最后輪回、解 密最后輪回)。AES指令集中的AES輪回指令包括單個輪回運算以執(zhí)行將用 于除最后輪回以外的所有輪回的加密和解密輪回運算。例如,在表6中的 AESENC單輪回指令中,輸入數(shù)據(jù)被存儲在128位寄存器(xmmsrcdst)中且輪回 密鑰被存儲在另一個128位寄存器(Xmm)中。該指令對存儲在128位xmmsrcdst 寄存器中的輸入數(shù)據(jù)(源)執(zhí)行AES輪回運算并用輪回運算的執(zhí)行結(jié)果重寫 存儲在128位xmmsrcdst寄存器中的輸入數(shù)據(jù)。因此xmmsrcdst首先存儲輸入 數(shù)據(jù),稍后存儲AES輪回運算的結(jié)果。
密鑰的大小可以是128位、192位或256位。將執(zhí)行的輪回數(shù)可以是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可包括具有10個元素的陣列(RK)以存儲用于該密鑰 的密鑰編排。用于AES-128加密的輸入密鑰被存儲在RK
中,且預(yù)先計算9 個輪回密鑰RK
-RK[l]。
AES指令集還包括用于最后解密輪回的AES解密指令和用于最后加密 輪回的AES加密指令。例如,在表l中的AESENCLAST單輪回指令中,輸入 數(shù)據(jù)被存儲在128位寄存器(xmmsrcdst)中,且輪回密鑰被存儲在另一個128位 寄存器(Xmm)中。該指令對存儲在xmmsrcdst寄存器中的輸入數(shù)據(jù)(源)執(zhí)行 AES輪回運算,并用輪回運算的執(zhí)行結(jié)果重寫存儲在xmmsrcdst寄存器中的輸 入數(shù)據(jù)。因而,xmmsrcdst首先存儲輸入數(shù)據(jù),稍后存儲AES輪回運算的結(jié) 果。Xmm寄存器存儲用于輪回運算的輪回密鑰。
11在一個實施例中,寄存器堆304具有可由AES指令使用的多個128位 寄存器。128位寄存器可存儲源運算數(shù)、輪回密鑰和AES指令的結(jié)果。對于第 一輪回,AES指令接收可以是待加密的128位明文或待解密的128位密文的源
運算數(shù)。
圖3是示出根據(jù)本發(fā)明的原理通過在不同的數(shù)據(jù)塊上并行執(zhí)行獨立運 算來提高AES加密/解密運算的吞吐量的方法的實施例的流程圖。
通過允許數(shù)據(jù)塊的加密/解密流程與另一個數(shù)據(jù)塊的加密/解密流程并 行運行以提供數(shù)據(jù)用于處理并允許在每個周期分派AES輪回指令,提高了AES 運算的吞吐量。如果(1)將同一密碼密鑰用在多個數(shù)據(jù)塊上,即密碼編排生 成一次,且利用相同的密鑰編排處理多個數(shù)據(jù)塊;以及(2)利用單個完全流 水線化的AES輪回指令執(zhí)行AES輪回,則可并行處理數(shù)據(jù)塊。每個周期分派 一次AES輪回指令增加了 AES加密/解密運算的吞吐量,即使每個AES輪回
指令的等待時間大于一個周期。
將描述關(guān)于AES-128加密運算的實施例,即關(guān)于利用128位數(shù)據(jù)塊和128 位密鑰的具有10次AES輪回的AES加密運算。
以下表7示出可用于通過對不同的數(shù)據(jù)塊并行執(zhí)行獨立運算使AES加密 的吞吐量最大化的軟件指令的例子。
For i從0至U N—BLOCKS/8陽l do
xmml = BLOCK [8*i+l], xmm2 = BLOCK [8*i+2]; ... x腿8 = BLOCK
xmml = AESENC (xmml, RK [l]) xmm2 = AESENC (xmm2, RK [l]) xmm3 = AESENC (xmm2, RK [l])
xmm8 = AESENC (xmm8, RK [l]) xmml = AESENC (xmml, RK [2]) xmm2 = AESENC (xmm2, RK [2])
雄m8 = AESENC (xmm8, RK [2])
12xmml = AESENCLAST(xmml, RK [10]) xmm2 = AESENCLAST(xmm2, RK [10])
xmm8 = AESENCLAST(xmm8, RK [10]) 存儲xmml;存儲xmm2;…存儲xmm8 End
表7
參照表7, AES輪回指令"AESENC"在每個周期上分派,因為使用各 Xmm寄存器的運算獨立于使用其它Xmm寄存器的運算。如前面討論的,這 是由于并行運算模式的性質(zhì)引起的。例如,在ECB模式中,將待加密的明文 分成n位塊,且分別加密每個塊,即獨立于其它塊加密各塊。如果使用的Xmm 寄存器的數(shù)目(在本示例中為8)被選擇成大于或等于指令等待時間(L), 即完成該指令的周期數(shù),則可每個周期甚至橫跨AES輪回分派AES輪回指令。
在框300,將待加密/解密的多個數(shù)據(jù)塊存儲在多個寄存器中(例如,多 個128位Xmm寄存器)。在具有128位寄存器的實施例中,由于AES的數(shù)據(jù) 塊大小是128位,可將不同的數(shù)據(jù)塊存儲在k個128位寄存器的每一個中。為 了使性能最大化,用于存儲不同他數(shù)據(jù)塊的寄存器的數(shù)目取決于AES輪回指 令的等待時間。這允許在每個周期分派一個AES輪回指令,使得可并行處理 多個不同的數(shù)據(jù)塊。處理繼續(xù)到框302。
在框302, AES加密/解密運算的輪回0中執(zhí)行的運算不同于其它輪回 中執(zhí)行的運算。因此,對k個128位寄存器中所存儲的k個不同數(shù)據(jù)塊的每一 個順序地執(zhí)行輪回0中的運算。處理繼續(xù)到框304。
在框304,向所有其它的輪回(例如,AES-128的輪回1至10)分派相 同的AES輪回指令。使用與當(dāng)前輪回相關(guān)聯(lián)的輪回密鑰[RK],在每個周期向k 個寄存器中所存儲的k個不同的數(shù)據(jù)塊中的每一個分派一個AES指令,用于 當(dāng)前輪回。在已經(jīng)向k個寄存器中所存儲的k個不同的數(shù)據(jù)塊中的每一個分派 AES輪回指令之后,處理繼續(xù)到框306。
在框306,如果有另一個輪回用于AES運算,處理繼續(xù)到框304以處理下一輪回。如果不是的話處理繼續(xù)到框308
在框308,如果有其它數(shù)據(jù)塊要針對AES運算進行處理,則處理繼續(xù) 到框300以向k個寄存器加載接下來的數(shù)據(jù)塊。如果不是的話,處理繼續(xù)到框 310以返回AES運算的結(jié)果。
圖4示出在每個周期調(diào)度一個AES循環(huán)指令的示例。在圖4所示的示 例中,寄存器的數(shù)目(k)和AES輪回指令等待時間(L)兩者都是6。圖4 示出對于表7所示、并結(jié)合圖3中的框304討論的"for"循環(huán)之一的AES指令 的分派。當(dāng)k=L=6時對輪回2的"for"循環(huán)分派的指令可被清楚地寫成如下 表8所示。
Xmml = AESENC (Xmml, RK[l])
Xmm2 = AESENC (Xmm2, RK[l])
Xmm3 = AESENC (Xmm3, RK[l])
Xmm4 = AESENC (Xmm4, RK[l])
Xmm5 = AESENC (Xmm5, RK[l])
Xmm6 = AESENC (Xmm6, RK[l]) 表8
在該示例中,寄存器是Xmm寄存器堆中的Xmm寄存器,而六個Xmm 寄存器(標(biāo)注為Xmml-Xmm6)用于存儲6個不同的數(shù)據(jù)塊。然而,本發(fā)明不 限于Xmm寄存器,且可使用能夠存儲用于AES輪回的128位數(shù)據(jù)塊且可通過 AES輪回指令存取的任何寄存器。每一個周期都能夠分派一 AESENC指令,
因為使用Xmml的運算獨立于使用其它Xmm寄存器(Xmm2.....Xmm6)
中的每一個的運算。在理想的編排狀況下,該"for"循環(huán)的完成需要 k+L-l(6+6-141)個周期。
參照圖3,在其中L和k兩者都是6的系統(tǒng)中每個周期分派一 AESENC 指令。對于每個輪回(除輪回0之外),利用相同的輪回密鑰RK,最初的6 個指令在6個不同的Xmm寄存器(Xmml-Xmm6)上運算。例如,在周期1 中利用Xmml和RK[1]分派AESENC指令,而在周期2中利用Xmm2和RK[2] 分派AESENC指令。在周期1中分派的AESENC具有6周期等待時間且因此 在周期6結(jié)束時完成。
14在周期7中分派的第七AESENC指令可使用具有輪回密鑰RK[2]的存 儲在Xmml寄存器中的第七數(shù)據(jù)塊,因為到此時為止,在周期1中利用存儲在 Xmml寄存器中的第一數(shù)據(jù)塊和輪回密鑰RK[1]分派的AESENC指令已經(jīng)完成 (基于6個周期等待時間)。因此,6個AESENC指令可并行獨立地運算,且 每一個使用存儲在六個Xmm寄存器之一中的不同數(shù)據(jù)塊。因此,使用存儲在 多個寄存器中的數(shù)據(jù)塊的第二 AES輪回在總共11周期之后完成,而不是如在 用于兩個AES輪回的數(shù)據(jù)塊如前面結(jié)合表5所示的示例討論地串行地處理的 情形中地在12周期之后。在每個周期中分派AESENC指令(或AESENCLAST 指令),直到用于AES-128運算的全部IO個AES輪回完成。
如所討論的,可并行加密k個數(shù)據(jù)塊,其中根據(jù)用于存儲數(shù)據(jù)塊的可用 寄存器數(shù)選擇k。如果寄存器數(shù)(k) ^AES指令等待時間(L),則可在每個 周期甚至"橫跨AES輪回"分派AES輪回指令,即用于特定AES輪回的所有 AES輪回指令不需要在分派用于下一個AES輪回的AES輪回指令之前完成。
例如,如果第一寄存器用于使用輪回密鑰RK[1]處理AES輪回1,則直 到經(jīng)過k個周期之后第一寄存器才能用于使用輪回密鑰RK[2]處理AES輪回2。 因此,如果k》L,存在其中AES指令被分派用于AES輪回1的k個周期,且 在k+l周期中,第一寄存器可用于存儲用輪回密鑰RK[2]處理的AES輪回2 的數(shù)據(jù)塊。
并行處理k個不同數(shù)據(jù)塊需要用于執(zhí)行異或(XOR)運算的AES輪回 0的k個周期加上用于處理其它NR AES輪回的其它NR*k+L-l周期。因此可 根據(jù)每k個數(shù)據(jù)塊(NR+k+L-l)周期來估計吞吐量,即約為每數(shù)據(jù)塊NR + (L-l)/k周期。
性能受可用寄存器的數(shù)目和AES輪回等待時間限制。輪回密鑰(RK) 或者可從存儲器讀取(寄存器-存儲器模式)或者可加載到另一個寄存器(寄 存器-寄存器模式)。如果在第一次讀取之后將輪回密鑰存儲在第一級高速緩 存中,則寄存器至存儲器模式可提供較高性能。
不使用AES輪回指令的AES-128的實現(xiàn)消耗約每字節(jié)12周期。忽略 存儲/加載/遞增和其它額外開銷的等待時間,并假設(shè)k=L-8,在串行運算模式 中,利用AES輪回指令的AES-128 (IO次輪回)加密消耗約每128位(16字節(jié))1(^L周期,即約5周期/字節(jié)。通過并行處理多個不同的數(shù)據(jù)塊,如前面
所討論的,8個塊的加密消耗NR*k+L-l,即約每8個塊72周期(0.56周期/
字節(jié))。因此,對不同數(shù)據(jù)塊并行執(zhí)行獨立運算實現(xiàn)了幾乎是在使用如結(jié)合表 5所討論的用于處理數(shù)據(jù)的串行運算序列時的9倍的性能提升。
通過并行執(zhí)行運算,AES輪回指令的等待時間(L)被"隱藏",只要 寄存器的數(shù)目(k)大于或等于L即可。這允許高效率地使用用于AES運算的 加密/解密的AES輪回指令,AES運算使用對一個塊獨立于其它塊進行運算的 運算模式,例如這種運算模式包括ECB、 CCM、 GCM和計數(shù)的運算模式。
本領(lǐng)域的技術(shù)人員將顯而易見,本發(fā)明的實施例中所涉及的方法可具體 體現(xiàn)在包括計算機可用介質(zhì)的計算機程序產(chǎn)品中。例如,這種計算機可用介質(zhì) 可包括諸如緊致盤只讀存儲器(CD ROM)盤或常規(guī)ROM設(shè)備的只讀存儲設(shè) 備或具有計算機可讀程序代碼存儲于其上的計算機磁盤。
盡管已經(jīng)參考本發(fā)明的實施例具體示出并描述了本發(fā)明的實施例,但本 領(lǐng)域的技術(shù)人員將理解可在其中進行各種形式和細(xì)節(jié)的變化,而不背離由所附 權(quán)利要求書包括的本發(fā)明的實施例的范圍。
1權(quán)利要求
1. 一種方法,包括利用對一個塊獨立于其它塊進行運算的運算模式對多個固定大小的塊執(zhí)行高級加密標(biāo)準(zhǔn)(AES)運算,包括在k個寄存器中存儲所述多個固定大小的塊的一組k個連續(xù)塊,k大于或等于AES輪回指令的等待時間(L),所述AES輪回指令對所述塊執(zhí)行用于AES輪回的AES輪回運算的序列;以及通過為所述k個塊中的每一個每周期分派一個AES輪回指令對所述那組k個連續(xù)塊并行地執(zhí)行AES輪回運算的序列。
2. 如權(quán)利要求l所述的方法,其特征在于,還包括在所述k個寄存器之一中存儲針對所述k個塊中的每一個的所述AES輪 回指令的結(jié)果。
3. 如權(quán)利要求l所述的方法,其特征在于,每個塊具有128位。
4. 如權(quán)利要求l所述的方法,其特征在于,所述寄存器是Xmm寄存器。
5. 如權(quán)利要求l所述的方法,其特征在于,所述AES輪回指令是流水線 化的。
6. 如權(quán)利要求l所述的方法,其特征在于,所述運算模式是電子密碼本 (ECB)、計數(shù)、密碼塊鏈-消息認(rèn)證碼(CCM)或伽羅瓦計數(shù)模式(GCM)。
7. —種裝置,包括寄存器堆,用于在k個寄存器中存儲多個固定大小的塊的一組k個連續(xù)塊, k大于或等于AES輪回指令的等待時間(L),所述AES輪回指令對所述塊執(zhí) 行用于輪回的AES輪回運算序列;以及執(zhí)行單元,用于利用對一個塊獨立于其它塊進行運算的運算模式對多個固定大小的塊執(zhí)行高級加密標(biāo)準(zhǔn)(AES)運算,所述執(zhí)行單元通過在每個周期對 所述k個塊中的每一個分派一個AES輪回指令來對所述那組k個連續(xù)塊并行 地執(zhí)行AES輪回運算序列。
8. 如權(quán)利要求7所述的裝置,其特征在于,所述執(zhí)行單元在所述k個寄 存器之一中存儲針對所述k個塊中的每一個的所述AES輪回指令的結(jié)果。
9. 如權(quán)利要求7所述的裝置,其特征在于,每個塊具有128位。
10. 如權(quán)利要求7所述的裝置,其特征在于,所述寄存器是Xmm寄存器。
11. 如權(quán)利要求7所述的裝置,其特征在于,所述AES輪回指令是流水 線化的。
12. 如權(quán)利要求7所述的裝置,其特征在于,所述運算模式是電子密碼本 (ECB)、計數(shù)、密碼塊鏈消息認(rèn)證碼(CCM)或伽羅瓦計數(shù)模式(GCM)。
13. —種包括含相關(guān)聯(lián)信息的機器可訪問介質(zhì)的制品,其中所述信息在被 訪問時致使機器執(zhí)行利用對一個塊獨立于其它塊進行運算的運算模式對多個固定大小的塊執(zhí) 行高級加密標(biāo)準(zhǔn)(AES)運算,包括在k個寄存器中存儲所述多個固定大小的塊的一組k個連續(xù)塊,k大 于或等于AES輪回指令的等待時間(L),所述AES輪回指令對所述塊 執(zhí)行用于AES輪回的AES輪回運算序列;以及通過在每個周期向所述k個塊中的每一個分派一個AES輪回指令對 所述那組k個連續(xù)塊并行地執(zhí)行AES輪回運算序列。
14. 如權(quán)利要求13所述的制品,其特征在于,還包括在所述k個寄存器之一中存儲針對所述k個塊中的每一個的AES輪回指 令的結(jié)果。
15. 如權(quán)利要求13所述的制品,其特征在于,每個塊具有128位。
16. 如權(quán)利要求13所述的制品,其特征在于,所述寄存器是Xmm寄存器。
17. 如權(quán)利要求13所述的制品,其特征在于,所述AES輪回指令是流水 線化的。
18. 如權(quán)利要求13所述的制品,其特征在于,所述運算模式是電子密碼 本(ECB)、計數(shù)、密碼塊鏈消息認(rèn)證碼(CCM)或伽羅瓦計數(shù)模式(GCM)。
全文摘要
在具有流水線化執(zhí)行單元的系統(tǒng)中增加加密/解密運算的吞吐量??赏ㄟ^在每個周期分派AES輪回指令并行地執(zhí)行不同數(shù)據(jù)塊的不同獨立的加密(解密)。
文檔編號G09C1/06GK101520966SQ20091000839
公開日2009年9月2日 申請日期2009年2月27日 優(yōu)先權(quán)日2008年2月27日
發(fā)明者A·格雷德斯廷, S·格倫, Z·斯波伯 申請人:英特爾公司