用于處理安全哈希算法的指令處理器、方法、和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 實施例涉及指令處理裝置。具體地,實施例涉及用于處理安全哈希算法的指令處 理裝置和指令。
【背景技術(shù)】
[0002] 安全哈希標準(SHS) (FIPS PUB 180-3),聯(lián)邦信息處理標準公告,是由國家標準 和技術(shù)研究所在2008年10月發(fā)布的。SHS標準指定了安全哈希算法SHA-224、SHA-256、 SHA-384、以及SHA-512。在本申請中這四個算法還統(tǒng)稱為SHA2有算法、SHA2算法、SHA2哈 希等。
[0003] 這些SHA2哈希算法允許計算代表被稱為消息的輸入數(shù)據(jù)的濃縮表示的消息摘 要。當長度小于2~64比特(對于SHA-224以及SHA-256)或小于2~128比特(對于SHA-384 以及SHA-512)的消息被輸入到哈希算法時,輸出被稱為消息摘要的結(jié)果。有時,消息摘要 也被稱為摘要或哈希。消息摘要對于SHA-224是224比特,對于SHA-256是256比特,對于 SHA-384是384比特,或?qū)τ赟HA-512是512比特。SHA-224和SHA-256是基于32比特字 長的。SHA-384和SHA-512是基于64比特字長的。
[0004] 在該標準中指定的哈希算法被稱為是安全的,這是因為對于給定的算法,認為1) 找到與給定的消息摘要對應(yīng)的消息,或2)找到產(chǎn)生相同的消息摘要的兩個不同的消息在 計算上是不可行的。這意味著對消息的任何改變將會(具有較高的可能性)導致不同的消 息摘要。
[0005] SHA2算法在電子設(shè)備中被廣泛使用以用于認證、驗證、識別、完整性檢查、或其它 目的。它們可以用于各種不同的目的。SHA2算法的一種常見使用是驗證消息的完整性和/ 或驗證所檢測到的對消息的改變。例如,可以針對消息生成初始的消息摘要,且然后,可以 針對該消息重新生成另一消息摘要且假定消息自身沒有被改變的情況下,該另一消息摘要 應(yīng)該與初始的消息摘要相同。安全哈希函數(shù)的其它示例包括但不限于生成數(shù)字簽名、消息 認證碼、驗證文件或消息的完整性、識別文件或數(shù)據(jù)、以及偽隨機生成和密鑰衍生。
[0006] 圖1示出了單輪的SHA2算法100的細節(jié)。類似于所示的該輪的總共64輪可以用 于計算最后的消息摘要。八個狀態(tài)字a;、bp Cp山、e;、fp gjP h ; 101被輸入到該輪。這 八個狀態(tài)字在標準中也被稱為八個工作變量。對于SHA-224和SHA-256,這些狀態(tài)字中的 每一個都是32比特。對于SHA-384和SHA-512,這些狀態(tài)字中的每一個都是64比特。此 外,到該輪的輸入為到當前輪的消息輸入(即,W(i)) 102以及到當前輪的常數(shù)輸入(例如, K(i)) 103。針對每一輪執(zhí)行一組SHA2操作104。該組操作包括多個模加法(由內(nèi)部具有 加號的方框示出),且對函數(shù)的計算被稱為Ch、Σ r Maj、Σ。。還存在對這些狀態(tài)字的重映 射。該輪的輸出為八個已更新的狀態(tài)字ai+1、bi+1、c i+1、di+1、ei+1、fi+1、gi+1和h i+1 105。
[0007] 針對64輪中的每一個該組操作包括以下操作:
[0008] Σ o(a) = (a ROTR 2) XOR (a ROTR 13) XOR (a ROTR 22)
[0009] Σ !(e) = (e ROTR 6) XOR (e ROTR 11) XOR (e ROTR 25)
[0010] Maj (a,b,c) = (a AND b) XOR (a AND c) XOR (b AND c)
[0011] Ch(e,f, g) = (e AND f)XOR((NOT e)AND g)
[0012] T1= h+Σ 1(e)+Ch(e,f,g)+K1+'^1
[0013] T2= Σ。(a)+Maj (a,b,c)
[0014] h = g
[0015] g = f
[0016] f = e
[0017] e = d+T!
[0018] d = c
[0019] c = b
[0020] b = a
[0021] a = VT2
[0022] 在上文中," ROTR"指定了逐位右旋轉(zhuǎn)操作其右側(cè)的比特數(shù)目," XOR"指定了邏輯異 或操作,"AND"指定了邏輯與操作,"NOT"指定了邏輯非操作。旋轉(zhuǎn)量是對于SHA-256特定 的。其它的SHA2算法使用不同的移位和旋轉(zhuǎn)量。
[0023] 如可以看到的,SHA2算法的每一輪涉及大量的操作。此外,生成消息摘要涉及 六十四輪這樣的輪。一個巨大的挑戰(zhàn)在于傳統(tǒng)地實現(xiàn)SHA2算法涉及在處理器上執(zhí)行大量 的指令。通常,SHA2算法中的每一輪可能采用從若干到許多個指令。例如,在一個可能的 實現(xiàn)中,在一輪內(nèi),單獨的指令可以用于執(zhí)行旋轉(zhuǎn)、邏輯AND、X0R、和NOT操作、加法等中的 一個。這與存在64輪的現(xiàn)實相結(jié)合,可以趨向于使得實現(xiàn)SHA2算法是非常計算密集的并 且花費大量的時間。
【附圖說明】
[0024] 通過參考以下用于示出本發(fā)明實施例的描述和附圖可以最佳地理解本發(fā)明。在附 圖中:
[0025] 圖1示出了單輪安全哈希算法2 (SHA2)哈希算法的細節(jié)。
[0026] 圖2是具有包括對執(zhí)行一個或多個SHA2算法有用的一個或多個指令的指令集的 指令處理裝置的框圖。
[0027] 圖3是具有SHA2執(zhí)行邏輯的指令處理裝置的實施例的框圖,SHA2執(zhí)行邏輯可操 作以執(zhí)行對處理SHA2安全哈希算法有用的指令的至少一個實施例。
[0028] 圖4是處理對SHA2安全哈希算法有用的指令的方法的實施例的方框流程圖。
[0029] 圖5示出了一輪SHA2算法的一部分。
[0030] 圖6是寄存器中的四個狀態(tài)字或元素 a、b、e和f的子集的實施例的框圖。
[0031] 圖7A是由SHA2輸入指令的第一實施例執(zhí)行的操作的框圖。
[0032] 圖7B是由SHA2兩輪指令的實施例執(zhí)行的操作的框圖。
[0033] 圖8A是由SHA2輸入指令的第二實施例執(zhí)行的操作的框圖。
[0034] 圖8B是由SHA2兩輪低更新指令的實施例執(zhí)行的操作的框圖。
[0035] 圖8C是由SHA2兩輪高更新指令的實施例執(zhí)行的操作的框圖。
[0036] 圖9是由SHA2 128比特的兩輪指令的實施例執(zhí)行的操作的框圖。
[0037] 圖10是由SHA2 256比特的兩輪指令的實施例執(zhí)行的操作的框圖。
[0038] 圖11是由SHA2 128比特的四輪指令的實施例執(zhí)行的操作的框圖。
[0039] 圖12是由SHA2 512比特的四輪指令的實施例執(zhí)行的操作的框圖。
[0040] 圖13A-C是合適的指令格式的框圖。
[0041] 圖14是適當組的緊縮數(shù)據(jù)寄存器的示例性實施例的框圖。
[0042] 圖15A示出了示例性的AVX指令格式,其包括VEX前綴、真實操作碼字段、Mod R/ M字節(jié)、SIB字節(jié)、位移字段、以及IMM8。
[0043] 圖15B示出了來自圖15A的哪些字段組成了完整的操作碼字段以及基礎(chǔ)操作字 段。
[0044] 圖15C示出了來自圖15A的哪些字段組成了寄存器索引字段1544。
[0045] 圖16是根據(jù)本發(fā)明一個實施例的寄存器架構(gòu)的框圖。
[0046] 圖17A是根據(jù)本發(fā)明實施例的示出了示例性有序管線和示例性寄存器重命名、亂 序發(fā)布/執(zhí)行管線兩者的框圖。
[0047] 圖17B示出了處理器內(nèi)核,其包括耦合到執(zhí)行引擎單元的前端單元,且這兩者都 親合到存儲器單元。
[0048] 圖18A是根據(jù)本發(fā)明實施例的單個處理器內(nèi)核,連同到其管芯上互連網(wǎng)絡(luò)的連接 以及其級別2(L2)的本地子集一起的框圖。
[0049] 圖18B是根據(jù)本發(fā)明實施例的在圖18A中的處理器內(nèi)核的一部分的擴展圖。
[0050] 圖19是根據(jù)本發(fā)明實施例的處理器的框圖,該處理器可以具有超過一個的內(nèi)核、 可以具有集成存儲器控制器、且可以具有集成顯卡。
[0051 ] 圖20示出了根據(jù)本發(fā)明一個實施例的系統(tǒng)的框圖。
[0052] 圖21根據(jù)本發(fā)明一個實施例示出了第一更具體的示例性系統(tǒng)的框圖。
[0053] 圖22根據(jù)本發(fā)明一個實施例示出了第二更具體的示例性系統(tǒng)的框圖。
[0054] 圖23根據(jù)本發(fā)明一個實施例示出了 SoC的框圖。
[0055] 圖24是根據(jù)本發(fā)明實施例的對比了使用軟件指令轉(zhuǎn)換器來將源指令集中的二進 制指令轉(zhuǎn)換成目標指令集中的二進制指令的框圖。
【具體實施方式】
[0056] 本申請中公開的是對執(zhí)行SHA2哈希算法(例如,SHA-224、SHA-256、SHA-384、以 及SHA-512)有用的指令、用于執(zhí)行該指令的處理器、當處理或執(zhí)行該指令時由該處理器執(zhí) 行的方法、以及并入一個或多個處理器以處理或執(zhí)行該指令的系統(tǒng)。在下文的描述中,闡述 了許多特定的細節(jié)(例如,特定的指令功能、數(shù)據(jù)格式、寄存器中的數(shù)據(jù)編排、指令格式、處 理器配置、執(zhí)行邏輯、微架構(gòu)細節(jié)、操作序列等)。然而,要理解的是可以在沒有這些具體細 節(jié)的情況下實施本發(fā)明的實施例。在其它實例中,為了不模糊對本說明書的理解,尚未詳細 示出公知的電路、結(jié)構(gòu)和技術(shù)。
[0057] 圖2是處理器或其它指令處理裝置206的示例性實施例的框圖,該處理器或其它 指令處理裝置206具有指令集207,該指令集207包括對執(zhí)行一個或多個SHA2算法有用的 一個或多個指令208。處理器可以是各種復雜指令集計算(CISC)處理器、各種精簡指令集 計算(RISC)處理器、各種超長指令字(VLIW)處理器、和其中混合、或完全地其它類型的處 理器中的任何一個。在一些實施例中,處理器可以是通用處理器(例如,在臺式機、膝上型 計算機、服務(wù)器等計算機上使用的類型)。或者,處理器可以是專用處理器。適合的專用處 理器的示例包括,但不限于,舉幾個例子來說,加密處理器、通信處理器、網(wǎng)絡(luò)處理器、數(shù)字 信號處理器(DSP)、加密協(xié)處理器、嵌入式處理器、圖形處理器、以及控制器(例如,微控制 器)。
[0058] 處理器和裝置具有指令集架構(gòu)(ISA) 209。ISA表示與編程相關(guān)的處理器架構(gòu)的一 部分,且通常包括本地指令、架構(gòu)寄存器(architectural register)、數(shù)據(jù)類型、尋址模式、 存儲器架構(gòu)、中斷和異常處理、以及處理器的外部輸入和輸出(I/O)。ISA與微架構(gòu)不同,其 通常表示選擇用于實現(xiàn)ISA的特定處理器設(shè)計技術(shù)。
[0059] ISA包括指令集207。指令集的指令表示宏指令(例如,向處理器提供以執(zhí)行的指 令),與微指令或微操作(例如,由解碼宏指令的處理器的解碼器所得到的那些)相對比。 指令集包括一個或多個指令208, 一個或多個指令208中的每一個對處理執(zhí)行一個或多個 SHA2算法是有用的。
[0060] ISA還包括在架構(gòu)上可見的寄存器210。架構(gòu)寄存器通常表示管芯上處理器存儲 器位置。架構(gòu)寄存器還可以在本申請中被簡單稱為寄存器。短語架構(gòu)寄存器、寄存器堆、以 及寄存器在本申請中用于指代對軟件和/或程序員可見(例如,軟件可見)的寄存器和/或 由宏指令指定以標識操作數(shù)的寄存器。這些寄存器與給定微架構(gòu)中的非架構(gòu)性或非架構(gòu)可 見的寄存器相對比(例如,由指令所使用的臨時寄存器、重排序緩沖器、退出寄存器等)。所 示出的寄存器包括緊縮(packed)數(shù)據(jù)寄存器211,緊縮數(shù)據(jù)寄存器211中的每一個可操作 以存儲緊縮的、矢量、或單指令多數(shù)據(jù)(SHffi)數(shù)據(jù)。用于處理SHA2算法208的指令可以指 示緊縮數(shù)據(jù)寄存器中的源數(shù)據(jù)并且指示將在緊縮數(shù)據(jù)寄存器中存儲的結(jié)果數(shù)據(jù)的目的地。
[0061] 處理器或裝置還包括SHA2執(zhí)行邏輯212。SHA2執(zhí)行邏輯可以包括響應(yīng)于指令的 執(zhí)行單元、功能單元、電路等。SHA2執(zhí)行邏輯可操作以執(zhí)行或處理指令208。
[0062] 圖3是處理器或其它指令處理器裝置306的示例性實施例的框圖,上述處理器或 其它指令處理器裝置306具有執(zhí)行邏輯312,該執(zhí)行邏輯312可操作以執(zhí)行對處理SHA2安 全哈希算法有用的指令308的至少一個實施例。在一些實施例中,指令處理裝置可以是處 理器和/或可以被包含在處理器中。在一些實施例中,指令處理器裝置可以被包含在圖2 的裝置中,或指令處理裝置306可以被包含在類似的或不同的裝置中。
[0063] 裝置306可以接收指令308。例如,指令可以從指令提取單元、指令隊列、或存儲 器接收。指令可以代表機器指令、微指令、或由裝置識別且控制裝置執(zhí)行特定操作的控制信 號。上述指令可以顯式指定(例如,通過比特或一個或多個字段)或另外指示(例如,隱式 指示)第一源314。該指令還可以顯式指定或另外指示第二源316。指令還可以顯式指定 或另外指示要存儲指令結(jié)果的目的地318 (例如,目的地存儲位置)。在一些實施例中,第一 源和第二源中的一個可以被重用為目的地(例如,指令的源/目的地字段可以指定被用作 源和目的地的寄存器)。
[0064] 所示出的裝置包括指令解碼單元或解碼器313。解碼器可以接收和解碼高級機器 指令或宏指令并輸出一個或多個低級微操作、微代碼入口點、微指令、或反映原始高級指令 和/或從原始高級指令得到的其它低級指令或控制信號。一個或多個低級指令或控制信號 可以通過一個或多個低級(例如,電路級或硬件級)操作來實現(xiàn)高級指令的操作??梢允?用各種不同的機制來實現(xiàn)解碼器,各種不同的機制包括但不限于微代碼只讀存儲器(ROM)、 查詢表、硬件實現(xiàn)、可編程邏輯陣列(PLA)、以及用于實現(xiàn)本領(lǐng)域已知的解碼器的其它機制。
[0065] 在其它實施例中,可以使用指令仿真器、轉(zhuǎn)換器、變形器、解釋器、或其它指令轉(zhuǎn)換 邏輯而不具有解碼器313。各種不同類型的指令轉(zhuǎn)換邏輯是本領(lǐng)域已知的,且其可以以軟 件、硬件、固件、或其組合來實現(xiàn)。指令轉(zhuǎn)換邏輯可以接收指令,仿真、翻譯、變型、解釋、或另 外將所接收的指令轉(zhuǎn)換成一個或多個相對應(yīng)的得到的指令或控制信號。在其它的實施例 中,可以使用指令轉(zhuǎn)換邏輯和解碼器兩者。
[0066] 裝置還包括一組架構(gòu)緊縮數(shù)據(jù)寄存器311。可以使用公知的技術(shù)在不同的微架構(gòu) 中以不同的方式來實現(xiàn)緊縮數(shù)據(jù)寄存器,且其不限于任何特定類型的電路。各種不同類型 的寄存器是適合的。適合類型的寄存器示例包括,但不限于專用物理寄存器、使用寄存器重 命名的動態(tài)地分配的物理寄存器、及其組合。如所示出的,在一些實施例中,第一源314、第 二源316、以及目的地318各自可以是緊縮數(shù)據(jù)寄存器中的一個?;蛘?,存儲器位置及其它 適合的存儲位置可以用于這些中的一個或多個。
[0067] SHA2執(zhí)行邏輯312與緊縮數(shù)據(jù)寄存器耦合311并且與解碼器313耦合。SHA2執(zhí)行 邏輯可以從解碼器接收一個或多個微操作、微代碼入口點、微指令、其它指令、或反映指令 308或從指令308得到的其它控制信號。響應(yīng)于和/或作為指令308的結(jié)果,SHA2執(zhí)行邏 輯可以可操作以將緊縮數(shù)據(jù)結(jié)果319存儲在由指令指定或另外指示的目的地318中。SHA2 執(zhí)行邏輯和/或裝置可以包括可操作以執(zhí)行和/或處理指令的具體或特定邏輯(例如,潛 在地與固件和/或軟件結(jié)合的電路或其它硬件),并且響應(yīng)于該指令(例如,響應(yīng)于從該指 令得到的一個或多個微指令或其它控制信號)而存儲該結(jié)果。
[0068] 在一些實施例中,第一源314可以包括第一緊縮數(shù)據(jù)315,第一緊縮數(shù)據(jù)315包括 針對SHA2哈希算法的當前輪(i)的狀態(tài)數(shù)據(jù)元素 aptvejP f i,且第二源316可以包括第 二緊縮數(shù)據(jù)(例如,在各個實施例中狀態(tài)數(shù)據(jù)元素和/或消息和常數(shù)數(shù)據(jù))。在一些實施例 中,結(jié)果319可以包括通過SHA2哈希算法的至少一輪而已經(jīng)根據(jù)第一源314的相對應(yīng)的狀 態(tài)數(shù)據(jù)元素 f i而更新的已更新的狀態(tài)數(shù)據(jù)元素 a 1+、b1+、e1+和f 1+。例如,已更新 的狀態(tài)數(shù)據(jù)元素 a1+可以表示針對當前輪的、由SHA2哈希算法的一輪所更新的相對應(yīng)的開 始狀態(tài)數(shù)據(jù)元素%,已更新的狀態(tài)數(shù)據(jù)元素 b1+可以表示由SHA2哈希算法的一輪所更新的 相對應(yīng)的開始狀態(tài)數(shù)據(jù)元素 h,以此類推。
[0069] 在一些實施例中,第一緊縮數(shù)據(jù)315可以具有比SHA2哈希算法的八個數(shù)據(jù)元素 (即,&1、bp M5P f i以及其它的4個c η山、gjP h J的組合比特寬度更小的比特寬度。在 一些實施例中,第一緊縮數(shù)據(jù)的比特寬度可以為大約SHA2哈希算法的八個狀態(tài)數(shù)據(jù)元素 的組合比特寬度的一半。例如,在SHA-256的情況下,八狀態(tài)數(shù)據(jù)元素中的每一個可以是 32比特且八個狀態(tài)數(shù)據(jù)元素的組合比特寬度可以是256比特,而第一緊縮數(shù)據(jù)可以僅具有 128比特的寬度(例如,存儲在128比特寄存器中)且可以僅保留八個32比特狀態(tài)數(shù)據(jù)元 素中的四個(例如,%、13 1、61和€1)。作為另一示例,在3撤-512的情況下,八個狀態(tài)數(shù)據(jù)元 素中的每一個可以是64比特且八個狀態(tài)數(shù)據(jù)元素的組合比特寬度可以是512比特,而第一 緊縮數(shù)據(jù)可以僅具有256比特寬度(例如,存儲在256比特寄存器中)并且能夠僅保留八 個64比特狀態(tài)數(shù)據(jù)元素中的四個。
[0070] 在一些實施例中,該結(jié)果可以包括已經(jīng)通過兩輪的SHA2哈希算法而從第一源的 相對應(yīng)的狀態(tài)數(shù)據(jù)元素 f i而更新的已更新的狀態(tài)數(shù)據(jù)元素 a 1+2、b1+2、e1+jP f 1+2。 在一些實施例中,該結(jié)果可以包括已經(jīng)通過四輪的SHA2哈希算法而從第一源的相對應(yīng)的 狀態(tài)數(shù)據(jù)元素 %、bp &和f i而更新的已更新的狀態(tài)數(shù)據(jù)元素 a 1+4、b1+4、e1+4和f 1+4。下文將 進一步描述這些指令的特定示例。
[0071] 在一些實施例中,上述指令可以指定兩個源或僅指定兩個源(即,不具有第三 源)。在其它實施例中,除了第一和第二源之外,該指令還可以指示第三源(例如,隱式指示 或顯式指定第三源)。下文將進一步描述這些指令的具體示例。
[0072] 如下文將進一步解釋的,在一些實施例中,對SHA2輪的一些處理可以在執(zhí)行指令 的限制之外執(zhí)行。例如,如下文將進一步解釋的,在一些實施例中,X和Y的計算可以由另 一指令執(zhí)行。作為另一示例,在一些實施例中,可以在該輪之外執(zhí)行消息數(shù)據(jù)的計算和/或 消息和常數(shù)的加法。在一些實施例中,指令的執(zhí)行可以包括Σ。函數(shù)的操作(例如,針對 SHA-256 的(B1 ROTR 2)XORfe1 ROTR 13)XORfe1 ROTR 22))和 / 或Maj 函數(shù)(例如,針對 SHA-256 的(ai AND bj XOR (ai AND C1) XOR (ai ROTR C1))。
[0073] 優(yōu)選地,在一些實施例中,單個指令可以用于通過至少一輪的SHA2算法來更新狀 態(tài)數(shù)據(jù)元素中的四個。這可以有助于顯著提高實現(xiàn)SHA2算法的效率和/或速度。
[0074] 為了避免模糊該描述,已經(jīng)示出并描述了相對簡單的裝置306。在其它實施例中, 該裝置可以可選地包括其它組件,諸如例如指令提取單元、指令調(diào)度單元、分支預測單元、 指令和數(shù)據(jù)高速緩存、指令和數(shù)據(jù)翻譯后備緩沖器、預提取緩沖器、微指令隊列、微指令定 序器、總線接口單元、第二或高級高速緩存、退出單元、寄存器重命名單元、處理器中包含的 其它組件、以及它們的各種組合。實施例可以具有多個內(nèi)核、邏輯處理器、或執(zhí)行引擎???操作以執(zhí)行本申請中公開的至少一個指令的實施例的SHA2執(zhí)行邏輯可以被包含在內(nèi)核、 邏輯處理器、或執(zhí)行引擎中的至少一個中。照字面地,在處理器中存在這樣的組件的許多種