專利名稱:用于高級加密標準(aes)的靈活結構和指令的制作方法
用于高級加密標準(AES)的靈活結構和指令
本申請是申請日為2008年3月25日、申請?zhí)枮?00880006495.1的同名專利申請的分案申請。技術領域
本公開涉及密碼算法,并且具體而言,涉及高級加密標準(AES)算法。
背景技術:
密碼是依靠算法和密鑰來保護信息的工具。這種算法是復雜的數(shù)學算法,而所述密鑰是比特串。密碼系統(tǒng)具有兩種基本類型:私用密鑰系統(tǒng)和公共密鑰系統(tǒng)。私用密鑰系統(tǒng)又稱為對稱系統(tǒng),其具有兩方或多方共享的單個密鑰(“私用密鑰”)。該單個密鑰既用于加密信息也用于解密信息。
國家標準和技術研究所(NIST)發(fā)布的作為聯(lián)邦信息處理標準(FIPS) 197的高級加密標準(AES)是一種私用密鑰系統(tǒng)。AES是能夠加密和解密信息的對稱塊加密(blockcipher)。
加密技術(加密)使用私用密鑰(加密密鑰)執(zhí)行一系列的轉(zhuǎn)換,以將被稱為“明文”的可理解數(shù)據(jù)轉(zhuǎn)換為被稱為“密文”的無法理解的形式。加密中的轉(zhuǎn)換包括:(1)使用異或(XOR)操作將循環(huán)(round)密鑰(從加密密鑰導出的值)與體(state)(字節(jié)的二維陣列)相加;(2 )使用非線性字節(jié)替換表(S-盒(S-Box ))對體進行處理;(3 )使用不同的偏移來循環(huán)移位所述體的最后三行;以及(4)獲取所述體的所有列,并且(相互獨立地)混合所述列的數(shù)據(jù)以產(chǎn)生新的列。
解密(反加密)使用加密密鑰來執(zhí)行一系列的轉(zhuǎn)換,以將“密文”塊轉(zhuǎn)換為同樣大小的“明文”塊。反加密中的轉(zhuǎn)換是加密中進行的變換的逆操作。
在AES標準中指定Rijindael算法使用長度為128、192和256位的加密密鑰來處理128位的數(shù)據(jù)塊。一般將不同的密鑰長度稱為AES-128、AES-192和AES-256。
AES算法在10、12或14個連續(xù)循環(huán)中將明文轉(zhuǎn)換為密文或者將密文轉(zhuǎn)換為明文,其中,循環(huán)的次數(shù)取決于密鑰長度。
根據(jù)下面進行的詳細描述以及參考附圖,所要求保護主題的實施例的特征將變得明顯,其中同樣的附圖標記代表同樣的部件,并且其中:
圖1是系統(tǒng)的框圖,其包括根據(jù)本發(fā)明的原理用于在通用處理器中執(zhí)行AES加密和解密的靈活結構和指令的實施例;
圖2是圖1中示出的處理器的實施例的框圖3是包括圖2中示出的用于根據(jù)本發(fā)明的原理來執(zhí)行AES加密和解密的執(zhí)行單元的實施例的框圖4是示出了通過圖3中示出的執(zhí)行單元的aes加密循環(huán)指令流的流程圖5是示出了通過圖3中示出的執(zhí)行單元的aes加密最后一個循環(huán)指令流的流程圖6是示出了通過圖3中示出的執(zhí)行單元的aes解密循環(huán)指令流的流程圖7是示出了通過圖3中示出的執(zhí)行單元的aes解密最后一個循環(huán)指令流的流程圖;以及
圖8示出了可以用來生成循環(huán)密鑰并執(zhí)行加密和解密的具有立即(immediate)字節(jié)的aes循環(huán)指令的實施例。
盡管以下詳細描述將參考要求保護主題的說明性實施例來進行,但是本領域的技術人員會清楚其多種替換、更改和變化。因此,應當寬泛地看待所要求保護的主題,并且應該僅由所附權利要求對所要求保護的主題進行限定。
具體實施方式
高級加密標準(AES)算法是典型地在軟件或?qū)S锰幚砥髦袌?zhí)行的計算密集算法。因此,典型地,僅將加密操作用于對存儲在計算機中的信息的子集進行加密,例如,所述子集為可以歸類為“最高機密”的信息。然而,需要對存儲在計算機中的更多信息進行加密。例如,如果存儲在移動計算機中的所有信息都進行了加密,那么就算該移動計算機被盜,這些信息仍能受到保護。
AES是利用128、192或256位的密鑰長度對128位的比特塊進行操作的塊加密。根據(jù)密鑰長度,將一系列的操作反復執(zhí)行若干個(10、12或14個)循環(huán)。
通過使用隱式128位寄存器來存儲循環(huán)密鑰,可以動態(tài)地(即,剛好在每個循環(huán)之前)生成用于每個循環(huán)的密鑰。然而,由于依賴于先前指令的結果,使用隱式寄存器可能降低χ86型基于寄存器的處理器的性能。
存在一些應用受益于動態(tài)密鑰生成,例如,用于處理可能每個流具有不同密鑰的網(wǎng)絡分組的應用??赡艽嬖谝蟾咝阅艿氖褂脝蝹€密鑰的其它應用,例如,使用單個密鑰來加密/解密磁盤驅(qū)動器的內(nèi)容。因此,出現(xiàn)了對密鑰生成的靈活性的要求。本發(fā)明的實施例提供了用于在通用處理器中執(zhí)行AES加密和解密的靈活結構和指令。
圖1是系統(tǒng)100的框圖,其包括根據(jù)本發(fā)明的原理用于在通用處理器中執(zhí)行AES加密和解密的靈活結構和指令的實施例。系統(tǒng)100包括處理器101、存儲器控制器中心(MCH)或(圖形存儲器控制器中心(GMCH))102以及輸入/輸出(I/O)控制器中心(ICH)104。MCH102包括存儲器控制器1 06,其控制處理器101和存儲器108之間的通信。處理器101和MCH102通過系統(tǒng)總線116進行通信。
處理器ιο 可以是多種處理器中的任意一個,諸如:單核Intel 奔騰IV 處理器、單核Intel賽揚處理器、Intel XScale處理器,或者諸如Intel 奔騰D、Intel 至 I 處理器或Intel 酷睿 Duo處理器等多核處理器,或者任何其它類型的處理器。
存儲器108可以是動態(tài)隨機存取存儲器(DRAM)、靜態(tài)隨機存取存儲器(SRAM)、同步動態(tài)隨機存取存儲器(SDRAM)、雙數(shù)據(jù)速率2 (DDR2)RAM或者Rambus動態(tài)隨機存取存儲器(RDRAM)或者任何其它類型的存儲器。
ICH104可以使用高速芯片到芯片互聯(lián)114 (例如,直接介質(zhì)接口(DMI))來耦合到MCH102。DMI支持經(jīng)由兩個單向通道的2千兆比特/秒的并發(fā)傳輸速率。
ICH104可以包括存儲I/O控制器110,用于控制與耦合到ICH104的至少一個存儲設備112的通信。存儲設備可以是諸如:磁盤驅(qū)動器、數(shù)字視頻盤(DVD)驅(qū)動器、緊致盤(⑶)驅(qū)動器、獨立冗余磁盤陣列(RAID)、磁帶驅(qū)動器或其它存儲設備。ICH104可以使用串行存儲協(xié)議通過存儲協(xié)議互聯(lián)118與存儲設備112進行通信,所述串行存儲協(xié)議諸如:串行連接微型計算機系統(tǒng)接口(SAS)或者串行高級技術連接(SATA)。
處理器101包括AES功能模塊103,用于執(zhí)行aes加密和解密操作。AES功能模塊103可以用于對存儲在存儲器108和/或存儲在存儲設備112中的信息進行加密或解密。
圖2是圖1中示出的處理器101的實施例的框圖。處理器101包括提取和解碼單元206,用于對從第一級(LI)指令高速緩存202處接收的處理器指令進行解碼??梢詫⒂糜趫?zhí)行指令的數(shù)據(jù)存儲在寄存器堆208中。在一個實施例中,寄存器堆208包括多個128位寄存器,aes指令使用這些128位寄存器來存儲由aes指令使用的數(shù)據(jù)。
在一個實施例中,寄存器堆是一組128位寄存器,這些128位寄存器類似于在具有流(單指令多數(shù)據(jù)(SMD))擴展(SSE)指令集的Intel奔騰MMX處理器中提供的128位MMX寄存器。在SMD處理器中,以128位的塊來處理數(shù)據(jù),其中一次載入一個128位的塊。
提取和解碼單元206從LI指令高速緩存202中提取宏指令、解碼所述宏指令并且將其分解為稱為微操作(μops)的簡單操作,這些微操作可以存儲在微碼只讀存儲器(R0M)214中。執(zhí)行單元210調(diào)度和執(zhí)行這些微操作。在示出的實施例中,執(zhí)行單元210中的aes功能模塊103包括用于aes指令集的微操作。退出單元212將所執(zhí)行指令的結果寫入寄存器或存儲器。aes指令使用的循環(huán)密鑰214可以存儲在LI數(shù)據(jù)高速緩存204中,并且可以被載入到執(zhí)行單元210中以供微操作用于執(zhí)行aes指令集中的aes指令。將循環(huán)密鑰214存儲在數(shù)據(jù)高速緩存204中的處理使循環(huán)密鑰免于受到鄰近信道的攻擊,例如,嘗試獲取循環(huán)密鑰以便能訪問存儲在系統(tǒng)100中的加密信息。
圖3是示出了圖2中示出的用于根據(jù)本發(fā)明的原理來執(zhí)行AES加密和解密的執(zhí)行單元210的實施例的框圖。將結合圖2來描述圖3。
在提取和解碼單元206已經(jīng)將aes指令進行解碼之后,執(zhí)行單元210對aes指令的執(zhí)行涉及執(zhí)行可存儲在微碼R0M214中的與aes指令相關聯(lián)的微操作。
根據(jù)本發(fā)明的實施例的靈活AES指令集允許程序員針對待處理的數(shù)據(jù)量以及存儲器帶寬和容量來對性能進行折衷。
一些應用可以一直使用同一個密鑰。在性能至關重要的應用中,可以在每次預先計算密鑰的密鑰調(diào)度(即,每個循環(huán)的循環(huán)密鑰)以及將其存儲在存儲器中等方面進行折衷。其它應用可能需要將用于存儲密鑰調(diào)度的存儲器數(shù)量最小化并且仍然能夠?qū)崿F(xiàn)多塊操作的良好性能。對于這種應用,可以在處理之前對多個塊預先計算密鑰調(diào)度。通過僅存儲加密密鑰或反加密密鑰以及之后以一些性能為代價導出其它必要的信息,可以進一步使存儲器占用量(footprint)最小化。
在x86類型的處理器中,可用于AES循環(huán)密鑰操作和AES調(diào)度操作的執(zhí)行端口的區(qū)域和數(shù)量限制了 AES指令的性能。在每個塊加密都需要密鑰擴展的系統(tǒng)中,可以通過將AES調(diào)度操作和AES循環(huán)密鑰操作置于單獨的執(zhí)行端口來提高性能。然而,在x86類型的處理器中,可能無法使用單獨的執(zhí)行端口和用于控制該單獨端口的附加區(qū)域。
在一個實施例中,提供了 aes指令集,其包括單獨的aes指令,用于執(zhí)行加密循環(huán)、解密循環(huán)、加密最后一個循環(huán)、解密最后一個循環(huán),以及用于計算加密循環(huán)密鑰或解密循環(huán)密鑰。在一個實施例中,aes指令集中存在六個aes指令。每個aes循環(huán)指令具有唯一的操作碼(opcode)。下面在表I中不出了根據(jù)一個實施例的用于固定寬度循環(huán)密鑰(例如,128位)的aes指令集中的aes循環(huán)指令。
AESENCRYPTRound xmmsrcdst xmm
輸入:數(shù)據(jù)(=目標),循環(huán)密鑰
輸出:使用循環(huán)密鑰通過AES循環(huán)進行轉(zhuǎn)換之后的數(shù)據(jù)
AESENCRYPTLastRound xmmsrcdst xmm
輸入:數(shù)據(jù)(=目標),循環(huán)密鑰
輸出:使用循環(huán)密鑰通過AES最后一個循環(huán)進行轉(zhuǎn)換之后的數(shù)據(jù)
AESDECRYPTRound xmmsrcdst xmm
輸入:數(shù)據(jù)(=目標),循環(huán)密鑰
輸出:使用循環(huán)密鑰通過AES循環(huán)進行轉(zhuǎn)換之后的數(shù)據(jù)
AESDECRYPTLastRound xmmsrcdst xmm
輸入:數(shù)據(jù)(=目標),循環(huán)密鑰
輸出:使用循環(huán)密鑰通過AES最后一個循環(huán)進行轉(zhuǎn)換之后的數(shù)據(jù)
AESNextRoundKey xmmsrcl, 2xmm dst(immediate)
輸入:密鑰的低128位,密鑰的高128位,循環(huán)數(shù)的指示符
輸出:從輸入導出的下一個循環(huán)密鑰
AESPreviousRoundKey xmmsrcl, 2xmm dst(immediate)
輸入:密鑰的低128位,密鑰的高128位,循環(huán)數(shù)的指示符
輸出:從輸入導出的上一個循環(huán)密鑰
表I
所述aes指令集包括四個aes循環(huán)指令(加密、解密、加密最后一個循環(huán)和解密最后一個循環(huán))以及兩個aes循環(huán)密鑰指令(下一個循環(huán)密鑰以及上一個循環(huán)密鑰)。所述aes指令集中的aes循環(huán)指令包括用于執(zhí)行加密和解密循環(huán)操作的多個單循環(huán)操作,其用于除了最后一個循環(huán)的所有循環(huán)。例如,在表I的AES加密循環(huán)(AESENCRYPTRound)單循環(huán)指令中,輸入數(shù)據(jù)存儲在128位的寄存器(xmmsrcdst)中并且循環(huán)密鑰存儲在另一個128位的寄存器(xmm)中。該指令對存儲在128位的xmmsrcdst寄存器中的輸入數(shù)據(jù)(源)執(zhí)行aes循環(huán)操作,并且使用該循環(huán)操作的執(zhí)行結果來改寫存儲在該128位的xmmsrcdst寄存器中的輸入數(shù)據(jù)。因此,xmmsrcdst先是存儲輸入數(shù)據(jù),而后存儲aes循環(huán)操作的結果。
所述aes指令集還包括:用于最后一個解密循環(huán)的aes解密指令,以及用于最后一個加密循環(huán)的aes加密指令。例如,在表I的AES加密最后一個循環(huán)(AESENCRYPTLastRound)單循環(huán)指令中,輸入數(shù)據(jù)存儲在128位的寄存器(xmmsrcdst)中并且循環(huán)密鑰存儲在另一個128位的寄存器(xmm)中。該指令對存儲在xmmsrcdst寄存器中的輸入數(shù)據(jù)(源)執(zhí)行aes循環(huán)操作,并且使用該循環(huán)操作的執(zhí)行結果來改寫存儲在x_srcdst寄存器中的輸入數(shù)據(jù)。因此,x_srcdst先是存儲輸入數(shù)據(jù),而后存儲循環(huán)操作的結果。xmm寄存器存儲用于循環(huán)操作的循環(huán)密鑰。
在另一個實施例中,諸如AESENCRYPTRound和AESENCRYPTLastRound的循環(huán)指令和最后一個循環(huán)指令可以從存儲器(m/128)而不是從寄存器堆304中獲取輸入,例如,aes循環(huán)指令可以是 AESENCRYPTRound xmmsrcdst m/128。
所述aes指令集中的其它兩個aes指令根據(jù)密鑰的長度(即,128位、192位或256位)來生成用于aes循環(huán)的循環(huán)密鑰。一個aes循環(huán)密鑰指令生成用于加密操作的循環(huán)密鑰,以及另一個aes循環(huán)密鑰指令生成用于解密操作的循環(huán)密鑰。AES下一個循環(huán)密鑰(AESNextRoundKey)指令和AES前一個循環(huán)密鑰(AESPreviousRoundKey)指令中的立即(immediate)字段指定密鑰的長度{128,192,256}。
在另一個實施例中,不使用立即字段,而是將不同的密鑰長度實現(xiàn)為各自具有唯一操作碼的單獨的指令。在該實施例中,多個aes循環(huán)密鑰指令包括用于每個循環(huán)密鑰操作的三個單獨的指令,例如,AESNextRoundKey_128、AESNextRoundKey_192和AESNextRoundKey_256,以及,將會具有用于AESPreviousRoundKey的類似的包含三個指令的指令集。在該實施例中,指令集中的指令總數(shù)是10個,這與前述實施例中指令總數(shù)為6個的情況不同。
寄存器堆304具有多個128位的寄存器,其可以由aes指令集中的aes指令使用。所述128位的寄存器可以存儲源操作數(shù)、循環(huán)密鑰和aes指令的結果。對于第一循環(huán)而言,aes指令接收的源操作數(shù)可以是將要進行加密的128位的明文或者是將要進行解密的128位的密文。用于生成128位、192位或256位密鑰的密鑰調(diào)度的密鑰可以存儲在寄存器堆304中的任何一個128位寄存器308中。循環(huán)密鑰也可以存儲在寄存器堆中的任何128位寄存器308中。所有指令使用寄存器堆中的寄存器并且也可以如前文所述直接地從存儲器獲取輸入。
下面在表2中示出了使用表I所示的aes指令集的實施例的源碼的實例。在該實例中,在對多個塊使用同一個密鑰以執(zhí)行加密的應用中優(yōu)化了性能。一個此類應用是使用單個密鑰來加密磁盤的內(nèi)容,其中,在將數(shù)據(jù)存儲到磁盤中之前,使用同一個密鑰對所有數(shù)據(jù)進行加密。在該實例中,執(zhí)行AES-128加密。
密鑰的長度可以是128位、192位或256位。根據(jù)密鑰的長度,將要執(zhí)行的循環(huán)次數(shù)可以是1、10、12或14,其中,每個循環(huán)密鑰具有固定的長度(128位)。在循環(huán)次數(shù)的值為10、12、14的情況下,aes微操作可以針對128位、192位或256位的密鑰長度執(zhí)行標準aes加密和解密。
當對多個塊使用同一個密鑰時,可以預先計算用于每個循環(huán)的循環(huán)密鑰(密鑰調(diào)度),并且將其存儲在存儲器(例如,第I級數(shù)據(jù)高速緩存204)中,從而在對每個塊進行加密/解密操作之前不需要再次計算同一個密鑰調(diào)度。
RK [O] =Input Key
For i=l..10
RK [ i ] =AESNextRoundKey (RK [ 1-1 ])
End
STATE=Input Block
STATE=STATE xor RK
For i=l..9
STATE=AESENCRYPTRound(STATE, RK[i])
End
STATE=AESENCRYPTLastRound(STATE, RK[10])
表2
具有10個元素的陣列(RK)用于存儲密鑰的密鑰調(diào)度。用于AES-128加密的輸入密鑰存儲在RK
中,以及通過從aes指令集中調(diào)用AESNextRoundKey指令來預先計算出9個循環(huán)密鑰RK
-RK[1]。AESNextRoundKey指令根據(jù)當前循環(huán)密鑰來計算下一個循環(huán)。預先計算的用于密鑰調(diào)度的循環(huán)密鑰可以存儲在第I級數(shù)據(jù)高速緩存204的循環(huán)密鑰214中。
在該實例中,作為密鑰調(diào)度(擴展密鑰)的一部分,在進入環(huán)路以執(zhí)行aes循環(huán)之前,從寄存器堆304直接輸入用于該循環(huán)的循環(huán)密鑰,對所述體和密鑰執(zhí)行異或(XOR)操作。對于循環(huán)I到循環(huán)9中的每一個循環(huán),從aes指令集調(diào)用AESENCRYPTRound指令以對一個循環(huán)執(zhí)行aes循環(huán)操作。對于最后一個循環(huán)(循環(huán)10)而言,從aes指令集調(diào)用AESNECYRPTLastRound指令以對最后一個循環(huán)執(zhí)行aes循環(huán)操作。
在發(fā)出第一個aes指令以開始加密或解密操作之前,將待由aes指令進行加密或解密的信息載入到寄存器堆304中的源/目的寄存器306中。用于加密/解密源寄存器306中的信息的密鑰存儲在寄存器堆304中的一個或多個其它寄存器308中。在128位密鑰的情況下,將整個128位密鑰存儲在寄存器堆304中的任意一個其它128位的寄存器中。對于長度超過128位的密鑰而言,將(高于128位的)最高有效位存儲在另一個128位寄存器中。
在表2所示的實例中,根據(jù)密鑰來預先計算每個循環(huán)的循環(huán)密鑰,并且在將該循環(huán)密鑰載入到寄存器堆304的任何一個寄存器308之前,將其存儲在第I級數(shù)據(jù)高速緩存204中。用于每個循環(huán)的密鑰還可以存儲在寄存器堆304中的一個或多個寄存器中,或者可以存儲在第I級數(shù)據(jù)高速緩存204的循環(huán)密鑰214中。
AES具有128位的固定塊長度以及128、192或256位的密鑰長度,并且AES對4x4的字節(jié)陣列(即,16個字節(jié)(128位的固定塊長度))進行操作,將該4x4字節(jié)陣列稱為“體”。AES算法在10、12或14個連續(xù)循環(huán)中將128位的明文塊轉(zhuǎn)換為128位的密文塊(加密)或者將128位的密文塊轉(zhuǎn)換為128位的明文塊(解密),其中,循環(huán)的次數(shù)取決于密鑰長度(128、192 或 256 位)。
在執(zhí)行每個循環(huán)加密操作或解密操作之前,執(zhí)行單元210接收存儲在寄存器堆304中的體和密鑰。使用存儲在只讀存儲器(R0M)214的密鑰調(diào)度器302中的aes指令的微操作來執(zhí)行每個加密/解密循環(huán)操作。在示出的實施例中,體(128位的塊體)存儲在寄存器306中,并且密鑰存儲在寄存器堆304的一個或多個其它寄存器308中。在完成aes指令的執(zhí)行之后,所得到的體存儲在寄存器堆304的寄存器306中。所述體可以是由下一個aes循環(huán)使用的中間循環(huán)數(shù)據(jù),或者是AES加密或解密操作的最終結果。
在示出的實施例中,密鑰調(diào)度器302生成在aes循環(huán)中使用的循環(huán)密鑰。密鑰調(diào)度器302可以實現(xiàn)為多個微碼操作,并且可以包括用于執(zhí)行操作序列的微碼操作,所述操作序列用于針對FIPS文檔197所定義的128位、197位和256位密鑰來生成循環(huán)密鑰。
在另一個實施例中,密鑰調(diào)度器可以實現(xiàn)為執(zhí)行單元210中的硬件狀態(tài)機序列。在另一個實施例中,密鑰調(diào)度器的一些部分可以實現(xiàn)為存儲在微碼R0M214中的微碼操作,并且密鑰調(diào)度器的剩余部分可以實現(xiàn)為執(zhí)行單元210中的硬件狀態(tài)機序列。
密鑰調(diào)度器302將密鑰的η個字節(jié)擴展為擴展密鑰(密鑰調(diào)度)的b個字節(jié),其中,擴展密鑰的前面η個字節(jié)是原來的密鑰。例如,對于128位的密鑰而言,將該128位密鑰擴展為176字節(jié)的擴展密鑰,即,11x16字節(jié)(128位),其中,前面的16個字節(jié)是原來的128位密鑰,因此,循環(huán)的次數(shù)為10。將192位密鑰的24個字節(jié)擴展為208個字節(jié)(13x16字節(jié)),以提供12個“循環(huán)密鑰”,每個循環(huán)密鑰用于12個循環(huán)中的一個,以及,將256位密鑰的32個字節(jié)擴展為240個字節(jié)(15x16字節(jié)),以提供14個“循環(huán)密鑰”,每個循環(huán)密鑰用于14個循環(huán)中的一個。
在解碼aes指令中的操作碼(opcode)之后,將用于控制用于一個aes循環(huán)的aes指令中的流的多個參數(shù)存儲在控制邏輯322中。這些參數(shù)包括操作類型(加密或解密)以及該循環(huán)是否是最后一個循環(huán)。
aes循環(huán)邏輯324可以包括用于以下階段的微操作:塊體314、S-box/逆S-box316、移位行316和混合逆、混合列或空(稱為“混合列”)320和加循環(huán)密鑰326。
在塊體314中,使用逐位XOR將對aes循環(huán)邏輯324的128位輸入(體)與密鑰(與該循環(huán)關聯(lián)的擴展密鑰的128位的部分)相加,以產(chǎn)生128位的中間值(體)。
在S-box/逆S-box316中,使用可以存儲在查詢表中并從查詢表檢索的其它字節(jié)值來替換該128位中間值的每個字節(jié),其中,又將所述查詢表稱為替換盒或“S-Box”。S-box獲取一些數(shù)量的輸入比特m且將其轉(zhuǎn)換為一些數(shù)量的輸出比特n,并且S-box典型地實現(xiàn)為查詢表。典型地使用固定的查詢表。通過使用伽羅瓦域(Galois Field) (GF) (28)上的逆函數(shù),該操作提供了非線性。例如,可以通過使用m位輸入的外部兩個比特在查詢表中選擇行以及通過使用m位輸入的內(nèi)部比特選擇列來尋找η位輸出。
在移位行318中,S-box/逆S_box316的結果通過比特線性轉(zhuǎn)換,其中,將從替換字節(jié)階段接收的4x4陣列(128位(16字節(jié))的體)的每一行中的字節(jié)向左側進行循環(huán)移位。對于4x4陣列中的每一行,對每個字節(jié)移位的位數(shù)不同。
在混合列 320中,來自于移位行320的結果通過比特線性轉(zhuǎn)換,其中,將4x4陣列(體)中的每一列視作二進制伽羅瓦域(GF) (28)上的多項式,并且之后使用固定多項式c (X) =3x3+x2+x+2將其與模χ4+1相乘。最后一個aes循環(huán)與其它aes循環(huán)的不同之處在于其省略了混合列320。
對于該aes循環(huán),混合列階段320之后的加循環(huán)密鑰324對來自于擴展密鑰的循環(huán)密鑰以及移位行318或混合列320的結果執(zhí)行異或函數(shù)。
例如,可以發(fā)出下述aes指令以執(zhí)行aes解密的一個循環(huán):
AESDECRYPTRound xmmsrcdst xmm
該實例使用密鑰來執(zhí)行128位的AES加密循環(huán)操作,其中,該密鑰的擴展密鑰由(RK[I], RK[2],…RK[10])來表示??梢酝ㄟ^在發(fā)出AES解密循環(huán)(AESDECRYPTRound)指令之前發(fā)出 AESPreviousRoundKey xmmsrcl, 2xmm dst (immediate)指令來生成該循環(huán)密鑰??梢詮牡贗級數(shù)據(jù)高速緩存204中直接將循環(huán)密鑰載入到塊體314中,或者可以將循環(huán)密鑰首先存儲在寄存器堆304的寄存器(xmm)中并且之后將循環(huán)密鑰從寄存器載入到塊體314中。
當使用不同的密鑰來加密/解密每個塊時,例如,對于用于加密/解密數(shù)據(jù)分組的網(wǎng)絡接口控制器(NIC)而言,可以在執(zhí)行加密/解密之前動態(tài)地計算每個循環(huán)的循環(huán)密鑰,如下表3中用于AES-128加密的偽碼中所示:
RK [O] =Input Key
STATE=Input Block
STATE=STATE xor RK [O]
For i=l..9
RK[i]=AESNextRoundKey(RK[1-1])
STATE=AESENCRYPTRound(STATE, RK[i])
End
RK[10]=AESNextRoundKey(RK[9])
STATE=AESENCRYPTLastRound(STATE, RK[10])
表3
在該實例中,在將循環(huán)密鑰用于密鑰調(diào)度(擴展密鑰)的10個循環(huán)(S卩,循環(huán)1-9以及循環(huán)10 (最后一個循環(huán)))中的每一個以執(zhí)行加密之前,生成用于該循環(huán)的循環(huán)密鑰。
包括單aes循環(huán)指令和單aes循環(huán)密鑰生成指令的aes指令集允許具有不同次數(shù)的循環(huán)和密鑰調(diào)度的AES的變型,BP, FIPS文檔197未定義的AES的變型。因此,aes指令集中的單個循環(huán)aes指令提供了在執(zhí)行aes加密和解密過程中的靈活性。
由于aes指令集所執(zhí)行的循環(huán)的次數(shù)是不固定的,所以如果需要的話,可以執(zhí)行任意次數(shù)的循環(huán)。例如,如果引入了用于散列或MAC攻擊或者AES攻擊的新標準,則可以改變循環(huán)的次數(shù)以支持未來的加密/解密標準。
圖4是示出了通過圖3中示出的執(zhí)行單元210的aes加密循環(huán)指令流的流程圖。
在方框400處,執(zhí)行單元210等待aes加密循環(huán)指令。如果提取和解碼單元206已經(jīng)解碼了 AES加密循環(huán)指令,則處理繼續(xù)進行到方框402。如果提取和解碼單元206尚未解碼AES加密循環(huán)指令,則處理保持在方框400中,等待aes加密循環(huán)指令。
在方框402處,在提取和解碼單元206進行指令解碼期間,表示將進行加密的指示被存儲在控制邏輯322中,并且在執(zhí)行加密循環(huán)過程中使用的循環(huán)密鑰和128位的塊體(源)被從寄存器堆304載入到執(zhí)行單元210中。處理繼續(xù)進行到方框404。
在方框404處,對128位的塊體,S卩,來自于方框406或418的結果,執(zhí)行替換操作。使用可以存儲在查詢表中并從查詢表檢索的其它字節(jié)值來替換該128位的塊體的每個字節(jié),其中,又將所述查詢表稱為替換盒或“S-Box”。S-box獲取一些數(shù)量的輸入比特m且將其轉(zhuǎn)換為一些數(shù)量的輸出比特n,典型地將S-box實現(xiàn)為查詢表。將結果存儲為128位的塊體。處理繼續(xù)進行到方框406。
在方框406處,128位的塊體(4x4陣列)通過比特線性轉(zhuǎn)換,其中,4x4陣列的每一行中的字節(jié)向左側進行循環(huán)移位。對于4x4陣列中的每一行,對每個字節(jié)移位的位數(shù)不同。處理繼續(xù)進行到方框408。
在方框408處,128位的塊體(4x4陣列)通過比特線性轉(zhuǎn)換,其中,將4x4陣列(體)中的每一列視作GF (28)上的多項式,并且之后使用固定多項式c(X)=3x3+X2+X+2將其與模x4+l相乘。處理繼續(xù)進行到方框410。
在方框410處,對于該aes循環(huán),對來自于擴展密鑰的循環(huán)密鑰以及移位行318或混合列320的結果執(zhí)行異或函數(shù)。處理繼續(xù)進行到方框412。
在方框412處,將該循環(huán)(128位的塊體)的加密操作的結果存儲在寄存器堆304的源/目的寄存器302中。用于aes加密指令的處理結束。
下面的表4示出了在執(zhí)行表3所示的偽碼之后,使用128位的密鑰對128位的塊輸入執(zhí)行AES-128加密的結果的實例。
128 位輸入:00112233445566778899aabbccddeeff (十六進制)
128 位密鑰:000102030405060708090a0b0c0d0e0f (十六進制)
128 位結果:69c4e0d86a7b0430d8cdb78070b4c55a (十六進制)
表4
圖5是示出了通過圖3中示出的執(zhí)行單元210的aes加密最后一個循環(huán)指令流的流程圖。
在方框500處,執(zhí)行單元等待aes加密最后一個循環(huán)指令。如果提取和解碼單元206已經(jīng)解碼了 AES加密最后一個循環(huán)指令,則處理繼續(xù)進行到方框502。如果提取和解碼單元206尚未解碼AES加密最后一個循環(huán)指令,則處理保持在方框500中,等待aes指令。
在方框502處,以結合方框404 (圖4)所討論的S_box查詢的類似方式來執(zhí)行最后一個循環(huán)的S-box查詢。處理繼續(xù)進行到方框504。
在方框504處,與結合方框406 (圖4)的其它循環(huán)所討論的類似方式來執(zhí)行最后一個循環(huán)的移位行操作。處理繼續(xù)進行到方框506。
在方框506處,對于該aes循環(huán),對來自于擴展密鑰的循環(huán)密鑰以及移位行318或混合列320的結果執(zhí)行異或函數(shù)。處理繼續(xù)進行到方框508。
在方框508處,將加密最后一個循環(huán)操作的結果存儲在寄存器堆304的源/目的寄存器306中。用于aes指令的處理結束。
圖6是示出了通過圖3中示出的執(zhí)行單元210的aes解密循環(huán)指令流的流程圖。
在方框600處,執(zhí)行單元等待aes解密循環(huán)指令。如果提取和解碼單元206已經(jīng)解碼了 AES解密循環(huán)指令,則處理繼續(xù)進行到方框602。如果提取和解碼單元206尚未解碼AES解密循環(huán)指令,則處理保持在方框600中,等待aes解密循環(huán)指令。
在方框602處,在提取和解碼單元206進行指令解碼期間,表示將進行解密的指示被存儲在控制邏輯322中,并且在執(zhí)行解密循環(huán)過程中使用的循環(huán)密鑰和源(128位的塊體)被從寄存器堆304載入到執(zhí)行單元210中。處理繼續(xù)進行到方框604。
在方框604處,將要執(zhí)行的操作是解密。通過執(zhí)行AES標準定義的逆S_box查詢來對128位的塊體執(zhí)行替換操作。處理繼續(xù)進行到方框606。
在方框606處,按照FIPS文檔197的定義執(zhí)行逆移位行操作。處理繼續(xù)進行到方框 608。
在方框608處,按照FIPS文檔197的定義執(zhí)行逆移位行操作。處理繼續(xù)進行到方框 610。
在方框610處,對于aes循環(huán),對來自于擴展密鑰的循環(huán)密鑰以及移位行318或混合列320的結果執(zhí)行異或函數(shù)。處理繼續(xù)進行到方框612。
在方框612處,將該循環(huán)的解密操作的結果(128位的塊體)存儲在寄存器堆304的源/目的寄存器302中。用于aes解密循環(huán)指令的處理結束。
圖7是示出了通過圖3中示出的執(zhí)行單元210的aes解密最后一個循環(huán)指令流的流程圖。
在方框700處,執(zhí)行單元210等待aes解密最后一個循環(huán)指令。如果提取和解碼單元206已經(jīng)解碼了 AES解密最后一個循環(huán)指令,則處理繼續(xù)進行到方框702。如果提取和解碼單元206尚未解碼AES解密最后一個循環(huán)指令,則處理保持在方框700中,等待aes解密最后一個循環(huán)指令。
在方框702處,通過執(zhí)行FIPS文檔197所定義的逆S_box查詢來對128位的塊體執(zhí)行最后一個循環(huán)的替換操作。處理繼續(xù)進行到方框704。
在方框704處,按照FIPS文檔197的定義對最后一個循環(huán)執(zhí)行逆移位行操作。處理繼續(xù)進行到方框706。
在方框706處,對于aes循環(huán),對來自于擴展密鑰的循環(huán)密鑰以及移位行318或混合列320的結果執(zhí)行異或函數(shù)。處理繼續(xù)進行到方框708。
在方框708處,將解密最后一個循環(huán)操作的結果存儲在寄存器堆304的源/目的寄存器306中。用于aes解密最后一個循環(huán)指令的處理結束。
在一個實施例中,圖4-圖7的流程圖中的方框可以實現(xiàn)為執(zhí)行單元210中的硬件狀態(tài)機序列。在另一個實施例中,可以將部分方框?qū)崿F(xiàn)為可以存儲在只讀存儲器(R0M)214中的微程序。將方框?qū)崿F(xiàn)為硬件狀態(tài)機序列的實施例可以提供較高的性能。
圖8示出了可以用來生成循環(huán)密鑰并執(zhí)行加密和解密的具有立即字節(jié)的aes循環(huán)指令的實施例。替代了表I中示出的aes指令集,提供了用于執(zhí)行aes指令集的功能的單aes循環(huán)指令。將單aes指令所執(zhí)行的特定功能編碼在立即字節(jié)的比特之中(密鑰_選擇_修改量(key_select_modifier))。立即字節(jié)允許對aes循環(huán)指令進行擴展以增加新的特性,取代創(chuàng)建多個各自具有唯一操作碼的新指令的方法。
可以將aes循環(huán)指令符號性地定義為:
dest:=aes_key_round(source2, sourcel), key_select_modifier
根據(jù)端口號將aes_密鑰_循環(huán)(aes_key_round)指令發(fā)送給特定的執(zhí)行單元210,以執(zhí)行AES加密或解密操作。在示出的實施例中,端口號4是指定的用于AES循環(huán)指令的執(zhí)行端口。將執(zhí)行單元210分為多個并行端口(超標量)。然而,并非所有端口都是等同的。一些端口具有特定的資源,諸如:大整數(shù)乘法器或者浮點乘法器或除法器。在多個端口處支持更簡單和更常見的指令,諸如加法、減法和異或,以使性能最大化。因此,對于每個指令或微操作,發(fā)出控制邏輯確定用于發(fā)出微操作/指令的端口。在該實施例中,總是將aes指令發(fā)往端口號4。然而,在其它實施例中,可以使用其它端口號。
參考圖8,目標字段(dest)存儲用于循環(huán)N的128位的擴展密鑰,源2 (source2)字段存儲用于循環(huán)N-1的128位的擴展密鑰,以及源I (soucel)字段存儲用于循環(huán)N-2的128位的擴展密鑰。key_select_modifier是一個8位的立即值,用于提供當前循環(huán)數(shù)(N)、操作方向(加密/解密)以及AES密鑰長度。對于AES-128而言,不需要并且可以省略sourcel ο執(zhí)行單元是AES單元并且不使用標志(整數(shù)或浮點數(shù))。
在一個實施例中,立即值的四個最低有效位的位編碼指示循環(huán)數(shù),例如,AES-128的循環(huán)數(shù)1-10、AES-192的循環(huán)數(shù)1-12以及AES-256的循環(huán)數(shù)2-14。對于AES-128和AES-192而言,由于第一個循環(huán)使用未修改的輸入密鑰,所以循環(huán)數(shù)O是無效的。對于AES-256而言,由于將未修改的256位的輸入密鑰用于前兩個128位的循環(huán),所以循環(huán)數(shù)O和I是無效的。
立即字節(jié)的第4位指示操作方向(加密或解密),例如,在一個實施例中,0=加密且1=解密,以及在另一個實施例中,1=加密且0=解密。立即字節(jié)的第5位和第6位指示AES密鑰長度。在一個實施例中,按照下面的表5所示來定義AES密鑰長度:
權利要求
1.一種裝置,包括: 執(zhí)行單元,用于執(zhí)行aes指令的操作序列,所述操作序列執(zhí)行可編程次數(shù)的aes循環(huán),所述操作使得所述執(zhí)行單元: 如果aes循環(huán)次數(shù)大于1: 將密鑰載入到臨時密鑰寄存器中;以及 在執(zhí)行每個aes循環(huán)之前,根據(jù)所述密鑰來生成用于該aes循環(huán)的循環(huán)密鑰;以及對于每個aes循環(huán),對該aes循環(huán)的輸入和用于該aes循環(huán)的所述循環(huán)密鑰執(zhí)行aes循環(huán)操作序列,以提供對下一個aes循環(huán)的下一個輸入或者提供所述aes指令的結果。
2.如權利要求1所述的裝置,其中,如果所述aes循環(huán)次數(shù)為1,則在執(zhí)行所述aes循環(huán)操作序列之前,所述執(zhí)行單元: 載入根據(jù)所述密鑰而預先計算的用于該aes循環(huán)的循環(huán)密鑰。
3.如權利要求2所述的裝置,其中,所述aes循環(huán)操作序列使得所述執(zhí)行單元: 對該aes循環(huán)的輸入和用于該aes循環(huán)的所述循環(huán)密鑰執(zhí)行異或(XOR)操作,以產(chǎn)生中間值; 根據(jù)存儲在查詢表中的值對所述中間值中的每個字節(jié)執(zhí)行替換操作;以及 通過對所述中間值中的行進行移位的比特線性轉(zhuǎn)換來傳遞所述替換操作的結果。
4.如權利要求1所述的裝置,其中,對于所述aes循環(huán)次數(shù)_1,所述aes循環(huán)操作序列使得所述執(zhí)行單元: 對該aes循環(huán)的所述輸入和用于該aes循環(huán)的所述循環(huán)密鑰執(zhí)行異或(XOR)操作,以產(chǎn)生中間值; 根據(jù)存儲在查詢表中的值對所述中間值中的每個字節(jié)執(zhí)行替換操作; 通過對所述中間值中的行進行移位的比特線性轉(zhuǎn)換來傳遞所述替換操作的結果;以及 通過對所述中間值中的列進行混合的比特線性轉(zhuǎn)換來傳遞所述替換操作的結果。
5.如權利要求4所述的裝置,其中,對于最后一個aes循環(huán),所述aes循環(huán)操作序列使得所述執(zhí)行單元: 對該aes循環(huán)的輸入和用于該aes循環(huán)的所述循環(huán)密鑰執(zhí)行異或(XOR)操作,以產(chǎn)生中間值; 根據(jù)存儲在查詢表中的值對所述中間值中的每個字節(jié)執(zhí)行替換操作;以及 通過對所述中間值中的行進行移位的比特`線性轉(zhuǎn)換來傳遞所述替換操作的結果。
6.如權利要求1所述的裝置,其中,所述結果是加密值。
7.如權利要求1所述的裝置,其中,所述結果是解密值。
8.如權利要求1所述的裝置,其中,用于第一個aes循環(huán)的所述密鑰和所述輸入存儲在寄存器堆中。
9.如權利要求1所述的裝置,其中,所述寄存器堆包括多個128位的寄存器。
10.一種方法,包括: 如果用于aes指令的可編程aes循環(huán)次數(shù)大于1,則將密鑰載入到臨時密鑰寄存器中,并且在執(zhí)行每個aes循環(huán)之前,根據(jù)所述密鑰來生成用于該aes循環(huán)的循環(huán)密鑰;以及對于每個aes循環(huán),對該aes循環(huán)的輸入和用于該aes循環(huán)的所述循環(huán)密鑰執(zhí)行aes循環(huán)操作序列,以提供對下一個aes循環(huán)的下一個輸入或者提供所述aes指令的結果。
11.如權利要求10所述的方法,其中,如果所述aes循環(huán)次數(shù)為1,則在執(zhí)行所述aes循環(huán)操作序列之前,載入根據(jù)所述密鑰而預先計算的用于該aes循環(huán)的循環(huán)密鑰。
12.如權利要求11所述的方法,其中,執(zhí)行所述aes循環(huán)操作序列包括: 對該aes循環(huán)的輸入和用于該aes循環(huán)的所述循環(huán)密鑰執(zhí)行異或(XOR)操作,以產(chǎn)生中間值; 根據(jù)存儲在查詢表中的值對所述中間值中的每個字節(jié)執(zhí)行替換操作;以及 通過對所述中間值中的行進行移位的比特線性轉(zhuǎn)換來傳遞所述替換操作的結果。
13.如權利要求10所述的方法,其中,對于所述循環(huán)次數(shù)-1,執(zhí)行所述aes循環(huán)操作序列包括: 對該aes循環(huán)的所述輸入和用于該aes循環(huán)的所述循環(huán)密鑰執(zhí)行異或(XOR)操作,以產(chǎn)生中間值; 根據(jù)存儲在查詢表中的值對所述中間值中的每個字節(jié)執(zhí)行替換操作; 通過對所述中間值中的行進行移位的比特線性轉(zhuǎn)換來傳遞所述替換操作的結果;以及 通過對所述中間值中的列進行混合的比特線性轉(zhuǎn)換來傳遞所述替換操作的結果。
14.如權利要求13所述的方法,其中,對于最后一個aes循環(huán),執(zhí)行所述aes循環(huán)操作序列包括: 對該aes循環(huán)的輸入和用于該aes循環(huán)的所述循環(huán)密鑰執(zhí)行異或(XOR)操作,以產(chǎn)生中間值; 根據(jù)存儲在查詢表中的值對所述中間值中的每個字節(jié)執(zhí)行替換操作;以及 通過對所述中間值中的行進行移位的比特線性轉(zhuǎn)換來傳遞所述替換操作的結果。
15.如權利要求10所述的方法,其中,所述結果是加密值。
16.如權利要求10所述的方法,其中,所述結果是解密值。
17.如權利要求10所述的方法,其中,用于第一個aes循環(huán)的所述密鑰和所述輸入存儲在寄存器堆中。
18.如權利要求10所述的方法,其中,所述寄存器堆包括多個128位的寄存器。
19.一種產(chǎn)品,包括具有相關聯(lián)的信息的機器可訪問介質(zhì),其中,當訪問所述信息時,使機器執(zhí)行: 如果用于aes指令的可編程aes循環(huán)次數(shù)大于1,則將密鑰載入到臨時密鑰寄存器中,并且在執(zhí)行每個aes循環(huán)之前,根據(jù)所述密鑰來生成用于該aes循環(huán)的循環(huán)密鑰;以及對于每個aes循環(huán),對該aes循環(huán)的輸入和用于該aes循環(huán)的所述循環(huán)密鑰執(zhí)行aes循環(huán)操作序列,以提供對下一個aes循環(huán)的下一個輸入或者提供所述aes指令的結果。
20.如權利要求10所述的產(chǎn)品,其中,如果所述aes循環(huán)次數(shù)為1,則在執(zhí)行所述aes循環(huán)操作序列之前,載入根據(jù)所述密鑰而預先計算的用于該aes循環(huán)的循環(huán)密鑰。
21.—種系統(tǒng),包括: 動態(tài)隨機存取存儲器,用于存儲數(shù)據(jù)和指令;以及 處理器,耦合到所述存儲器,用于執(zhí)行所述指令,所述處理器包括: 執(zhí)行單元,用于執(zhí)行aes指令的操作序列,所述操作序列執(zhí)行可編程次數(shù)的aes循環(huán),所述操作使得所述執(zhí)行單元: 如果所述aes循環(huán)次數(shù)大于1:將密鑰載入到臨時密鑰寄存器中;以及 在執(zhí)行每個aes循環(huán)之前,根據(jù)所述密鑰來生成用于該aes循環(huán)的循環(huán)密鑰;以及對于每個aes循環(huán),對該aes循環(huán)的輸入和用于該aes循環(huán)的所述循環(huán)密鑰執(zhí)行aes循環(huán)操作序列,以提供對下一個aes循環(huán)的下一個輸入或者提供所述aes指令的結果。
22.如權利要求22所述的系統(tǒng),其中,如果所述aes循環(huán)次數(shù)為1,則在執(zhí)行所述aes循環(huán)操作序列之前,所述執(zhí)行單元: 載入根據(jù)所述密 鑰而預先計算的用于該aes循環(huán)的循環(huán)密鑰。
全文摘要
提供了用于通用處理器的靈活aes指令集。該指令集包括用于執(zhí)行aes加密或解密的“一次循環(huán)”的指令,并且還包括用于執(zhí)行密鑰生成的指令。可以使用立即數(shù)來指示循環(huán)數(shù)和128/192/256位密鑰的密鑰生成的密鑰長度。由于靈活aes指令集不要求跟蹤隱式寄存器,所以可以充分利用管道能力。
文檔編號H04L9/06GK103152168SQ20131011052
公開日2013年6月12日 申請日期2008年3月25日 優(yōu)先權日2007年3月28日
發(fā)明者S·格倫, W·K·費加利, V·戈帕爾, M·拉古納丹, M·G·狄克遜, S·陳努帕蒂, M·E·科納維斯 申請人:英特爾公司