用于加速snow 3g無(wú)線(xiàn)安全算法的指令的制作方法
【技術(shù)領(lǐng)域】
[0001] 本公開(kāi)涉及能夠進(jìn)行高效無(wú)線(xiàn)安全操作的微處理器以及相關(guān)聯(lián)的指令集體系結(jié) 構(gòu)。
【背景技術(shù)】
[0002] 在密碼學(xué)中,流密碼是一種對(duì)稱(chēng)密鑰密碼,其中,明文數(shù)字與偽隨機(jī)密碼數(shù)字流 (密鑰流)組合。在流密碼中,一次一個(gè)地利用密鑰流的相對(duì)應(yīng)的數(shù)字來(lái)對(duì)每一個(gè)明文數(shù) 字進(jìn)行加密以生成所述密碼文本流的數(shù)字。數(shù)字通常是一位,并且組合操作可以是異或 (X0R)。通常,使用數(shù)字移位寄存器,由隨機(jī)種子值連續(xù)地生成偽隨機(jī)密鑰流。種子值充當(dāng) 用于對(duì)密碼文本流進(jìn)行解密的加密密鑰。
[0003] 流密碼能夠在軟件中實(shí)現(xiàn)。然而,復(fù)雜的流密碼能夠使用超過(guò)一百行的C代碼。甚 至對(duì)于最優(yōu)化后的匯編代碼,可能需要大量的循環(huán)來(lái)生成用于復(fù)雜流密碼的密鑰流字節(jié)。 而且,軟件實(shí)現(xiàn)通常涉及到大量存儲(chǔ)器存取。因此,軟件實(shí)現(xiàn)不能為各種各樣的應(yīng)用提供足 夠的速度和能量效率。
[0004] 附圖描述
[0005] 在附圖的圖中,通過(guò)舉例的方式而不是限制的方式來(lái)示出實(shí)施例:
[0006] 圖1A示出了在初始化模式下SNOW3G操作的圖。
[0007] 圖1B示出了在密鑰流模式下SNOW3G操作的圖。
[0008] 圖2A-圖2C示出了根據(jù)一個(gè)實(shí)施例的用于實(shí)施SNOW3G操作的三個(gè)向量指令。
[0009]圖3是根據(jù)一個(gè)實(shí)施例的示出了響應(yīng)于第一向量指令而被實(shí)施的操作的流程圖。
[0010]圖4是根據(jù)一個(gè)實(shí)施例的示出了響應(yīng)于第二向量指令而被實(shí)施的操作的流程圖。
[0011] 圖5是根據(jù)一個(gè)實(shí)施例的示出了響應(yīng)于第三向量指令而被實(shí)施的操作的流程圖。
[0012] 圖6是根據(jù)一個(gè)實(shí)施例的示出了使用軟件指令轉(zhuǎn)換器將源指令集中的二進(jìn)制指 令轉(zhuǎn)換成目標(biāo)指令集中的二進(jìn)制指令的框圖。
[0013] 圖7A是根據(jù)一個(gè)實(shí)施例的有序和亂序流水線(xiàn)的框圖。
[0014] 圖7B是根據(jù)一個(gè)實(shí)施例的有序和亂序核心的框圖。
[0015]圖8A-圖8B是根據(jù)一個(gè)實(shí)施例的更具體的示例性有序核心體系結(jié)構(gòu)的框圖。
[0016] 圖9是根據(jù)一個(gè)實(shí)施例的處理器的框圖。
[0017] 圖10是根據(jù)一個(gè)實(shí)施例的系統(tǒng)的框圖。
[0018] 圖11是根據(jù)一個(gè)實(shí)施例的第二系統(tǒng)的框圖。
[0019] 圖12是根據(jù)本發(fā)明的實(shí)施例的第三系統(tǒng)的框圖。
[0020] 圖13是根據(jù)一個(gè)實(shí)施例的芯片上系統(tǒng)(SoC)的框圖。
【具體實(shí)施方式】
[0021] 在下面的描述中,闡述了若干具體細(xì)節(jié)。但是,應(yīng)當(dāng)理解的是本發(fā)明的實(shí)施例可以 在不具有這些具體細(xì)節(jié)的情況來(lái)實(shí)施。在其他實(shí)例中,為避免使對(duì)該描述書(shū)的理解不清楚, 沒(méi)有具體示出公知的電路、結(jié)構(gòu)和技術(shù)。
[0022] SNOW3G的特征在于其高度的計(jì)算復(fù)雜度和長(zhǎng)的執(zhí)行時(shí)間。為了實(shí)現(xiàn)高速無(wú)線(xiàn)通 信,譯碼操作需要具有時(shí)間效率。除了時(shí)間約束之外,譯碼操作還需要能效,因?yàn)橐苿?dòng)設(shè)備 通常具有有限的電池。
[0023]SNOW3G是一種基于線(xiàn)性反饋移位寄存器(LFSR)的、具有608個(gè)狀態(tài)位的算 法。608位包括三個(gè)32位有限狀態(tài)機(jī)(FSM)狀態(tài)寄存器以及包含十六個(gè)雙字(雙字)的 LFSR(即,在LFSR中有512位)。用于更新?tīng)顟B(tài)并且產(chǎn)生輸出字的計(jì)算包括多代置換盒 (S-Box)變換和伽羅瓦(Galois)域相乘和取冪。SNOW3G能夠通過(guò)軟件來(lái)實(shí)現(xiàn),這涉及到 大量的計(jì)算和存儲(chǔ)器存取。因此,SNOW3G的軟件實(shí)現(xiàn)通常緩慢并且耗能多。
[0024] 與現(xiàn)有的軟件解決方案相比,本文所描述的實(shí)施例提供了新的處理器指令,用于 以顯著改善的性能實(shí)施SNOW3G無(wú)線(xiàn)安全操作。在一個(gè)實(shí)施例中,新處理器指令包括用于 更新有限狀態(tài)機(jī)(FSM)的SN0W_FSMZ指令,以及用于更新線(xiàn)性反饋移位寄存器(LFSR)的 SN0W_LFSRV指令和SN0W_LFSR1指令。這些指令中的每一指令都利用向量寄存器來(lái)實(shí)施高 效的向量化計(jì)算。
[0025] 在描述新指令之前,解釋SNOW3G無(wú)線(xiàn)安全算法的基本概念是有幫助的。SNOW3G 算法使用具有十六個(gè)32位數(shù)據(jù)元素的LFSR(其中每個(gè)數(shù)據(jù)元素都是雙字(dword)的)以 及具有三個(gè)32位狀態(tài)寄存器Rl、R2和R3的FSM。啟動(dòng)時(shí),LFSR的十六個(gè)雙字被裝載來(lái) 自128位密鑰和128位初始化變量的位組合。128位密鑰包括四個(gè)32位字k0、kl、k2和 k3。128位初始化變量包括四個(gè)32位字IV0、IV1、IV2和IV3。下面,數(shù)字1代表全1雙字 (Oxffffffff)。LFSR中的十六個(gè)雙字如下:
[0026]
[0027] 在啟動(dòng)時(shí),F(xiàn)SM被初始化為Rl=R2 =R3 = 0。接著,F(xiàn)SM和LFSR在初始化模式 下運(yùn)行32次,在所述初始化模式中,F(xiàn)SM的輸出用作LFSR更新的輸入。
[0028] 在對(duì)FSM和LFSR進(jìn)行了初始的32次更新之后,F(xiàn)SM多更新一次,F(xiàn)SM輸出被拋棄。 然后在密鑰流模式下更新LFSR,之后是FSM的更新,產(chǎn)生32位輸出F。FSM輸出F與LFSR 的雙字s0進(jìn)行異或,以產(chǎn)生32位密鑰流輸出Z,并且在密鑰流模式下再次更新LFSR。FSM 更新、Z輸出和LFSR更新在循環(huán)中繼續(xù)多次迭代,直至生成所需的密鑰流輸出的n個(gè)雙字。
[0029] 圖1A示出了在初始化模式下的LFSR120和FSM100的示例。在初始化模式下, 32次LFSR啟動(dòng)更新中的每一次都是通過(guò)確定由Sll、S2、S0和FMS輸出F生成的32位 雙字V來(lái)實(shí)施的。更新之前的LFSR120的雙字S15至S1 "向右移位"成為S14至S0, 并且用V來(lái)更新S15。下面,||用作串聯(lián)運(yùn)算符,以及?是逐位異或(X0R)運(yùn)算符。此 外,s0. 0| |s0. 1| |s0. 2| |s0. 3代表s0的四個(gè)字節(jié),s0. 0是s0的最重要字節(jié);并且令 sll.〇| |sll. 1| |sll.2| |sll.3代表sll的四個(gè)字節(jié),sll.O是sll的最重要字節(jié)。具體而 言,在初始化模式下,v=(吼丨 11 丨1 11 0x00丨 ? 通兒〇?+必,0) ? -s2 ? (0x00IIsiL0IUI1,1 丨I
[0030]
[0031] 在V的表達(dá)式中,MULa和DIVa是在SNOW3G中基于MULx和MULxPOW數(shù)學(xué)函數(shù) 定義的函數(shù)。MULa和DIVa中的每一個(gè)將8位映射成32位。雖然MULa和DIVa二者均 因?yàn)镸ULxPOW運(yùn)算的遞歸要求而使得利用函數(shù)的數(shù)學(xué)定義實(shí)現(xiàn)復(fù)雜,但是按32位輸出表的 256輸入項(xiàng)能夠用于MULa函數(shù)和DIVa函數(shù)中的每一個(gè)(即,每個(gè)函數(shù)為1K字節(jié))。
[0032] 圖1B示出了在密鑰流模式下LFSR和FSM的示例。在密鑰 流模式下,利用sll、s2和s0來(lái)生成32位雙字V。具體而言,V =
,如上所 述,MULa和DIVa結(jié)果能夠通過(guò)表查找來(lái)獲得。
[0033] 在初始化模式和密鑰流模式二者下,每個(gè)FSM更新使用兩個(gè)32位LFSR雙字。雙 字S15用來(lái)產(chǎn)生32位輸出字F,并且S5用來(lái)更新FSM狀態(tài)寄存器R1、R2和R3,其中R1、R2 和R3中的每一個(gè)都是32位雙字。在圖1A和圖1B中,代表整數(shù)相加模232。FSM輸出F= (sl5Rl) ?R2。隨后,狀態(tài)寄存器進(jìn)行如下更新:首先,中間值r被計(jì)算為r=R2(R3 ?s5)。 然后,設(shè)置R3 =S2 (R2),R2 =SI(Rl),并且R1 =r。
[0034] 在上面的計(jì)算中,SI和S2是32x32位S-BOX函數(shù)。SI是在高級(jí)加密標(biāo)準(zhǔn)(AES) 密碼中使用的RijndaelS_BoxSR。對(duì)于32位輸入¥ = ¥〇|卜1|卜2|卜3,¥〇是最重要字 節(jié),SR(w) =r〇| |rl| |r2| |r3,r0是最重要字節(jié),r3是最不重要字節(jié)。輸出中的字節(jié)r0、 rl、r2和r3定義為:
[0035]
[0039]MULx函數(shù)被定義為:如果第一操作數(shù)(vl)的最左(最重要)位是1,則 MULx(vl,v2) =vl〈〈81十v2 ;否則,MULx(vl,v2) =vl〈〈81(其中〈〈8 是左移 8 位。
[0040]S2S-Box還基于四個(gè)8位到8位變換來(lái)實(shí)施32位到32位映射。用于S2的S-Box 是在SNOW3G中定義的SQS-Box。類(lèi)似于S1的定義,對(duì)于32位輸入w=w0 ||wl| |w2 | |w3, w0是最重要字節(jié),SQ(w) =r〇||rl||r2||r3,rO是最重要字節(jié),以及r3是最不重要字節(jié)。 輸出中字節(jié)r0、rl、r2和r3定義為:
[0041]
[0043]
[0045] 上述的描述解釋了SNOW3G無(wú)線(xiàn)安全算法的計(jì)算。本發(fā)明的實(shí)施例為指令集體系 結(jié)構(gòu)(ISA)提供了新指令,以能夠?qū)崿F(xiàn)SNOW3G算法的高效計(jì)算。此處所描述的ISA支持 單指令、多數(shù)據(jù)(SMD)操作。并不是僅在一個(gè)數(shù)據(jù)元素或一對(duì)數(shù)據(jù)元素上運(yùn)算的標(biāo)量指 令,SIMD指令(也稱(chēng)為壓縮數(shù)據(jù)指令或向量指令)可以同時(shí)或者并行地在多個(gè)數(shù)據(jù)元素或 多對(duì)數(shù)據(jù)元素上進(jìn)行運(yùn)算。處理器可以響應(yīng)于向量指令而具有并行執(zhí)行硬件,以同時(shí)或者 并行地實(shí)施多個(gè)操作。
[0046] 新指令和相對(duì)應(yīng)的數(shù)據(jù)通路使處理器能夠支持256位或512位體系結(jié)構(gòu)向量寄存 器,以便以每32位雙字3循環(huán)的吞吐量來(lái)執(zhí)行SNOW3G。在下面的描述中,術(shù)語(yǔ)YMM是指 256位向量寄存器。雖然在下面的描述中使用YMM寄存器,但是應(yīng)意識(shí)到的是在可選的實(shí)施 例中可以使用其他向量寄存器(例如,512位ZMM寄存器)。
[0047] 在一個(gè)實(shí)施例中,十六個(gè)32位數(shù)據(jù)元素s15至s0的LFSR狀態(tài)存儲(chǔ)在兩個(gè)向量寄 存器(例如,兩個(gè)YMM寄存器)中。由于FSM使用sl5和s5,并且需要sO和F(FSM的32位 輸出)的X0R來(lái)產(chǎn)生Z(32位密鑰流輸出),所以LFSR數(shù)據(jù)元素被組織在兩個(gè)YMM寄存器 內(nèi),sl5、s5和s0在同一YMM寄存器中。也即,F(xiàn)SM所需的LFSR數(shù)據(jù)元素被存儲(chǔ)在同一向 量寄存器中。
[0048] 在一個(gè)實(shí)施例中,SNOW3GLFSR可以被組織,使得其十六個(gè)數(shù)據(jù)元素存儲(chǔ)在兩個(gè) 向量寄存器YMM1和YMM2中,如下:
[0049]
[0050] 圖2A示出了根據(jù)一個(gè)實(shí)施例的指令SN0W_LFSR1YMM0、YMM1、YMM2。第一源寄存 器YMM1具有更新前的雙字sl5、s6、s5、s4、s3、s2、si和s0。第二源寄存器YMM2具有更新 前的雙字sl4、sl3、sl2、sll、slO、s9、s8和s7。目的寄存器YMM0具有更新后的雙字sl4、 sl3、sl2、sll、slO、s9、s8和s7(