利用單指令在多種模式中執(zhí)行aes加密或解密的制作方法
【專利摘要】一種用于執(zhí)行加密的處理器,包括:解碼器,用于對(duì)所述處理器接收到的指令進(jìn)行解碼;執(zhí)行單元,用于執(zhí)行所述指令;寄存器文件,其通過(guò)內(nèi)部互連耦合至所述執(zhí)行單元;所述執(zhí)行單元包括密碼電路,該密碼電路用于響應(yīng)于具有第一操作數(shù)和第二操作數(shù)、并可在多種加密模式中使用的單個(gè)加密指令,將明文值與第二值進(jìn)行邏輯結(jié)合以產(chǎn)生一結(jié)合結(jié)果,并且使用高級(jí)加密標(biāo)準(zhǔn)(AES)算法和由第一隱式寄存器提供的密鑰來(lái)對(duì)該結(jié)合結(jié)果進(jìn)行加密以產(chǎn)生一加密結(jié)果,其中,所述第一操作數(shù)用于確定所述多種加密模式中的一種模式。
【專利說(shuō)明】利用單指令在多種模式中執(zhí)行AES加密或解密
[0001]本申請(qǐng)是申請(qǐng)日為2008年3月14日、申請(qǐng)?zhí)枮?00810096342.2的同名專利申請(qǐng)
的分案申請(qǐng)。
【背景技術(shù)】
[0002]所要求保護(hù)的發(fā)明的具體實(shí)現(xiàn)通常會(huì)涉及到處理器,尤其是涉及用于使處理器執(zhí)行高級(jí)加密標(biāo)準(zhǔn)(AES)加密或解密的指令。
[0003]AES是由美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)制定的高級(jí)加密標(biāo)準(zhǔn),并在FIPSPublicationl97中進(jìn)行定義。AES可以具有可變的密鑰尺寸。其中3種可接受的密鑰尺寸為:128比特、192比特以及256比特。AES加密使用128比特的明文輸入和一密鑰,然后產(chǎn)生128比特的密文(例如,已被用AES加密過(guò)的明文)輸出。類似地,AES解密執(zhí)行反向的操作,其使用128比特的密文和一密鑰,產(chǎn)生128比特的明文。
[0004]AES可以用于多種操作模式。一種較常見(jiàn)的模式是所謂的密碼塊鏈接(CBC)模式。一種稍微不常見(jiàn)的模式是所謂的電子密碼本(ECB)模式。其它的模式也是可以的,例如新興的所謂的計(jì)數(shù)器模式(CTR),它在概念上類似于ECB模式。
[0005]在計(jì)算系統(tǒng)中,期望有一個(gè)或多個(gè)針對(duì)專用于AES加密和/或解密的處理器的指令。
【專利附圖】
【附圖說(shuō)明】
[0006]附圖被并入且構(gòu)成本說(shuō)明書的一部分,其說(shuō)明了與本發(fā)明的原理相一致的一個(gè)或多個(gè)具體實(shí)現(xiàn),并與說(shuō)明書一起解釋了這些具體實(shí)現(xiàn)。這些附圖不必是按比例確定的,而是重點(diǎn)在于解釋本發(fā)明的原理。這些附圖中:
[0007]圖1說(shuō)明了根據(jù)某些具體實(shí)現(xiàn)的示例計(jì)算機(jī)系統(tǒng);
[0008]圖2說(shuō)明了根據(jù)某些具體實(shí)現(xiàn)的處理器的寄存器文件;
[0009]圖3概念性地說(shuō)明了用于ECB模式的AES加密指令;
[0010]圖4說(shuō)明了在ECB模式中使用AES加密指令的示例代碼;
[0011]圖5概念性地說(shuō)明了用于CBC模式的AES加密指令;
[0012]圖6概念性地說(shuō)明了用于CBC模式的兩個(gè)鏈接的AES加密指令;
[0013]圖7說(shuō)明了在CBC模式中使用AES加密指令的示例代碼;
[0014]圖8概念性地說(shuō)明了用于CTR模式的AES加密指令;
[0015]圖9說(shuō)明了在CTR模式中使用AES加密指令的示例代碼。
【具體實(shí)施方式】
[0016]以下詳細(xì)說(shuō)明參考了所附各圖。不同附圖中可以使用相同的參考數(shù)字來(lái)標(biāo)識(shí)相同或相似的要素。在以下的描述中,為了解釋而不是限定,闡述了許多特定細(xì)節(jié),例如特殊的結(jié)構(gòu)、架構(gòu)、接口、技術(shù)等,以便提供對(duì)于所要求保護(hù)的發(fā)明的各個(gè)方面的透徹理解。然而,也可以在與這些特定細(xì)節(jié)不同的其它實(shí)例中實(shí)現(xiàn)所要求保護(hù)的本發(fā)明的各個(gè)方面,這對(duì)于受益于本公開(kāi)內(nèi)容的所屬領(lǐng)域技術(shù)人員而言是顯而易見(jiàn)的。在某些實(shí)例中,省略了對(duì)公知的設(shè)備、電路和方法的描述,以避免不必要的細(xì)節(jié)使本發(fā)明的說(shuō)明書變得難以理解。
[0017]
[0018]本申請(qǐng)描述了在處理器中包括用于執(zhí)行AES加密和/或解密的指令的方法、裝置和系統(tǒng)的實(shí)施例。兩個(gè)這樣的指令是:
[0019]AESENCRYPT(argl)xmmdestination, (arg2)xmmsource/memory
[0020]AESDECRYPT(argl)xmmdestination, (arg2)xmmsource/memory
[0021]在加密情況下,xmmsource/memory提供要用的明文,而xmmdestination將是密文。在解密情況下,它們的角色顛倒,信源是密文而目標(biāo)是明文。在某些具體實(shí)現(xiàn)中,如下文將進(jìn)一步解釋的,兩個(gè)操作數(shù)都被用于加密或解密。這兩種情況下,通過(guò)使用一個(gè)或多個(gè)128比特的隱式寄存器(implicit register)(例如,以下將更詳細(xì)描述的XMMO和XMM1)將加密密鑰提供給AESENCRYPT和/或AESDECRYPT指令。
[0022]盡管以下許多描述都將集中于加密指令A(yù)ESENCRYPT,但加密領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,也可以以類似的方式替代和/或使用解密指令A(yù)ESDECRYPT以用于進(jìn)行解密。主要描述AESENCRYPT僅僅是為了說(shuō)明的清楚和方便,并不表示這些指令中的一個(gè)比另一個(gè)更重要。
[0023]計(jì)算機(jī)系統(tǒng)
[0024]圖1示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的示例計(jì)算機(jī)系統(tǒng)100。計(jì)算機(jī)系統(tǒng)100包括用于信息通信的互連101。該互連101可以包括一個(gè)多點(diǎn)總線、一個(gè)或多個(gè)點(diǎn)到點(diǎn)互連、或者這兩者的任意組合、以及任何其它的通信硬件和/或軟件。
[0025]圖1示出了用于處理信息的處理器109,其與互連101耦合。處理器109代表任意類型架構(gòu)(包括CISC或RISC類型架構(gòu))的中央處理單元。
[0026]計(jì)算機(jī)系統(tǒng)100進(jìn)一步包括隨機(jī)存取存儲(chǔ)器(RAM)或其它動(dòng)態(tài)存儲(chǔ)設(shè)備(被稱為主存儲(chǔ)器104),其耦合至互連101以存儲(chǔ)將被處理器109執(zhí)行的信息和指令。主存儲(chǔ)器104也可以在處理器109執(zhí)行指令的過(guò)程中用于存儲(chǔ)臨時(shí)變量或其它中間信息。
[0027]計(jì)算機(jī)系統(tǒng)100還包括只讀存儲(chǔ)器(ROM) 106和/或其它靜態(tài)存儲(chǔ)設(shè)備,其耦合至互連101以存儲(chǔ)處理器109的靜態(tài)信息和指令。數(shù)據(jù)存儲(chǔ)設(shè)備107耦合至互連101以用于存儲(chǔ)信息和指令。
[0028]圖1還示出了處理器109包括執(zhí)行單元130、寄存器文件150、高速緩存160、解碼器165和內(nèi)部互連170。當(dāng)然,處理器109還包含了對(duì)于理解本發(fā)明而言不必要的其它電路。
[0029]解碼器165用于對(duì)處理器109接收到的指令進(jìn)行解碼,執(zhí)行單元130用于執(zhí)行處理器109接收到的指令。除了識(shí)別通用處理器中所實(shí)現(xiàn)的典型指令外,解碼器165和執(zhí)行單元130還識(shí)別這里所描述的用于執(zhí)行AES加密或解密(AESENCRYPT或AESDECRYPT)操作的指令。解碼器165和執(zhí)行單元130識(shí)別用于對(duì)壓縮(packed)和非壓縮數(shù)據(jù)執(zhí)行AESENCRYPT或AESDECRYPT操作的指令。
[0030]執(zhí)行單元130通過(guò)內(nèi)部互連170耦合至寄存器文件150。同樣地,內(nèi)部互連170不必一定是多點(diǎn)總線,在替代性的實(shí)施例中,也可以是點(diǎn)到點(diǎn)互連或者其它類型的通信路徑。
[0031]寄存器文件150表示處理器109的一個(gè)存儲(chǔ)區(qū)域,其用于存儲(chǔ)包括數(shù)據(jù)在內(nèi)的信息。應(yīng)該理解,本發(fā)明的一個(gè)方面在于所描述的用于對(duì)壓縮或非壓縮數(shù)據(jù)執(zhí)行AESENCRYPT或AESDECRYPT操作的指令實(shí)施例。根據(jù)本發(fā)明的這個(gè)方面,用于存儲(chǔ)數(shù)據(jù)的存儲(chǔ)區(qū)域并不是關(guān)鍵的。不過(guò),寄存器文件150的實(shí)施例將參照?qǐng)D2隨后描述。
[0032]執(zhí)行單元130耦合至高速緩存160和解碼器165。高速緩存160用于對(duì)來(lái)自例如主存儲(chǔ)器104的數(shù)據(jù)和/或控制信號(hào)進(jìn)行緩存。解碼器165用于將處理器109接收到的指令解碼為控制信號(hào)和/或微代碼入口點(diǎn)(microcode entry point)。這些控制信號(hào)和/或微代碼入口點(diǎn)可從解碼器165轉(zhuǎn)發(fā)到執(zhí)行單元130。
[0033]響應(yīng)于這些控制信號(hào)和/或微代碼入口點(diǎn),執(zhí)行單元130執(zhí)行恰當(dāng)?shù)牟僮鳌@?,如果接收到AESENCRYPT或AESDECRYPT指令,解碼器165使得執(zhí)行單元130執(zhí)行所需的比特加密或解密。至少在某些實(shí)施例中,執(zhí)行單元130可以使用一個(gè)或多個(gè)密鑰來(lái)加密或解密128比特的明文或密文(參見(jiàn),例如密碼電路145)。
[0034]解碼器165可以用任意數(shù)量的不同機(jī)制來(lái)實(shí)現(xiàn)(例如,查找表、硬件實(shí)現(xiàn)、PLA等)。因此,雖然由解碼器165和執(zhí)行單元130執(zhí)行各種指令在此處可以用一系列if/then語(yǔ)句來(lái)表示,但應(yīng)該理解,一條指令的執(zhí)行并不需要這些if/then語(yǔ)句的一系列處理。而是,任何用于邏輯地執(zhí)行該if/then處理的機(jī)制都被認(rèn)為落入本發(fā)明的范圍內(nèi)。
[0035]圖1還示出了可以耦合至計(jì)算機(jī)系統(tǒng)100的數(shù)據(jù)存儲(chǔ)設(shè)備107 (例如,磁盤、光盤、和/或其它機(jī)器可讀媒體)。另外,所示的數(shù)據(jù)存儲(chǔ)設(shè)備107包括要由處理器109執(zhí)行的代碼195。代碼195可包括AESENCRYPT或AESDECRYPT指令142的一個(gè)或多個(gè)實(shí)施例,并且其可以被寫入以使處理器109為了任何與安全相關(guān)的目的而利用AESENCRYPT或AESDECRYPT指令142來(lái)執(zhí)行比特AES加密或解密。
[0036]計(jì)算機(jī)系統(tǒng)100還可以通過(guò)互連101耦合至顯示設(shè)備121,以便向計(jì)算機(jī)用戶顯示信息。顯示設(shè)備121可以包括幀緩沖器、專業(yè)圖形渲染設(shè)備、液晶顯示器(LCD)、和/或平板顯示器。
[0037]輸入設(shè)備122包括字母數(shù)字和其它按鍵,其可被耦合至互連101以向處理器109傳送信息和命令選擇。另一類用戶輸入設(shè)備是光標(biāo)控制器123,例如鼠標(biāo)、軌跡球、筆、觸摸屏、或者光標(biāo)方向鍵,用于向處理器109傳送方向信息和命令選擇、以及用于控制顯示設(shè)備121上的光標(biāo)移動(dòng)。這類輸入設(shè)備典型地具有兩個(gè)軸的自由度,第一軸(例如,X)和第二軸(例如,y),這使得該設(shè)備能夠指定平面上的位置。然而,本發(fā)明并不限于輸入設(shè)備只有二自由度。
[0038]可耦合至互連101的另一個(gè)設(shè)備是硬拷貝設(shè)備124,其可以用于在介質(zhì)(例如紙、膠片、或相似類型的媒體)上印制指令、數(shù)據(jù)或其它信息。另外,計(jì)算機(jī)系統(tǒng)100可以耦合至用于聲音記錄和/或回放的設(shè)備125,例如耦合至麥克風(fēng)的用于記錄信息的音頻數(shù)字化轉(zhuǎn)換器(audio digitizer)。此外,設(shè)備125可以包括揚(yáng)聲器,其稱合至數(shù)模(D/A)轉(zhuǎn)換器,用于回放數(shù)字化的聲音。
[0039]計(jì)算機(jī)系統(tǒng)100可以是計(jì)算機(jī)網(wǎng)絡(luò)(例如,LAN)中的一個(gè)終端。計(jì)算機(jī)系統(tǒng)100可以是計(jì)算機(jī)網(wǎng)絡(luò)的一個(gè)計(jì)算機(jī)子系統(tǒng)??蛇x地,計(jì)算機(jī)系統(tǒng)100包括視頻數(shù)字化設(shè)備126和/或通信設(shè)備190 (例如,串行通信芯片、無(wú)線接口、以太網(wǎng)芯片或調(diào)制解調(diào)器,其提供與外部設(shè)備或者網(wǎng)絡(luò)的通信)。視頻數(shù)字化設(shè)備126可用于捕獲能夠傳送至計(jì)算機(jī)網(wǎng)絡(luò)中的其它計(jì)算機(jī)的視頻圖像。[0040]在至少一個(gè)實(shí)施例中,處理器109支持與由加利福尼亞州Santa Clara的英特爾公司制造的現(xiàn)有處理器(比如說(shuō),Intel? Pentium?.處理器、Intel? Pentium? Pro處理器、Intel? Pentium? I [處理器、Intel? Pentium? III 處」:Ψ.器、Intel? Pentium?4 處理器、Intel? Itanium? 處理器、Intel? Itanium? 2 處理器、或者Intel? Core? Duo
處理器)所使用的指令集相兼容的指令集。因此,處理器109除了支持本發(fā)明中的操作外,也可以支持現(xiàn)有的處理器操作。處理器109也可適于用一種或多種工藝技術(shù)來(lái)制造,并通過(guò)足夠詳細(xì)地表示在機(jī)器可讀媒體上的方式,其適于促進(jìn)所述制造。雖然在以下描述中本發(fā)明被具體表現(xiàn)為基于x86的指令集,但是替代性的實(shí)施例可將本發(fā)明具體表現(xiàn)為其它的指令集。例如,本發(fā)明可具體表現(xiàn)為一 64位處理器,其使用的指令集不同于基于x86的指令集。
[0041]圖2示出了根據(jù)本發(fā)明的一個(gè)替代性實(shí)施例的處理器的寄存器文件。寄存器文件150可以用于存儲(chǔ)信息,包括控制/狀態(tài)信息、整數(shù)數(shù)據(jù)、浮點(diǎn)數(shù)據(jù)和壓縮數(shù)據(jù)。在圖2所示的實(shí)施例中,寄存器文件150包括整數(shù)寄存器201、寄存器209、狀態(tài)寄存器208、擴(kuò)展寄存器210以及指令指針寄存器211。狀態(tài)寄存器208、指令指針寄存器211、整數(shù)寄存器201和寄存器209都耦合至內(nèi)部互連170。另外,擴(kuò)展寄存器210也耦合至內(nèi)部互連170。內(nèi)部互連170可以是多點(diǎn)總線,但這不是必須的。替代地,內(nèi)部互連170可以是任意其它類型的通信路徑,包括點(diǎn)到點(diǎn)互連。
[0042]在至少一個(gè)實(shí)施例中,擴(kuò)展寄存器210被用于壓縮的整數(shù)數(shù)據(jù)和壓縮的浮點(diǎn)數(shù)據(jù)。在替代性的實(shí)施例中,擴(kuò)展寄存器210可用于標(biāo)量數(shù)據(jù)、壓縮的布爾數(shù)據(jù)、壓縮的整數(shù)數(shù)據(jù)和/或壓縮的浮點(diǎn)數(shù)據(jù)。當(dāng)然,替代性的實(shí)施例可被實(shí)現(xiàn)為包含更多或更少組的寄存器、在每組中具有更多或更少的寄存器、或者在每個(gè)寄存器中具有更多或更少的數(shù)據(jù)存儲(chǔ)比特,這些都不脫離本發(fā)明的更廣范圍。
[0043]在至少一個(gè)實(shí)施例中,整數(shù)寄存器201被實(shí)現(xiàn)為存儲(chǔ)32比特,寄存器209被實(shí)現(xiàn)為存儲(chǔ)80比特(所有80比特都被用于存儲(chǔ)浮點(diǎn)數(shù)據(jù),而只有64比特用于壓縮數(shù)據(jù)),擴(kuò)展寄存器210被實(shí)現(xiàn)為存儲(chǔ)128比特。此外,擴(kuò)展寄存器210可以包含8個(gè)寄存器,XR0213a至XR7213h。XR0213a、XR1213b和XR2213c都是寄存器210中單個(gè)寄存器的示例。例如,128比特的擴(kuò)展寄存器210可以用于提供AESENCRYPT指令的一個(gè)或兩個(gè)操作數(shù),并且可用于提供由該AESENCRYPT指令使用的一個(gè)或兩個(gè)隱式寄存器(例如,XMMO和XMM1)。
[0044]在另一個(gè)實(shí)施例中,每個(gè)整數(shù)寄存器201包含64比特,每個(gè)擴(kuò)展寄存器210包含64比特,并且擴(kuò)展寄存器210包含16個(gè)寄存器。在一個(gè)實(shí)施例中,擴(kuò)展寄存器210中的兩個(gè)寄存器可以被成對(duì)操作。在另一個(gè)替代性的實(shí)施例中,擴(kuò)展寄存器210包含32個(gè)寄存器。
[0045]AES加密和/或解密操作
[0046]圖3概念性地示出了用于ECB模式的AES加密指令(AESENCRYPT Argl, Arg2) 310。如圖所示,AESENCRYPT310具有兩個(gè)操作數(shù),其中一個(gè)是Arg2,它提供將被加密的明文。加密后的密文被寫入到AESENCRYPT310的Argl中。加密密鑰由一個(gè)或多個(gè)隱式的128比特寄存器XMMO和XMMl提供。如果例如加密密鑰長(zhǎng)度為128比特,則它可由一個(gè)寄存器XMMO來(lái)提供。在這種情況下,另一個(gè)寄存器XMMl可用于其它功能,將參照?qǐng)D4進(jìn)行說(shuō)明。
[0047]如圖3所示,在ECB模式中,AESENCRYPT310是用一個(gè)密鑰對(duì)來(lái)自于Arg2的明文進(jìn)行加密。一種用于確定AESENCRYPT310工作于哪種模式(例如,ECB、CBC等)的方案是利用操作數(shù)來(lái)確定模式。在一個(gè)具體實(shí)現(xiàn)中,AESENCRYPT310對(duì)其操作數(shù)Argl和Arg2執(zhí)行異或(XOR)后,再使用密鑰對(duì)該結(jié)果進(jìn)行加密。這種方案允許AESENCRYPT310具有一個(gè)或兩個(gè)輸入,將參考圖4對(duì)其作進(jìn)一步的詳細(xì)說(shuō)明。如果只需要一個(gè)輸入,例如圖3所示的用于ECB模式的Arg2,則另一個(gè)操作數(shù)Argl可被設(shè)為0,從而AESENCRYPT310的XOR運(yùn)算只生成第一個(gè)操作數(shù)Arg2,以用密鑰進(jìn)行加密。如何將這種XOR方案用于CBC和CTR模式將參照?qǐng)D5-9進(jìn)一步說(shuō)明。
[0048]另一種用于確定AESENCRYPT310工作于何種模式的方案(未示出)是在AESENCRYPT310指令中除了兩個(gè)操作數(shù)Argl和Arg2之外,使用一個(gè)立即字節(jié)(immediatebyte)。與對(duì)操作數(shù)執(zhí)行XOR的第一種方案相比,第二種方案可以基于立即字節(jié)的內(nèi)容來(lái)指定如何和/或是否使用AESENCRYPT310的一個(gè)或兩個(gè)操作數(shù)。除這兩種方案之外的其它方案都是可能的,并設(shè)想使單個(gè)的二操作數(shù)指令(例如AESENCRYPT310 (或AESDECRYPT))可用于多種不同的模式(例如,ECB、CBC、CTR等)中。
[0049]圖4示出了用于在ECB模式中使用AESENCRYPT310的示例代碼410 (例如,當(dāng)其被處理器109執(zhí)行時(shí),構(gòu)成一個(gè)方法)。首先加密密鑰被(通過(guò)MOV指令或類似指令)裝入一個(gè)隱式寄存器ΧΜΜ0。隨后一個(gè)值(例如,16)被(通過(guò)MOV指令或類似指令)裝入另一個(gè)寄存器ECX,以設(shè)定要進(jìn)行AES加密的128比特明文塊的數(shù)目。將該值乘以128比特可以指定將被代碼410加密的明文的總長(zhǎng)度。上述初始化完成后,包括AESENCRYPT310的循環(huán)將被執(zhí)行ECX次。
[0050]在該循環(huán)中,對(duì)于ECB模式,第二隱式寄存器XMMl通過(guò)裝入O值而被清零。如上所述,當(dāng)AESENCRYPT310對(duì)該O值與第二操作數(shù)執(zhí)行XOR時(shí),產(chǎn)生的是該第二操作數(shù),這正是在ECB模式中工作的期望結(jié)果。轉(zhuǎn)向下一條指令,AESENCRYPT310取得Plainmemory [ECX]中的明文,利用XMMO中的密鑰加密該明文,并將該結(jié)果寫入到第二隱式寄存器XMM1。隨后XMMl中的密文被存儲(chǔ)到Ciphermemory [ECX],并且在跳轉(zhuǎn)回到該循環(huán)的起點(diǎn)之前將ECX中的循環(huán)值遞減。
[0051]在下一次循環(huán)中,再一次清空了 XMMl中之前128比特的加密結(jié)果。這樣,AESENCRYPT310令對(duì)應(yīng)于ECX中遞減值的Plainmemory [ECX]的單個(gè)輸入被用XMMO中的密鑰進(jìn)行加密。繼續(xù)代碼410的循環(huán)執(zhí)行,直到由裝入ECX的初始值指定的所有明文塊都被以ECB模式進(jìn)行了 AES加密。
[0052]圖5概念性地示出了用于CBC模式的AES加密指令(AESENCRYPTArgl,Arg2) 310。如圖所示,AESENCRYPT310具有兩個(gè)操作數(shù),其中一個(gè)操作數(shù)Arg2提供將被加密的明文。在CBC模式中,另一個(gè)操作數(shù)Argl提供來(lái)自先前加密塊的所謂的“舊”密文,AESENCRYPT310在加密之前將其與所述明文進(jìn)行X0R。加密密鑰由一個(gè)或多個(gè)隱式的128比特寄存器XMMO和XMMl提供。對(duì)于當(dāng)前塊的加密后的密文被覆寫到AESENCRYPT310的Argl。
[0053]圖6概念性地示出了用于CBC模式的兩個(gè)鏈接的AES加密指令600。這直觀地顯示了 CBC模式的暫時(shí)性(時(shí)間上首先發(fā)生的運(yùn)算出現(xiàn)在圖的左邊),其中對(duì)前一個(gè)加密塊的結(jié)果與新的明文進(jìn)行X0R。這將產(chǎn)生一個(gè)比ECB模式更加隨機(jī)的密文(例如,在ECB模式中,如果是相同的密鑰,則相同的明文塊將被加密為相同的密文塊)。圖6所示的CBC模式中,針對(duì)一個(gè)給定明文塊的密文取決于前一輪的密文結(jié)果。[0054]圖7示出了用于在CBC模式中使用AES加密指令的示例代碼710 (例如,當(dāng)其被處理器109執(zhí)行時(shí),構(gòu)成一個(gè)方法)。首先,加密密鑰被(通過(guò)MOV指令或類似指令)裝入一個(gè)隱式寄存器ΧΜΜ0。然后一個(gè)值(例如,16,但該數(shù)字可以更高或更低)可被(通過(guò)MOV指令或類似指令)裝入另一個(gè)寄存器ECX,以設(shè)定要進(jìn)行AES加密的128比特明文塊的數(shù)目。將該值乘以128比特可以指定將被代碼710加密的明文的總長(zhǎng)度。同樣,第一次執(zhí)行該循環(huán)時(shí),XMMl被裝入一個(gè)O而被清零,這是因?yàn)闆](méi)有來(lái)自先前塊的密文可用于與第一個(gè)明文塊相結(jié)合。上述初始化完成后,包括AESENCRYPT310的循環(huán)將被執(zhí)行ECX次。
[0055]在該循環(huán)中,AESENCRYPT310取得Plainmemeory [ECX]中的明文,將其與XMMl中的值(例如,第一遍循環(huán)中為O)進(jìn)行X0R,用XMMO中的密鑰對(duì)該XOR結(jié)果進(jìn)行加密,并將結(jié)果寫入到第二隱式寄存器XMMl中以覆蓋其中已經(jīng)存在的值。隨后XMMl中的密文被存儲(chǔ)到Ciphermemory [ECX]中,并在跳轉(zhuǎn)回到該循環(huán)的起點(diǎn)之前將ECX中的循環(huán)值遞減。
[0056]在下一次循環(huán)中,與ECB模式不同,XMMl中前一次128比特的非O密文結(jié)果不被清零。相反地,根據(jù)CBC模式,在使用密鑰進(jìn)行加密前,AESENCRYPT310將該加密結(jié)果與下一個(gè)明文塊進(jìn)行X0R。這樣,AESENCRYPT310具有兩個(gè)輸入,即對(duì)應(yīng)于ECX中遞減值的Plainmemory [ECX]、以及XMMl中來(lái)自前一次循環(huán)的密文值。AESENCRYPT310指令將這兩個(gè)輸入進(jìn)行XOR并使用XMMO中的密鑰對(duì)該結(jié)果進(jìn)行加密。繼續(xù)代碼710的循環(huán)執(zhí)行,直到由裝入ECX的初始值指定的所有明文塊都被以CBC模式進(jìn)行了 AES加密。
[0057]以上描述的方案和系統(tǒng)可以有利地使用一個(gè)二操作數(shù)指令來(lái)執(zhí)行CBC模式和ECB模式加密。該指令支持在AES最常見(jiàn)的兩種模式中實(shí)現(xiàn)更緊密的AES循環(huán)。該指令具有有限數(shù)量的操作數(shù),并且將AES最常見(jiàn)的使用轉(zhuǎn)移到單指令中,該單指令仍支持次常見(jiàn)的使用。
[0058]圖8概念性地示出了用于CTR模式的AES加密指令(AESENCRYPT Argl, Arg2) 810。如圖所示,AESENCRYPT810具有兩個(gè)操作數(shù),其中一個(gè)操作數(shù)Arg2提供將被加密的計(jì)數(shù)器值。在CTR模式中,另一個(gè)操作數(shù)Argl提供將被加密的明文,在加密后由AESENCRYPT810將其與明文進(jìn)行X0R。加密密鑰由一個(gè)或多個(gè)隱式的128比特寄存器XMMO和XMMl提供。對(duì)于當(dāng)前塊的加密后的密文被覆寫到AESENCRYPT810的Argl。
[0059]圖9示出了用于在CTR模式中使用AES加密指令的示例代碼910 (例如,當(dāng)其被處理器109執(zhí)行時(shí),構(gòu)成一個(gè)方法)。首先加密密鑰被(通過(guò)MOV指令或類似指令)裝入一個(gè)隱式寄存器XMMO中。然后一個(gè)值(例如,16,但該數(shù)字可以更高或更低)被(通過(guò)MOV指令或類似指令)裝入另一個(gè)寄存器ECX,以設(shè)定要進(jìn)行AES加密的128比特明文塊的數(shù)目。將該值乘以128比特可以指定將被代碼910加密的明文的總長(zhǎng)度。然后,一個(gè)計(jì)數(shù)器值被(通過(guò)MOV指令或類似指令)裝入另一個(gè)XMM寄存器(例如XMM4)。上述初始化完成后,包括AESENCRYPT810的循環(huán)將被執(zhí)行ECX次。
[0060]在該循環(huán)中,AESENCRYPT810取得計(jì)數(shù)器值,將實(shí)際加密該計(jì)數(shù)器值,隨后將其與明文數(shù)據(jù)執(zhí)行XOR以產(chǎn)生密文。然后XMM3中的密文被存儲(chǔ)到Ciphermemory [ECX],并且在跳轉(zhuǎn)回到該循環(huán)的起點(diǎn)之前將ECX中的循環(huán)值遞減。隨后,該計(jì)數(shù)器被適當(dāng)調(diào)整(通過(guò)ADD、MUL或其它指令)。該循環(huán)的其它過(guò)程與ECB模式相同。
[0061]以上對(duì)一個(gè)或多個(gè)實(shí)施例的描述提供了示例和說(shuō)明,但是其并不意味著窮舉或者將本發(fā)明的保護(hù)范圍限制在其所公開(kāi)的精確形式內(nèi)?;谝陨蠁⑹究芍鞣N修改或變型,或者也可以從對(duì)本發(fā)明的各種具體實(shí)現(xiàn)的實(shí)施中獲得。
[0062]例如,盡管針對(duì)128比特的密鑰描述了 AES加密和解密,但FIPS Publicationl97中的NIST標(biāo)準(zhǔn)允許192比特和256比特的密鑰。在這種情況下,XMMl可以用于192比特或256比特密鑰中另外的64比特或者128比特。在這種情況下,可以使用某些其它128比特寄存器(例如,XMM2、XMM3等),來(lái)代替代碼410或代碼710或代碼910 (或者任何其中包含AESENCRYPT或AESDECRYPT的代碼)中的XMMl,這是因?yàn)槊荑€的一部分將存儲(chǔ)在XMMl中。
[0063]盡管以上描述了 AESENCRYPT,但是也可以以類似方式使用AESDECRYPTArgl, Arg2,以支持在ECB模式、CTR模式以及CBC模式中的AES解密。本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到,使用ECB模式的AESDECRYPT會(huì)相對(duì)直接,而CBC模式將帶來(lái)額外的計(jì)算,例如對(duì)于在加密過(guò)程中由AESENCRYPT執(zhí)行的XOR運(yùn)算的逆或反運(yùn)算。
[0064]應(yīng)該理解,盡管沒(méi)有呈現(xiàn)AESENCRYPT和AESDECRYPT如何精確執(zhí)行AES算法的細(xì)節(jié),但這些都在加密領(lǐng)域的技術(shù)人員的能力范圍之內(nèi)。特定的實(shí)施例可能旨在對(duì)其中執(zhí)行AESENCRYPT和AESDECRYPT的特定處理器109進(jìn)行優(yōu)化。在某些實(shí)施例中,這些指令被用機(jī)器語(yǔ)言優(yōu)化從而使最快速的執(zhí)行成為可能。這些優(yōu)化的細(xì)節(jié)與所請(qǐng)求保護(hù)的發(fā)明并非特別相關(guān),所以為了說(shuō)明的清楚而將其省略。
[0065]本申請(qǐng)的說(shuō)明書中所使用的元素、動(dòng)作或指令不應(yīng)被解釋為對(duì)本發(fā)明是關(guān)鍵的或基本的,除非被明確描述為這樣。而且,如這里所使用的,冠詞“一個(gè)”旨在包括一項(xiàng)或多項(xiàng)??蓪?duì)所要求保護(hù)的發(fā)明的上述具體實(shí)現(xiàn)進(jìn)行許多改變或變型,而本質(zhì)上并不脫離本發(fā)明的實(shí)質(zhì)和原理。所有這樣的變型和改變?cè)谶@里都應(yīng)該被認(rèn)為包含在本公開(kāi)的范圍之內(nèi)并受所附權(quán)利要求的保護(hù)。
【權(quán)利要求】
1.一種用于執(zhí)行加密的處理器,包括: 解碼器,用于對(duì)所述處理器接收到的指令進(jìn)行解碼; 執(zhí)行單元,用于執(zhí)行所述指令; 寄存器文件,其通過(guò)內(nèi)部互連耦合至所述執(zhí)行單元; 所述執(zhí)行單元包括密碼電路,該密碼電路用于響應(yīng)于具有第一操作數(shù)和第二操作數(shù)、并可在多種加密模式中使用的單個(gè)加密指令,將明文值與第二值進(jìn)行邏輯結(jié)合以產(chǎn)生一結(jié)合結(jié)果,并且使用高級(jí)加密標(biāo)準(zhǔn)(AES)算法和由第一隱式寄存器提供的密鑰來(lái)對(duì)該結(jié)合結(jié)果進(jìn)行加密以產(chǎn)生一加密結(jié)果,其中,所述第一操作數(shù)用于確定所述多種加密模式中的一種模式。
2.如權(quán)利要求1所述的處理器,其中,在第一模式中并且響應(yīng)于所述單個(gè)加密指令,所述執(zhí)行單元執(zhí)行第一循環(huán)以:清空第二隱式寄存器,對(duì)從第一存儲(chǔ)器中由計(jì)數(shù)器值指示的位置獲得的所述第二操作數(shù)所提供的明文值與由所述第二隱式寄存器提供的第二值進(jìn)行邏輯結(jié)合以產(chǎn)生所述結(jié)合結(jié)果,使用AES算法和所述密鑰來(lái)對(duì)所述結(jié)合結(jié)果進(jìn)行加密以產(chǎn)生所述加密結(jié)果,將所述加密結(jié)果存儲(chǔ)在第二存儲(chǔ)器中由所述計(jì)數(shù)器值指示的位置中,遞減所述計(jì)數(shù)器值,并且重新執(zhí)行所述第一循環(huán)直到所述計(jì)數(shù)器值為零。
3.如權(quán)利要求1所述的處理器,其中,在第二模式中并且響應(yīng)于所述單個(gè)加密指令,所述執(zhí)行單元執(zhí)行第二循環(huán)以:對(duì)所述明文值與所述第二值進(jìn)行邏輯結(jié)合以產(chǎn)生所述結(jié)合結(jié)果,使用AES算法和所述密鑰對(duì)所述結(jié)合結(jié)果進(jìn)行加密以產(chǎn)生所述加密結(jié)果,將所述加密結(jié)果存儲(chǔ)在第二存儲(chǔ)器中由計(jì)數(shù)器值指示的位置中,遞減所述計(jì)數(shù)器值,并且重新執(zhí)行所述第二循環(huán)直到所述計(jì)數(shù)器值為零。
4.如權(quán)利要求1所述的處理器,其中,所述密碼電路用于對(duì)所述明文值和所述第二值進(jìn)行異或(XOR),以產(chǎn)生所述結(jié)合結(jié)果,并且所述第一操作數(shù)中被寫入所述加密結(jié)果,而所述第二操作數(shù)提供所述明文值。
5.如權(quán)利要求1所述的處理器,還包括: 第一寄存器,用于存儲(chǔ)所述第二值;以及 第二寄存器,用于存儲(chǔ)所述密鑰,其中所述第二寄存器是用于所述單個(gè)加密指令的隱式寄存器。
6.如權(quán)利要求5所述的處理器,其中,所述密碼電路用于將所述加密結(jié)果存儲(chǔ)在所述第一寄存器中。
7.如權(quán)利要求6所述的處理器,其中,所述第二值是前一次加密的結(jié)果或者O。
8.如權(quán)利要求1所述的處理器,其中,所述明文值和所述加密結(jié)果的長(zhǎng)度均為128比特。
9.一種用于執(zhí)行加密的方法,包括: 響應(yīng)于具有第一操作數(shù)和第二操作數(shù)、并可在多種加密模式中使用的單個(gè)加密指令,將該指令的第一操作數(shù)與該指令的第二操作數(shù)相結(jié)合,以產(chǎn)生一結(jié)果; 根據(jù)高級(jí)加密標(biāo)準(zhǔn)(AES)算法,使用由第一隱式寄存器提供的密鑰對(duì)該結(jié)果進(jìn)行加密,以產(chǎn)生一加密結(jié)果,所述第一操作數(shù)用于確定所述多種加密模式中的一種模式, 其中,在第一模式中并且響應(yīng)于所述單個(gè)加密指令,執(zhí)行第一循環(huán)以執(zhí)行所述加密,并且在在第二模式中并且響應(yīng)于所述單個(gè)加密指令,執(zhí)行第二循環(huán)以執(zhí)行所述加密。
10.如權(quán)利要求9所述的方法,其中,在所述第一循環(huán)中,使用處理器的執(zhí)行邏輯來(lái):清空第二隱式寄存器,對(duì)從第一存儲(chǔ)器中由計(jì)數(shù)器值指示的位置獲得的所述第二操作數(shù)所提供的明文值與由所述第二隱式寄存器提供的第二值進(jìn)行邏輯結(jié)合以產(chǎn)生所述結(jié)果,使用AES算法和所述密鑰來(lái)對(duì)所述結(jié)果進(jìn)行加密以產(chǎn)生所述加密結(jié)果,將所述加密結(jié)果存儲(chǔ)在第二存儲(chǔ)器中由所述計(jì)數(shù)器值指示的位置中,遞減所述計(jì)數(shù)器值,并且重新執(zhí)行所述第一循環(huán)直到所述計(jì)數(shù)器值為零。
11.如權(quán)利要求10所述的方法,其中,在所述第二循環(huán)中,使用所述執(zhí)行邏輯來(lái):對(duì)所述明文值與所述第二值進(jìn)行邏輯結(jié)合以產(chǎn)生所述結(jié)果,使用AES算法和所述密鑰對(duì)所述結(jié)果進(jìn)行加密以產(chǎn)生所述加密結(jié)果,將所述加密結(jié)果存儲(chǔ)在所述第二存儲(chǔ)器中由所述計(jì)數(shù)器值指示的位置中,遞減所述計(jì)數(shù)器值,并且重新執(zhí)行所述第二循環(huán)直到所述計(jì)數(shù)器值為零。
12.如權(quán)利要求9所述的方法,其中,所述密鑰的長(zhǎng)度為128比特、192比特或256比特。
13.一種機(jī)器可讀介質(zhì),所述機(jī)器可讀介質(zhì)包括代碼,所述代碼在被執(zhí)行時(shí)使得機(jī)器執(zhí)行如權(quán)利要求9-12中的任一項(xiàng)所述的方法。
14.一種用于執(zhí)行加密的裝置,包括: 第一邏輯,用于響應(yīng)于具有第一操作數(shù)和第二操作數(shù)、并可在多種加密模式中使用的單個(gè)加密指令,將該指令的第一操作數(shù)與該指令的第二操作數(shù)相結(jié)合,以產(chǎn)生一結(jié)果; 第二邏輯,用于根據(jù)高級(jí)加密標(biāo)準(zhǔn)(AES)算法,使用由第一隱式寄存器提供的密鑰對(duì)該結(jié)果進(jìn)行加密,以產(chǎn)生一加密結(jié)果,其中,所述第一操作數(shù)用于確定所述多種加密模式中的一種模式;以及 第三邏輯,用于將該加密結(jié)果放在該指令的第一操作數(shù)的位置上。
15.如權(quán)利要求14所述的裝置,其中,在第一模式中并且響應(yīng)于所述單個(gè)加密指令,執(zhí)行邏輯執(zhí)行第一循環(huán)以:清空第二隱式寄存器,對(duì)從第一存儲(chǔ)器中由計(jì)數(shù)器值指示的位置獲得的所述第二操作數(shù)所提供的明文值與由所述第二隱式寄存器提供的第二值進(jìn)行邏輯結(jié)合以產(chǎn)生所述結(jié)果,使用AES算法和所述密鑰來(lái)對(duì)所述結(jié)果進(jìn)行加密以產(chǎn)生所述加密結(jié)果,將所述加密結(jié)果存儲(chǔ)在第二存儲(chǔ)器中由所述計(jì)數(shù)器值指示的位置中,遞減所述計(jì)數(shù)器值,并且重新執(zhí)行所述第一循環(huán)直到所述計(jì)數(shù)器值為零。
16.如權(quán)利要求15所述的裝置,其中,在第二模式中并且響應(yīng)于所述單個(gè)加密指令,所述執(zhí)行邏輯執(zhí)行第二循環(huán)以:對(duì)所述明文值與所述第二值進(jìn)行邏輯結(jié)合以產(chǎn)生所述結(jié)果,使用AES算法和所述密鑰對(duì)所述結(jié)果進(jìn)行加密以產(chǎn)生所述加密結(jié)果,將所述加密結(jié)果存儲(chǔ)在所述第二存儲(chǔ)器中由所述計(jì)數(shù)器值指示的位置中,遞減所述計(jì)數(shù)器值,并且重新執(zhí)行所述第二循環(huán)直到所述計(jì)數(shù)器值為零。
17.如權(quán)利要求14所述的裝置,其中,所述第一邏輯包括: 第四邏輯,用于對(duì)所述指令的第一操作數(shù)和該指令的第二操作數(shù)進(jìn)行異或,以產(chǎn)生所述結(jié)果。
18.如權(quán)利要求14所述的裝置,其中,所述第二邏輯包括: 第五邏輯,用于從一個(gè)或多個(gè)預(yù)定的寄存器中獲得所述密鑰。
19.如權(quán)利要求14所述的裝置,其中,所述密鑰的長(zhǎng)度為128比特、192比特或256比特。
20.如權(quán)利要求14所述的裝置,其中,所述第二操作數(shù)是長(zhǎng)度為128比特的要被加密的明文。
21.如權(quán)利要 求14所述的裝置,其中,所述第一操作數(shù)是O。
22.如權(quán)利要求14所述的裝置,其中,所述第一操作數(shù)是來(lái)自先前加密操作的先前加S結(jié)果。
【文檔編號(hào)】H04L9/06GK103957100SQ201410197191
【公開(kāi)日】2014年7月30日 申請(qǐng)日期:2008年3月14日 優(yōu)先權(quán)日:2007年3月14日
【發(fā)明者】M·狄克遜, S·陳努帕蒂, S·格倫 申請(qǐng)人:英特爾公司