TW202409871A - 安全雜湊演算法之基於硬體之實現 - Google Patents

安全雜湊演算法之基於硬體之實現 Download PDF

Info

Publication number
TW202409871A
TW202409871A TW112124023A TW112124023A TW202409871A TW 202409871 A TW202409871 A TW 202409871A TW 112124023 A TW112124023 A TW 112124023A TW 112124023 A TW112124023 A TW 112124023A TW 202409871 A TW202409871 A TW 202409871A
Authority
TW
Taiwan
Prior art keywords
message
register
state
hash
block
Prior art date
Application number
TW112124023A
Other languages
English (en)
Inventor
曼諾 庫瑪
希薇亞 梅莉塔 穆勒
笛巴普里雅 洽特傑
尼爾斯 弗里克
凱塔莫瑞 艾卡納達
馬丁 J 布爾斯馬
馬丁 迪德 柏克斯
Original Assignee
美商萬國商業機器公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 美商萬國商業機器公司 filed Critical 美商萬國商業機器公司
Publication of TW202409871A publication Critical patent/TW202409871A/zh

Links

Abstract

一種處理器包括一暫存器檔案及一執行單元。該執行單元包括:一雜湊電路,其包括至少一狀態暫存器;一狀態更新電路,其耦接至該狀態暫存器;及一控制電路。基於一雜湊指令,該雜湊電路自該暫存器檔案接收並在該狀態暫存器內緩衝正被雜湊之一訊息之一當前狀態。該狀態更新電路對該狀態暫存器之內容執行狀態更新函數,其中執行該狀態更新函數包括對該狀態暫存器之內容執行複數個反覆回合之處理,及將該複數個反覆回合處理中之每一者之一結果傳回至該狀態暫存器。在完成所有該複數個反覆回合之處理之後,該執行單元將該狀態暫存器之內容儲存至該暫存器檔案作為該訊息之一經更新狀態。

Description

安全雜湊演算法之基於硬體之實現
本發明大體而言係關於資料處理,且特定言之,係關於在硬體中高效地執行安全雜湊演算法。
資料安全之重要態樣為經由加密來保護靜止資料(例如,當儲存於資料儲存裝置中時)或轉變中之資料(例如,在傳輸期間)。一般而言,加密涉及經由利用加密函數將明文與一或多個加密密鑰組合來將未加密資料(被稱作明文)轉換成經加密資料(被稱作密文)。為了自密文恢復明文,藉由利用一或多個解密密鑰之解密函數處理密文。因此,加密藉由在當事方能夠存取受保護明文之前彼當事方已知額外秘密(亦即,解密密鑰)的要求來提供資料安全。
在許多實現中,利用執行於通用處理器上之軟體來執行資料加密。雖然在軟體中實現加密提供了能夠選擇不同加密演算法且易於調適所選擇加密演算法以使用各種資料長度的優點,但在軟體中執行加密具有相對不良效能的伴隨缺點。隨著資料集之量在「大資料」時代繼續顯著增加,當加密大訊息及/或資料集時,藉由軟體實現加密達成之效能可係不可接受的。亦由於愈來愈需要利用加密資料運行企業應用程式以便減輕「黑客行為」及其他網路攻擊的後果且確保法規遵循性,而產生對加密效能之關注。因此,常常需要提供對硬體中之加密的支援以達成改良之效能。
本發明瞭解到,希望為其提供硬體支援的一種類別之加密演算法為雜湊函數,包括但不限於屬於安全雜湊演算法(SHA)標準系列之雜湊函數。如此項技術中已知,SHA標準系列定義由國家標準學會(NIST)核准的用於生成訊息之壓縮表示(亦即,訊息摘要)的雜湊演算法。SHA標準系列經指定於兩個聯邦資訊處理標準(FIPS)中:FIPS 180-4「安全雜湊標準(Secure Hash Standard)」及FIPS 202「SHA-3標準:基於置換之雜湊及可擴展輸出函數(SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions)」,該等標準以引用方式併入本文中。FIPS 180-4指定七個雜湊演算法,即安全雜湊演算法1(Secure Hash Algorithm-1;SHA-1)及SHA-2系列雜湊演算法,包括SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224及SHA-512/256。FIPS 202另外指定四個SHA-3雜湊演算法,其具有固定長度輸出(亦即,SHA3-224、SHA3-256、SHA3-384及SHA3-512)及兩個緊密相關「可擴展輸出」函數(XOF),名為SHAKE128及SHAKE256(其中SHAKE為安全雜湊演算法及Keccak之縮寫)。SHA標準系列之額外用途(例如,作為串流密碼、經鑑認加密系統或樹雜湊方案)尚未被採用為NIST標準。
在給出雜湊函數之廣泛多樣性及雜湊函數之資料大小(即使在SHA標準系列內)的情況下,用於雜湊函數之硬體中的廣泛支援可導致處理器佈局內之較大區域被實現雜湊函數之電路系統消耗。結果,一些硬體解決方案選擇(例如)在匯流排附接之特殊應用積體電路(ASIC)或加速器中與處理器核心分開地實現此電路系統。雖然提供了比一些軟體解決方案更好的效能的可能性,但此等輔助電路之使用仍然受到匯流排及記憶體存取潛時及訊息傳遞開銷的影響,從而與在高效能處理器核心內可達成之效能相比再次限制了效能。對於相對較小訊息(例如,擬合於單一訊息塊內之訊息),此效能損失尤其嚴重,該等訊息為企業伺服器中處置之大多數SHA訊息。本發明藉由在處理器中有效地實現雜湊函數來解決此等及其他設計考慮因素。
在一個實施例中,一種處理器包括一暫存器檔案及一執行單元。該執行單元包括:一雜湊電路,其包括至少一狀態暫存器;一狀態更新電路,其耦接至該狀態暫存器;及一控制電路。基於一雜湊指令,該雜湊電路自該暫存器檔案接收並在該狀態暫存器內緩衝正被雜湊之一訊息之一當前狀態。該狀態更新電路對該狀態暫存器之內容執行狀態更新函數,其中執行該狀態更新函數包括對該狀態暫存器之內容執行複數個反覆回合之處理,及將該複數個反覆回合處理中之每一者之一結果傳回至該狀態暫存器。在完成所有該複數個反覆回合之處理之後,該執行單元將該狀態暫存器之內容儲存至該暫存器檔案作為該訊息之一經更新狀態。
此處理器可併入至一資料處理系統中,該資料處理系統包括多個處理器、一共用記憶體及以通信方式耦接該共用記憶體及該多個處理器之一系統互連件。此處理器亦可有形地體現於一機器可讀儲存裝置中用於設計、製造或測試一積體電路之之一設計結構中。
在一個實施例中,一種在一處理器中進行資料處理之方法包括藉由一指令提取單元提取待由該處理器執行之指令。該等指令包括一雜湊指令。基於接收到該雜湊指令,該處理器之一執行單元執行該雜湊指令。執行該雜湊指令包括自一暫存器檔案接收並在該執行單元之一狀態暫存器內緩衝正被雜湊之一訊息之一當前狀態。執行該雜湊指令亦包括在一狀態更新電路中對該狀態暫存器之內容執行一狀態更新函數,其中執行該狀態更新函數包括對該狀態暫存器之內容執行複數個反覆回合之處理,及將該複數個反覆回合處理中之每一者之一結果傳回至該狀態暫存器。在完成所有該複數個反覆回合之處理之後,將該狀態暫存器之內容儲存至該暫存器檔案中作為該訊息之一經更新狀態。
在至少一些實施例中,該狀態更新函數包含一安全雜湊演算法3 (SHA3)狀態置換函數;且該狀態更新電路執行二十四個回合之處理,每一回合之處理利用二十四個回合索引中之一各別回合索引作為一輸入。
在一個實施例中,該執行單元在一安全雜湊演算法及Keccak(SHAKE)雜湊演算法之一擠壓階段中執行該雜湊指令。
在至少一些實施例中,該狀態更新函數包含一安全雜湊演算法2 (SHA2)塊雜湊函數。在至少一些實施例中,該雜湊電路進一步包括一加法器,該加法器經組態以將該狀態暫存器之內容加至該當前狀態且將一所得總和傳回至該暫存器檔案。在一些實施例中,該執行單元進一步包括用於緩衝該訊息之一訊息塊之一訊息塊暫存器及耦接至該訊息塊暫存器之一訊息排程回合電路。該訊息排程回合電路對該訊息塊暫存器之內容執行複數個反覆回合之處理,且將該複數個反覆回合之處理中之每一者的一結果傳回至該訊息塊暫存器。在一些實施例中,該狀態更新電路包括用於具有一第一資料寬度之資料字的一資料路徑,且該執行單元經組態以基於指示比該第一資料寬度窄之一第二資料寬度的該雜湊指令,在處理該狀態更新電路中之該訊息的該等資料字之前,將該訊息之一訊息塊的資料字擴展至該第一資料寬度。
現在參考諸圖且特別參考 1,繪示根據一個實施例的資料處理系統 100之高階方塊圖。在一些實現中,資料處理系統 100可為(例如)伺服器電腦系統(諸如,可購自國際商業機器公司之POWER系列伺服器中之一者)、大型電腦系統、行動計算裝置(諸如智慧型手機或平板電腦)、膝上型或桌上型個人電腦系統或嵌入式處理器系統。
如所示,資料處理系統 100包括處理指令及資料之一或多個處理器 102。如此項技術中已知,每一處理器 102可實現為具有半導體基板之各別積體電路,在該半導體基板中形成有積體電路系統。在至少一些實施例中,處理器 102可通常實現多個市售處理器架構中之任一者,例如,POWER、ARM、Intel x86、NVidia、Apple silicon等。在所描繪之實例中,每一處理器 102包括一或多個處理器核心 104及快取記憶體 106,該快取記憶體提供對很可能待由處理器核心 104讀取及/或寫入之指令及運算元的低潛時存取。處理器 102經耦接以用於藉由系統互連件 110進行通信,該系統互連件在各種實現中可包括一或多個匯流排、交換器、橋接器及/或混合互連件。
資料處理系統 100可另外包括耦接至系統互連件 110之數個其他組件。舉例而言,此等組件可包括控制由處理器 102及資料處理系統 100之其他組件對系統記憶體 114之存取的記憶體控制器 112。另外,資料處理系統 100可包括:輸入/輸出(I/O)配接器 116,其用於將一或多個I/O裝置耦接至系統互連件 110;非揮發性儲存系統 118 及網路配接器 120,其用於將資料處理系統 100耦接至通信網路(例如,有線或無線區域網路及/或網際網路)。
熟習此項技術者應另外瞭解, 1中所展示之資料處理系統 100可包括許多額外未繪示之組件。因為此類額外組件對於理解所描述實施例並非必需的,所以其並未在 1中加以繪示或在本文中加以進一步論述。然而,亦應理解,本文中所描述之增強適用於不同架構之資料處理系統及處理器,且決不限於 1中所繪示之一般化資料處理系統架構。
現參考 2,描繪根據一個實施例的例示性處理器核心 200之高階方塊圖。處理器核心 200可用以實現 1之處理器核心 104中之任一者。
在所描繪之實例中,處理器核心 200包括用於自儲存器 230(其可包括例如來自 1之快取記憶體 106及/或系統記憶體 114)提取一或多個指令串流內之指令的指令提取單元 202。在典型實現中,每一指令具有由處理器核心 200之指令集架構定義之格式,且至少包括指定待由處理器核心 200執行之操作(例如,固定點或浮點算術運算、向量運算、矩陣運算、邏輯運算、分支運算、記憶體存取操作、加密運算等)的作業碼(operation code/opcode)欄位。某些指令可另外包括一或多個運算元欄位,該一或多個運算元欄位直接指定運算元或隱含地或明確地參考儲存待用於指令執行中之源運算元的一或多個暫存器及用於儲存藉由指令執行而生成的目的地運算元的一或多個暫存器。在一些實施例中可與指令提取單元 202合併的指令解碼單元 204,解碼藉由指令提取單元 202自儲存器 230擷取之指令,且將控制執行流之分支指令轉遞至分支處理單元 206。在一些實施例中,藉由分支處理單元 206執行之分支指令的處理可包括推測條件分支指令之結果。由分支處理單元 206進行的分支處理(推測性及非推測性兩者)之結果繼而可用以重新引導藉由指令提取單元 202進行的指令提取之一或多個串流。
指令解碼單元 204將並非分支指令的指令(常常被稱作「依序指令」)轉遞至映射器電路 210。映射器電路 210負責視需要將處理器核心 200之暫存器檔案內的實體暫存器指派給指令以支援指令執行。映射器電路 210較佳實現暫存器重命名。因此,對於至少一些類別之指令,映射器電路 210建立藉由指令參考之邏輯(或架構式)暫存器之集合與處理器核心 200之暫存器檔案內的實體暫存器之較大集合之間的暫態映射。結果,處理器核心 200可避免對並非資料相依的指令進行不必要的串列化,否則可能由於按程式次序附近的指令再使用架構式暫存器之有限集合而發生此情形。
仍參看 2,處理器核心 200另外包括一分派電路 216,該分派電路經組態以確保觀測到指令之間的任何資料相依性並在依序指令變得準備好執行時分派依序指令。由分派電路 216分派之指令暫時在發行佇列 218中經緩衝,直至處理器核心 200之執行單元具有可用於執行經分派指令之資源。當適當的執行資源變得可用時,發行佇列 218機會性地且可能相對於指令之原始程式次序無序地將指令自發行佇列 218發行至處理器核心 200之執行單元。
在所描繪之實例中,處理器核心 200包括用於執行各別不同類別之指令的若干不同類型之執行單元。在此實例中,執行單元包括:一或多個固定點單元 220,其用於執行存取固定點運算元之指令;一或多個浮點單元 222,其用於執行存取浮點運算元之指令;一或多個載入-儲存單元 224,其用於自儲存器 230載入資料並將資料儲存至該儲存器;及一或多個向量-純量單元 226,其用於執行存取向量及/或純量運算元之指令。在一典型實施例中,每一執行單元經實現為多階段管線,其中可在不同執行階段同時處理多個指令。每一執行單元較佳包括至少一個暫存器檔案或經耦接以存取至少一個暫存器檔案,該至少一個暫存器檔案包括用於暫時緩衝在指令執行中存取或藉由指令執行生成之運算元的複數個實體暫存器。
熟習此項技術者應瞭解,處理器核心 200可包括額外未繪示之組件,諸如經組態以管理由執行單元 220226之執行結束所針對之指令的完成及引退的邏輯。因為此等額外組件對於理解所描述實施例並非必需的,所以其並未在 2中加以繪示或在本文中加以進一步論述。
現在參考 3,繪示根據一個實施例的處理器 102之例示性執行單元之高階方塊圖。在此實例中,更詳細地展示處理器核心 200之向量-純量單元 226。在 3之實施例中,向量-純量單元 226經組態以執行對不同類型之運算元之操作並生成不同類型之運算元的多個不同類別之指令。舉例而言,向量-純量單元 226經組態以執行對向量及純量源運算元進行操作並生成向量及純量目的地運算元的第一類別之指令。向量-純量單元 226在功能單元 302312中執行此第一類別之指令中的指令,在所描繪之實施例中,該等功能單元包括:用於執行加法、減法及旋轉運算之算術邏輯單元/旋轉單元 302、用於執行二進位乘法之乘法單元 304、用於執行二進位除法之除法單元 306、用於執行加密功能之加密單元 308、用於執行運算元置換之置換單元 310及用於執行十進位數學運算之二進位寫碼十進位(BCD)單元 312。對其執行此等運算之向量及純量源運算元以及藉由此等運算生成之向量及純量目的地運算元在架構式暫存器檔案 300之實體暫存器中被緩衝。
在此實例中,向量-純量單元 226另外經組態以執行致使執行雜湊函數之第二類別之指令。向量-純量單元 226在加速器單元 314中執行此第二類別之指令中的指令。對其執行此等雜湊函數之運算元及藉由此等雜湊函數生成之運算元經緩衝且累積於寬向量暫存器檔案 316中,該寬向量暫存器檔案可包括例如1024位元寬實體暫存器。
在操作中,向量-純量單元 226自發行佇列 218接收指令。若指令係在第一類別之指令(例如,向量-純量指令)中,則在架構式暫存器檔案 300中利用由映射器電路 210建立的邏輯暫存器與實體暫存器之間的映射來存取用於指令之相關源運算元,且接著將其與指令一起轉遞至功能單元 302312中之一相關功能單元以供執行。藉由彼執行生成的目的地運算元接著儲存回至架構式暫存器檔案 300的藉由映射器電路 210建立之映射判定的實體暫存器。另一方面,若指令處於第二類別之指令(例如,雜湊指令)中,則將該指令轉遞至加速器單元 314以關於在寬向量暫存器檔案 316之指定暫存器中緩衝的運算元進行執行。
現在參看 4,描繪根據一個實施例的 3之加速器單元 314之更詳細方塊圖。加速器單元 314包括用於在硬體中執行多種雜湊函數之電路系統,包括(例如)由SHA標準系列定義之一或多個雜湊函數。在所描繪之實例中,加速器單元 314之雜湊電路系統至少包括如下文參考 11更詳細描述之SHA3/SHAKE雜湊電路 400及如下文參考 17更詳細描述之SHA2雜湊電路 402。加速器單元 314另外包括在執行訊息之SHA3/SHAKE雜湊時採用的單指令多資料(SIMD)互斥或(XOR)電路 404,如下文進一步論述。最後,加速器單元 314包括在記憶體系統(例如,快取記憶體 106及系統記憶體 114)與寬向量暫存器檔案 316之間傳送資料(例如,待雜湊之訊息及訊息摘要)的資料傳送電路 406
現在參考 5,存在根據SHA-3標準的訊息雜湊之程序 500的時間-空間圖。如此項技術中已知,SHA-3標準(亦即,FIPS 202)採用基於寬隨機函數或隨機置換的海綿構造。根據此海綿構造,任何任意長度(可能許多百萬位元組)之訊息 502首先在輸入階段(在海綿術語中被稱作SHA3吸收階段 504)中經處理。在下文參考 6更詳細描述的SHA3吸收階段 504,針對SHA3雜湊函數及SHAKE雜湊函數兩者係相同的。SHA3吸收階段 504產生1600位元最後吸收狀態 610,接著在輸出階段(在海綿術語中被稱作SHA3/SHAKE擠壓階段 506)中處理該1600位元最後吸收狀態以生成訊息摘要 508。下文參考 8詳細描述的SHA3/SHAKE擠壓階段 506針對SHA3雜湊函數及SHAKE雜湊函數不同地操作。特定言之,SHA3/SHAKE擠壓階段 506生成用於各種SHA3雜湊函數的固定長度訊息摘要 508,但生成用於SHAKE雜湊函數的可變長度訊息摘要 508
以下表I概述由SHA-3標準定義且列於第一行中的四個SHA3雜湊函數及兩個SHAKE雜湊函數之屬性。在表I中,第二行概述SHA3吸收階段 504將可變長度訊息 502再分成的訊息塊之以位元為單位的大小( r)。訊息塊大小 r為位元組長度的整數倍,且每一訊息之第一訊息塊係位元組對準的。表I之第三行概述由SHA3/SHAKE擠壓階段 506輸出之訊息摘要 508之以位元為單位的大小( d)。再次應注意,不同於SHA3雜湊函數,SHAKE-128及SHAKE-256生成長度為 d '的可變長度摘要。如表I之第四行中所提及,對於由SHA-3標準指定之每一雜湊函數,最後吸收狀態 610之長度為1600位元。表I之第五行指定 c之不同值,即在SHA3/SHAKE擠壓階段 506期間在SHA3狀態置換函數之反覆之間傳遞的較低階位元之數目(參見例如 8)。最後,表I之第六行指定:SHA3狀態置換函數之每次反覆對每訊息塊採用24個回合之置換(參見例如 7A)。在對SHA-3標準之更新中或在非標準實現中,可例如藉由減小所需之置換數目(例如,減小至12)來變化置換之回合數。 表I
   訊息塊大小 r(位元) 摘要大小 d(位元) 狀態(位元) c= 1600- r(位元) 每訊息塊之置換回合
SHA3-224 1152 224 1600 448 24
SHA3-256 1088 256 1600 512 24
SHA3-384 832 384 1600 768 24
SHA3-512 576 512 1600 1024 24
SHAKE-128 1344 d' 1600 256 24
SHAKE-256 1088 d' 1600 512 24
現在參看 6,描繪 5中所描繪之SHA3吸收階段 504的時間-空間圖。如所展示,SHA3吸收階段 504接收任何任意長度的訊息 502作為輸入。如在區塊 600處所展示,填充訊息 502以獲得為 r個位元之整數倍的長度。在許多先前技術實現中,此填充經由整個訊息 502之高潛時、計算上昂貴的記憶體至記憶體移動來實現。在一些其他先前技術實現中,SHA雜湊軟體常式在使用習知SIMD指令序列將訊息塊載入至SIMD暫存器中之後填充訊息塊。儘管此等先前技術之技術可在本文中用以執行填充,但如下文參考 21A 至圖 27所詳細描述,此填充可替代地藉由根據所揭示發明之處理器暫存器(例如,寬向量暫存器檔案 316)中之硬體經由執行填充指令來高效地執行。經由執行填充指令來填充訊息 502亦允許以與SHA3吸收階段 504中之訊息塊之處理時間上重疊的方式將填充應用於訊息 502之末端。
在SHA3吸收階段 504中,提取組成經填充訊息的長度為 rn個( n為正整數)訊息塊中的每一者,且接著在尾隨低階位元中將其進行零擴展以形成 n個1600位元擴展訊息塊 602。第一訊息塊,亦即訊息塊1 602,形成由SHA-3標準定義的SHA3狀態置換函數 604之輸入。如下文參考 9 11所描述,根據所揭示發明之一個態樣,在硬體中經由執行SHA3雜湊指令來執行SHA3狀態置換函數 604。SHA3狀態置換函數 604之1600位元狀態輸出形成1600位元逐位元XOR函數 606之第一輸入,該1600位元逐位元XOR函數將經填充訊息之下一1600位元擴展訊息塊 602視為第二輸入。逐位元XOR函數 606之結果形成SHA3狀態置換函數 604之下一反覆之輸入。如所示,此程序針對訊息塊 602中之每一者反覆地繼續,直至SHA3狀態置換函數 604之最終反覆生成並輸出1600位元最後吸收狀態 610,如先前在 5之描述中所提及。
現在參考 7A,繪示 6中所繪示之SHA3置換函數 604的時間-空間圖。SHA3置換函數 604接受1600位元輸入,且接著在SHA3回合函數 704之24個回合中之第一回合中結合SHA-3標準指定之回合索引0 702來處理該1600位元輸入。此程序反覆地繼續,其中SHA3回合函數 704中之每一後續回合之處理接收前一SHA3回合函數 704之1600位元輸出及相關SHA3標準指定之回合索引 702(其為常數)作為輸入。在SHA3狀態置換函數 604內之24個回合之處理完成之後,SHA3狀態置換函數 604輸出1600位元狀態,該1600位元狀態充當至逐位元XOR函數 606之輸入,或在SA3吸收階段 504內之SHA3狀態置換函數 604之最終反覆的狀況下構成充當SHA3/SHAKE擠壓階段 506之輸入的最後吸收狀態 610
現在參看 7B,描繪 7A中所描繪之SHA3回合函數 704的時間-空間圖。如所示,SHA3回合函數 704包括SHA-3標準指定之函數序列,按次序包括在SHA-3標準中由希臘字母θ (theta)、ρ (rho)、π (pi)、χ (chi)及ϊ (iota)所指的五個函數。θ函數接收並處理至回合函數 704之1600位元輸入,且除ϊ函數之外的每個其他函數之輸出饋送下一依序函數。最後,ϊ函數處理χ函數之輸出及相關回合索引 702以產生SHA3回合函數 704之給定反覆的1600位元輸出。在先前技術中,利用兩個單指令多資料(SIMD)向量管線執行回合函數 704可佔用多達80個循環。根據本文中所揭示之發明的一個態樣,可利用下文所描述的 11之SHA3/SHAKE雜湊電路 400在處理器核心 104之單一循環中完成回合函數 704
現在參考 8,繪示 5中所繪示之SHA3/SHAKE擠壓階段 506的時間-空間圖。如先前所描述,SHA3/SHAKE擠壓階段 506接收由SHA3吸收階段 504產生的1600位元最後吸收階段 610作為輸入。為了產生用於由SHA-3標準定義之SHA3函數中之任一者的訊息摘要 508,SHA3/SHAKE擠壓階段 506首先提取最後吸收狀態 610之前 r個高階位元以形成結果塊1 800。截斷函數 802接著截斷結果塊1 800r個位元以保留形成訊息摘要 508之高階 d個位元。
為了產生用於由SHA-3標準定義的SHAKE函數中之一者的訊息摘要,結果塊1 800r個位元形成截斷函數 804之輸入之 r個高階位元。此等 r個高階位元與 n-1個額外 r位元結果塊 800串連,該等額外 r位元結果塊中之每一者係由如先前關於 7A所描述的SHA3狀態置換函數 604之反覆之輸出的 r個高階位元形成。SHA3/SHAKE擠壓階段 506之每一SHA3狀態置換函數 604接收1600位元輸入(亦即, r+ c= 1600)並生成1600位元輸出,該1600位元輸出除了SHA3狀態置換函數 604之最後反覆之外,饋送SHA3狀態置換函數 604之後續反覆。截斷函數 804截斷 r× n個輸入位元以獲得具有使用者指定長度 d '位元的訊息摘要 508
現在參看 9 10,繪示根據一個實施例的分別用於SHA3雜湊指令 900及逐位元互斥或(XOR)指令 1000之例示性格式。在一例示性實施例中,加速器單元 314經組態以回應於接收到SHA3雜湊指令 900而在硬體中利用SHA3/SHAKE雜湊電路 400來執行SHA3/SHAKE狀態置換函數,且回應於接收到逐位元XOR指令 1000而利用SIMD XOR電路 404來執行指定運算元之1024位元逐位元XOR。
在所繪示之實施例中,SHA3雜湊指令 900包括作業碼欄位 902 ,該作業碼欄位指定用於SHA3/SHAKE置換函數之特定的架構特定作業碼。SHA3雜湊指令 900另外包括一或多個暫存器欄位 904906,該一或多個暫存器欄位用於指定寬向量暫存器檔案 316內之用於SHA3/SHAKE狀態置換函數之源及目的地運算元的暫存器。舉例而言,在一個實現中,SHA3雜湊指令 900包括單一暫存器欄位 904,該暫存器欄位指定緩衝1600位元源運算元且在SHA3/SHAKE置換函數完成之後緩衝1600位元目的地運算元(其覆寫源運算元)的一對鄰近的1024位元暫存器中之第一者。在一替代實現中,SHA3雜湊指令 900包括用於指定單獨對的1024位元源及目的地暫存器的兩個暫存器欄位 904906(在此狀況下,目的地運算元並不覆寫源運算元)。
如上文所提及,在將來的對SHA-3標準之更新中或在非標準實現中,可需要控制由SHA3狀態置換函數 604應用的置換之回合數目。在此類實施例中,該回合數目的SHA3雜湊指令 900可包括直接設定置換之回合數目或參考指定置換之回合數目之暫存器的欄位。
10描繪例示性實施例,其中逐位元XOR指令包括作業碼欄位 1002,該作業碼欄位指定用於1024位元逐位元XOR函數之特定的架構特定作業碼。逐位元XOR指令 1000另外包括三個暫存器欄位 100410061008,該等暫存器欄位用於分開地指定寬向量暫存器檔案 316內之用於緩衝兩個1024位元源運算元及一個1024位元目的地運算元的1024位元暫存器。
現在,已解釋SHA3及SHAKE雜湊函數以及用於實現此等雜湊函數之部分之例示性指令,呈現用於在硬體中執行例示性SHA3雜湊函數之偽碼。在以下偽碼中,參考以下暫存器: Rr ß以位元組為單位之塊長度 RL ß以位元組為單位之訊息長度//假定RL ≥ Rr且第一塊未被填充 Ra ß訊息之起始位址 Rb ß由雜湊函數產生之訊息摘要之位址 Rd ß以位元組為單位之訊息摘要長度 Xs ß SHA3狀態               //寬向量暫存器對 Xm ß訊息塊               //寬向量暫存器對 給出此等暫存器,用於SHA3(非SHAKE)雜湊函數中之任一者的偽碼可表示如下: Xs = loadlength(Ra, Rr)     //載入訊息之第一訊息塊且初始化狀態 Xs  = sha3hash(Xs)      //執行SHA3雜湊指令以對第一訊息塊執行置換 RL - = Rr               //遞減訊息之未經處理部分之長度 Ra += Rr          //遞增至訊息中之下一訊息塊之指標 While (RL > = Rr)       //進入用於處理每一剩餘訊息塊之迴路,除訊息之最後訊息塊之外 {   Xm = loadlength(Ra, Rr)    //載入下一訊息塊 Xs = wide_xor(Xs, Xm) //執行逐位元XOR指令以組合狀態及當前訊息塊 Xs  = sha3hash(Xs)       //執行SHA3雜湊指令以對當前訊息塊執行置換 RL - = Rr           //遞減訊息之未經處理部分之長度 Ra += Rr            //遞增至下一訊息塊之指標 } Xm = loadlength(Ra, RL)   //載入最後訊息塊(若存在) (RL可為零) Xm = sha3_padding(Xm, RL, sha3-type)  //基於剩餘訊息長度及SHA3函數執行填充指令以填充訊息 Xs = wide_xor(Xs, Xm) //執行逐位元XOR指令以組合狀態及最後訊息塊 Xs = sha3hash(Xs)       //執行SHA3雜湊指令以對最後訊息塊執行置換且產生最後吸收狀態 Store_length(Xs, Rb, Rd)   //在SHA3擠壓階段中,藉由將Xs之前導Rd位元組儲存至位址Rb處之記憶體來截斷最後吸收狀態以形成訊息摘要
現在參考 11,繪示根據一個實施例的適合於執行SHA3雜湊指令 900之例示性SHA3/SHAKE雜湊電路 400的高階方塊圖。如所示,SHA3/SHAKE雜湊電路 400包括兩個1024位元雙輸入多工器 1100a1100b、兩個1024位元狀態暫存器 1102a1102b、SHA3回合電路 1106以及控制電路 1110,該控制電路回應於SHA3雜湊指令 900來控制SHA3/SHAKE雜湊電路 400之操作。
輸入多工器 1100a具有:第一輸入,其經耦合以自由SHA3雜湊指令 900識別的寬向量暫存器檔案 316中之暫存器對的第一暫存器接收1600位元輸入狀態之高階1024個位元;及第二輸入,其經耦合以自SHA3回合電路 1106接收1600位元回合回饋之高階1024個位元。輸入多工器 1100b類似地經結構化,其具有:第一輸入,其經耦合以自寬向量暫存器檔案 316中之指令指定之暫存器對中的第二暫存器接收包括1600位元輸入狀態之低階576個位元的1024位元值;及第二輸入,其耦合至SHA3回合電路 1106以接收包括1600位元回合回饋之低階576個位元的1024位元值。SHA3/SHAKE雜湊電路 400內之控制邏輯 1110將未繪示之選擇信號提供至輸入多工器 1100a1100b以使輸入多工器 1100a1100b選擇在SHA3回合0之前在其第一輸入處存在的值且選擇在SHA3回合0至SHA3回合23中之每一者之後在其第二輸入處存在的值。由輸入多工器 1100a1100b輸出的分別在狀態暫存器 1102a1102b中緩衝的值一起形成SHA3回合電路 1106之1600位元回合輸入值,該SHA3回合電路經組態以對回合輸入值執行SHA3回合函數 704,如先前參考 7A 至圖 7B所描述。
控制電路 1110經進一步組態以利用由SHA-3標準指定之正確回合索引經由SHA-3標準所需之24個回合中的每一者對SHA3回合電路 1106進行定序。在第23個回合結束之後,狀態暫存器 1102a1102b將分別保持1600位元輸出狀態之高階1024個位元及低階576個位元。控制電路 1110進一步經組態以一旦獲得輸出狀態,就確立未繪示之選擇信號,以使輸出多工器 1108在兩個連續循環中將來自狀態暫存器 1102a1102b之1600位元輸出狀態之高階位元及低階位元分別寫入至寬向量暫存器檔案 316中的指令指定之暫存器對(假定寬向量暫存器檔案 316具有單個寫入埠)。
現在參看 12,描繪根據一個實施例的用於執行SHA3雜湊指令 900之例示性程序的高階邏輯流程圖。為了易於理解,參考 11之例示性SHA3/SHAKE雜湊電路 400描述 12之程序。
12之程序開始於區塊 1200,且接著繼續進行至區塊 1202,區塊 1202繪示SHA3/SHAKE雜湊電路 400接收指定寬向量暫存器檔案 316內之運算元暫存器對的SHA3雜湊指令 900。回應於接收到SHA3雜湊指令 900,控制電路 1110使得待自寬向量暫存器檔案 316讀出運算元暫存器對之內容且經由輸入多工器 1100a1100b將該等內容載入至狀態暫存器 1102a1102b中(區塊 1204)。控制電路 1110另外初始化內部回合計數器至0 (區塊 1206)。
程序接著自區塊 1206繼續進行至區塊 1208,該區塊 1208繪示控制電路 1110引導SHA3回合電路 1106利用在狀態暫存器 1102a1102b中緩衝之回合輸入及適當的SHA-3標準指定之回合索引來執行SHA3回合函數 704之反覆。控制電路 1110另外遞增回合計數器(區塊 1208)。SHA3回合電路 1106之處理的結果由輸入多工器 1100a1100b傳回至狀態暫存器 1102 a1102b。如區塊 1210處所指示,控制邏輯 1110使SHA3回合電路 1106利用適當的回合索引執行由SHA-3標準指定的24回合處理。當24回合處理完成時,控制電路 1110確立適當選擇信號以使輸出多工器 1108將在狀態暫存器 1102a1102b中緩衝的1600位元狀態(在低階位元中經零擴展以形成兩個1024位元值)儲存至由SHA3雜湊指令 900指定之寬向量暫存器檔案 316內的運算元暫存器對中(區塊 1214)。此後, 12之程序在區塊 1216處結束。
現在參考 13,繪示根據SHA-2標準(FIPS 180-4)之訊息雜湊的時間-空間圖,該訊息雜湊在 4之實施例中由SHA2雜湊電路 402執行。以下表II概述由SHA-2標準定義且列於第一行中的六個SHA2雜湊函數之屬性。在表II中,第二行概述以位元為單位之訊息塊大小( r)。訊息塊大小 r為位元組長度的整數倍,且訊息之第一訊息塊係位元組對準的。表II之第三行概述由每一SHA2雜湊函數產生的訊息摘要之以位元為單位的固定大小( d)。表II之第四行指定每一SHA2雜湊函數之狀態之以位元為單位的大小,且表II之第五行指示每一SHA2雜湊函數中所採用之處理的回合數目(亦即,64或80) (參見例如 14)。最後,表II之第六行指定用於每一SHA2雜湊函數之以位元為單位的字大小。應注意,對於所有變體,狀態大小為字大小之8倍(亦即,包含8個字),且訊息塊之大小為字之大小的16倍(亦即,包含16個字)。如下文所描述,根據所揭示發明之一個態樣,憑藉應用於SHA2-224及SHA2-256雜湊函數之字的訊息擴展沿著相同資料流來處理採用32位元字大小之SHA2雜湊函數及採用64位元字大小之SHA2雜湊函數,如下文參考 15所描述。 表II
   訊息塊大小 r(位元) 摘要大小 d(位元) 狀態(位元) 回合 字大小 w(位元)
SHA2-224 512 224 256 64 32
SHA2-256 512 256 256 64 32
SHA2-384 1024 384 512 80 64
SHA2-512 1024 512 512 80 64
SHA2-512/224 1024 224 512 80 64
SHA2-512/256 1024 256 512 80 64
13中所展示,SHA2雜湊函數 1300接收任何任意長度(例如,長度可能為百萬位元組)之訊息 1302作為一個輸入。如在區塊 1304處所展示,填充訊息 1302以獲得為 r個位元之整數倍的長度。如上文參考 6所論述,此填充可藉由處理器暫存器(例如,寬向量暫存器檔案 316)中之硬體而非經由執行填充指令而進行記憶體移動來高效地執行。經由執行填充指令來填充訊息 1302,且特定言之填充訊息 1302之最後訊息塊,亦允許以SHA2雜湊函數 1300對訊息塊之處理在時間上重疊的方式將填充應用於訊息 1302之末端。組成藉由區塊 1304產生之經填充訊息的長度為r(其中 r= 16× w)的 n個( n為正整數)訊息塊中之每一者經提取以形成 n個16× w位元訊息塊 1306中之一者。
除了訊息 1302以外,SHA2雜湊函數 1300亦接收8× w位元之SHA-2指定之常數值作為輸入。如此項技術中已知,可自架構式暫存器檔案 300存取之此常數值,在SHA2雜湊函數之間變化且形成8× w位元初始狀態 1308。初始狀態 1308及第一訊息塊(亦即,訊息塊1 1306)形成由SHA-2標準定義之SHA2塊雜湊函數1 1310之兩個輸入。如下文參考 16 17所描述,根據所揭示發明之一個態樣,在硬體中經由執行SHA2雜湊指令來執行SHA2塊雜湊函數 1310。由SHA2塊雜湊函數1 1310輸出之8× w位元狀態形成SHA2塊雜湊函數2 1310之第一輸入,該SHA2塊雜湊函數2 1310將下一16× w位元訊息塊2 1306視為第二輸入。SHA2塊雜湊函數2 13 1 0之結果形成SHA2塊雜湊函數 1310之下一反覆之輸入。如所示,此程序針對訊息塊 602中之每一者反覆地繼續,直至SHA2塊雜湊函數 1310之最終第 n次反覆生成並輸出8× w位元最後狀態,該8× w位元最後狀態藉由截斷函數 1312截斷以產生具有 d個位元之訊息摘要 1314
現在參看 14,描繪 13中所繪示之SHA2塊雜湊函數 1310的時間-空間圖。SHA2塊雜湊函數 1310接受16× w位元訊息塊 1306,且如在區塊 1420處所展示,初始化針對訊息塊 1306之16× w位元訊息排程。SHA2塊雜湊函數 1310接著經由訊息排程回合函數 1400中之 n個回合之處理來處理16× w位元訊息排程,其中回合1至n-2中之每一者的16× w位元輸出充當至下一回合之訊息排程處理的輸入。
如所示,SHA2塊雜湊函數 1310亦接收8× w位元當前雜湊狀態(亦即,初始狀態 1308或先前SHA2塊雜湊函數 1310之輸出)作為輸入。如區塊 1406處所指示,SHA2塊雜湊函數 1310將此8× w位元當前雜湊狀態分割成8 w位元變數 ah。SHA2塊雜湊函數 1310接著藉由更新回合函數 1404經由 n個回合處理來處理當前雜湊狀態。初始更新回合0 1404將SHA-2指定之 w位元回合密鑰0 1402及訊息排程之16× w位元初始化 1420w個高階位元視為額外輸入。更新回合函數 1404之每一接續反覆將由更新回合函數 1404之先前反覆生成的狀態、訊息排程回合函數 1400之對應反覆的16× w位元輸出之 w個高階位元以及SHA-2指定之 w位元回合密鑰 1402視為輸入。由更新回合函數 n-1 1404輸出之雜湊狀態藉由8× w位元進位傳播加法函數 1410添加至輸入雜湊狀態以生成下一雜湊狀態。
現在參考圖 15,繪示根據一例示性實施例的用於SHA2雜湊函數之訊息擴展。如上文參考表II及 13所提及,本發明之實施例較佳地藉由擴展採用較小字大小之彼等SHA2雜湊函數的訊息字及初始雜湊狀態來支援沿著共同資料路徑的不同字大小 w之SHA2雜湊函數之處理。此擴展可例如在 13之區塊 13041308處執行。 15繪示一特定實例,其中SHA2-224或SHA2-256輸入訊息 1500之十六個32位元字 1502中的每一者經擴展以形成輸出訊息 1504之十六個64位元雙字 1506中的對應一者。在此實例中,每一64位元雙字 1506係藉由將64位元雙字 1506之高階一半中之輸入訊息 1500之32位元字與雙字 1506之低階一半中之32位元零字 1508串連而形成。所得輸出訊息 1504可接著以與採用64位元字之訊息相同的方式由SHA2雜湊電路處理。
現在參看 16,描繪根據一個實施例的用於SHA2雜湊指令 1600之例示性格式。在一例示性實施例中,加速器單元 314經組態以回應於接收到SHA2雜湊指令 1600而在硬體中利用SHA2雜湊電路 402執行SHA2塊雜湊函數 1310
在所繪示之實施例中,SHA2雜湊指令 1600包括作業碼欄位 1602 該作業碼欄位指定用於SHA2塊雜湊函數之特定的架構特定作業碼。SHA2雜湊指令 1600另外包括一或多個運算元暫存器欄位 16041606,該一或多個運算元暫存器欄位用於指定寬向量暫存器檔案 316內之用於SHA2塊雜湊函數之源及目的地運算元的運算元暫存器。舉例而言,在一個實現中,SHA2雜湊指令 1600包括暫存器欄位 1604,該暫存器欄位指定緩衝輸入當前雜湊狀態且在SHA2塊雜湊函數完成之後緩衝輸出當前雜湊狀態(其覆寫輸入當前雜湊狀態)的1024位元暫存器。另外,SHA2雜湊指令 1600包括緩衝待處理之當前訊息塊的暫存器欄位 1606。SHA2雜湊指令 1600進一步包括模式欄位 1608,該模式欄位指示待執行之SHA2雜湊函數是採用32位元字抑或64位元字。
現在,已解釋SHA2雜湊函數及用於實現SHA2雜湊函數之部分之例示性指令,呈現用於在硬體中執行例示性SHA2雜湊函數(亦即,SHA2-512)之偽碼。在SHA2-512雜湊函數中,每一訊息塊之長度為1024個位元,且雜湊狀態及訊息摘要之長度各自為512個位元。在以下偽碼中,參考以下暫存器: Rl ß以位元為單位之訊息長度 RL ß以位元組為單位之訊息長度;假定≥ 128個位元組,因此第一訊息塊未被填充 Ra ß訊息之起始位址 Ri ß初始狀態之位址 Rb ß由雜湊函數產生之訊息摘要之位址 Rd ß以位元組為單位之訊息摘要長度 Xs ßSHA2狀態                //寬向量暫存器 Xm ß當前訊息塊      //寬向量暫存器
給出此等暫存器,用於執行SHA2-512雜湊函數之偽碼可表示如下: Xs = load(Ri, 64)                     //載入64個位元組之初始狀態 Xm = load(Ra, 128)                  //載入第一(完整)訊息塊 Xs  = sha2hash(Xs, Xm, 64-bit)  //執行SHA2雜湊指令以執行塊雜湊函數 RL - = 128                       //遞減待處理之訊息長度 Ra += 128                       //前進指標至下一訊息塊 While (RL > = 128)                  //經由剩餘訊息塊迴路,除了最後訊息塊之外 {   Xm = load(Ra, 128)             //載入下一訊息塊(全大小) Xs  = sha2hash(Xs, Xm, 64-bit)     //執行SHA2雜湊指令以執行塊雜湊函數 RL - = 128                          //遞減待處理之訊息長度 Ra += 128                            //前進指標至下一訊息塊 } Xm = loadlength(Ra, RL)   //載入最後訊息塊(若存在) (RL可為零) Xm = sha2_EOM_pad(Xm, RL)  //將SHA2 EOM位元組附加至訊息塊之末端 If (RL > 111) then                    //若填充跨越兩個訊息塊,則 {  Xs  = sha2hash(Xs, Xm, 64-bit)      //執行SHA2雜湊指令以執行塊 Xm = force-to-zero                //雜湊函數且將最後訊息塊置零 } Xm = sha2_EOB_pad(Xm, RI)    //在經填充訊息之最後塊中插入EOB Xs  = sha2hash(Xs, Xm, 64-bit)  //執行SHA2雜湊指令以對最後訊息塊執行塊雜湊函數 Store(Xs, Rb, 64)                     //截斷狀態至Xs之前導64個位元組以獲得訊息摘要且在位址Rb處儲存至記憶體
現在參考 17,繪示適合於執行SHA2雜湊指令 1600 4之SHA2雜湊電路 402之例示性實施例的高階方塊圖。如所示,SHA2雜湊電路 402包括512位元雙輸入狀態多工器 1702a、1024位元雙輸入訊息多工器 1702b、512位元狀態暫存器 1704a、1024位元訊息塊暫存器 1704b、更新工作狀態電路 1708、訊息排程回合電路 1710及控制電路 1720,該控制電路回應於SHA2雜湊指令 1600而控制SHA2雜湊電路 402之操作。
在此實例中,狀態多工器 1702a之第一輸入經耦合以自寬向量暫存器檔案 316中之由SHA2雜湊指令 1600之暫存器欄位 1604指定的暫存器接收保持於暫存器之512高階位元中的當前雜湊狀態。狀態多工器 1702a之第二輸入耦接至更新工作狀態電路 1708之輸出。訊息多工器 1702b經類似地組態,其具有:第一輸入,其經耦合以自寬向量暫存器檔案 316中之由SHA2雜湊指令 1600之暫存器欄位 1606指定的暫存器接收訊息塊;及第二輸入,其經耦合以自訊息排程回合電路 1710接收1024位元回合回饋。SHA2雜湊電路 400內之控制邏輯 1720將未繪示之選擇信號提供至多工器 1702a1702b,以使多工器 1702a1702b選擇在更新回合0函數 1404之前存在於第一輸入處的值,且選擇在更新回合0函數至SHA2塊雜湊n函數中之每一者之後存在於第二輸入處的值。分別在狀態暫存器 1704a及訊息塊暫存器 1704b中暫時緩衝由多工器 1702a1702b輸出之值。在訊息塊暫存器 1704b中緩衝之訊息塊形成訊息排程回合電路 1710之輸入,該訊息排程回合電路實現 14之訊息排程回合函數 1400。來自訊息塊暫存器 1704b之64高階位元及狀態暫存器 1704a中之512位元狀態形成更新工作狀態電路 1708之兩個輸入,該更新工作狀態電路經組態以執行如先前參考 14所描述之更新回合函數 1404
控制電路 1720經進一步組態以利用由SHA-2標準指定之正確回合索引經由 n個回合中之每一者對更新工作狀態電路 1708進行定序。在最後回合 n-1結束之後,狀態暫存器 1704a將保持512位元雜湊狀態。控制電路 1720經進一步組態以一旦獲得輸出雜湊狀態,就使單指令多資料(SIMD)加法器 1712將來自狀態暫存器 1704a之雜湊狀態與自寬向量暫存器欄位 316讀取之輸入雜湊狀態相加,且將作為下一雜湊狀態之結果儲存回至寬向量暫存器檔案 316,如上文關於 14之加法函數 1410所描述。熟習此項技術者將瞭解,在不同實現中,SIMD加法器 1712可實現為SHA2雜湊電路 402之專用組件或實現為可(例如)由多個雜湊電路共用之單獨管線。
現在參看 18,描繪根據一個實施例的來自 17之例示性更新工作狀態電路 1708之更詳細方塊圖。在此實施例中,在狀態暫存器 1704a內緩衝的作為更新工作狀態電路 1708之一個輸入被接收的512位元狀態,經分割成八個64位元變數,其在SHA-2標準中被稱作變數 ah,如區塊 1800處所展示。更新工作狀態電路 1708包括:兩個西格瑪函數電路,即SHA2西格瑪0電路 1802及SHA2西格瑪1電路 1806,以及SHA2 MA電路 1804及SHA2 CH電路 1808,其各自執行由SHA-2標準定義之各別函數。更新工作狀態電路 1708另外包括三個64位元加法器 181018121814。SHA2西格瑪0電路 1802將具有 n(n1, n2, n3) = (28, 34, 39)及 m(m1, m2, m3) = (2, 13, 22)的西格瑪函數應用於變數 a以產生加法器 1812之第一輸入。藉由SHA2 MA電路 1804處理變數 abc以產生加法器 1812之第二輸入。SHA2西格瑪1電路 1806將具有 n(n1, n2, n3) = (14, 18, 41)及 m(m1, m2, m3) = (6, 13, 22)的西格瑪函數應用於變數 e以產生加法器 1810之五個輸入當中的第一輸入。藉由SHA2 CH電路 1808處理變數 efg以產生加法器 1810之第二輸入。加法器 1810將相關回合密鑰、回合訊息塊及變數 d加至此兩個輸入以產生形成加法器 1814之第一輸入及加法器 1812之第三輸入的總和。
更新工作狀態電路 1708生成由八個64位元變數 a 'h '組成的512位元結果狀態 1816。結果狀態 1816之變數 a '係藉由加法器 1812之輸出而形成,變數 b 'c 'd '分別由輸入狀態 1800之變數 abc形成,且變數 f 'g 'h '分別由輸入狀態 1800之變數 efg形成。剩餘變數 e '係藉由加法器 1810之輸出與輸入狀態 1800之變數 d的總和而形成。
應注意,上文參考 15所描述的SHA-2訊息之字的32位元至64位元擴展並不影響SHA2 MA電路 1804、SHA2 CH電路 1808及模組化加法器 18121814之設計(對其透明)。採用32位元字之SHA2訊息的尾隨零擴展僅影響SHA2西格瑪電路 18021806,如下文參考 19更詳細描述。
19為SHA2西格瑪電路 1900之例示性實施例的更詳細方塊圖,該SHA2西格瑪電路可用以實現 18之SHA2西格瑪0電路 1802及SHA2西格瑪1電路 1806。SHA2西格瑪電路 1900接收包括32個高階位元(位元0至31)及32個低階位元(位元32至63)之64位元輸入變數 1902
SHA2西格瑪電路 1900包括64位元旋轉電路 1904a,該64位元旋轉電路將64位元輸入變數 1902旋轉n1個位元(亦即,對於SHA2西格瑪0電路 1802為28個位元且對於SHA2西格瑪1電路 1806為14個位元)以獲得多工器 1910a之第一64位元輸入。SHA2西格瑪電路 1900另外包括32位元旋轉電路 1906a,該32位元旋轉電路將輸入變數 1902之32個高階位元旋轉m1個位元(亦即,對於SHA2西格瑪0電路 1802為2個位元且對於SHA2西格瑪1電路 1806為6個位元),以在與輸入變數 1902之32個低階位元串連時獲得多工器 1910a之第二64位元輸入。多工器 1910a基於由相關SHA2雜湊指令 1600之模式欄位 1608判定的模式信號而在其第一輸入與第二輸入之間進行選擇。亦即,若模式信號指示模式欄位 1608經設定為指示利用64位元字之SHA2雜湊函數,則多工器 1910a選擇第一輸入,且若模式信號指示模式欄位 1608經設定為指示利用32位元字之SHA2雜湊函數,則多工器 1910a選擇第二輸入。
SHA2西格瑪電路 1900另外包括64位元旋轉電路 1904b,該64位元旋轉電路將64位元輸入變數 1902旋轉n2個位元(亦即,對於SHA2西格瑪0電路 1802為34個位元且對於SHA2西格瑪1電路 1806為18個位元)以獲得多工器 1910b之第一64位元輸入。SHA2西格瑪電路 1900亦包括32位元旋轉電路 1906b,該32位元旋轉電路將輸入變數 1902之32個高階位元旋轉m2個位元(亦即,對於SHA2西格瑪0電路 1802及SHA2西格瑪1電路 1806兩者為13個位元),以在與輸入變數 1902之32個低階位元串連時獲得多工器 1910b之第二64位元輸入。多工器 1910b基於模式信號在其第一輸入與第二輸入之間進行選擇。特定言之,若模式信號指示模式欄位 1608經設定為指示利用64位元字之SHA2雜湊函數,則多工器 1910b選擇第一輸入,且若模式信號指示模式欄位 1608經設定為指示利用32位元字之SHA2雜湊函數,則多工器 1910b選擇第二輸入。
SHA2西格瑪電路 1900亦包括64位元旋轉/移位電路 1908a,該64位元旋轉/移位電路將64位元輸入變數旋轉及移位n3個位元(亦即,對於SHA2西格瑪0電路 1802為39個位元且對於SHA2西格瑪1電路 1806為41個位元)以獲得多工器 1910c之第一64位元輸入。SHA2西格瑪電路 1900另外包括32位元旋轉/移位電路 1908b,該32位元旋轉/移位電路將輸入變數 1902之32個高階位元旋轉及移位m3個位元(亦即,對於SHA2西格瑪0電路 1802及SHA2西格瑪1電路 1806兩者為22個位元),以在與輸入變數 1902之32個低階位元串連時獲得多工器 1910c之第二64位元輸入。多工器 1910c基於模式信號在其第一輸入與第二輸入之間進行選擇。如同多工器 1910a1910b,若模式信號指示模式欄位 1608經設定為指示利用64位元字之SHA2雜湊函數,則多工器 1910c選擇第一輸入,且若模式信號指示模式欄位 1608經設定為指示利用32位元字之SHA2雜湊函數,則多工器 1910c選擇第二輸入。
多工器 1910a1910b1910c之64位元輸出形成三輸入64位元逐位元XOR電路 1912之輸入,該三輸入64位元逐位元XOR電路在其三個輸入上執行逐位元XOR以生成64位元輸出 1914。熟習此項技術者應瞭解,在SHA2西格瑪電路 1900之一些實施例中,旋轉電路 1904a1904b1906a1906b以及旋轉/移位電路 1908a1908b之功能可藉由適當佈線實現,從而允許SHA2西格瑪電路 1900藉由三個多工器 1910a1910c及3向逐位元XOR電路 1912且無需顯式旋轉及移位電路系統來實現。
現在參看 20,描繪根據一個實施例的用於執行SHA2雜湊指令 1600之例示性程序的高階邏輯流程圖。為了易於理解,參考 17 19中所繪示之SHA2雜湊電路 402之例示性實施例來描述 20之程序。
20之程序開始於區塊 2000,且接著繼續進行至區塊 2002,區塊 2002繪示SHA2雜湊電路 402接收指定特定SHA2模式(亦即,32位元或64位元字大小)以及寬向量暫存器檔案 316內之狀態暫存器及訊息塊暫存器的SHA2雜湊指令 1600。回應於接收到SHA2雜湊指令 1600,控制電路 1720使得待自寬向量暫存器檔案 316讀出512位元狀態及1024位元訊息塊並分別經由多工器 1702a 1702b將其載入至狀態暫存器 1704a及訊息塊暫存器 1704b中(區塊 2002)。控制電路 1720另外初始化內部回合計數器至0 (區塊 2004)。
程序接著自區塊 2004繼續進行至區塊 2006,區塊 2006繪示控制電路 1720引導訊息排程回合電路 1710利用在訊息塊暫存器 1704b中緩衝之訊息塊來執行訊息排程回合函數 1400之反覆。另外,控制電路 1720引導更新工作狀態電路 1708基於適當回合索引、訊息塊暫存器 1704b之64高階位元及來自狀態暫存器 1704a之輸入雜湊狀態來執行更新回合函數 1404之反覆。更新工作狀態電路 1708及訊息排程回合電路 1710之處理結果分別由多工器 1702a1702b傳回至暫存器 1704a1704b。控制電路 1110另外使回合計數器前進。在區塊 2010處,控制邏輯 1720藉由參考回合計數器判定SHA2雜湊電路 402是否已執行由SHA-2標準指定之最後回合個處理。如表II中所提及,SHA2雜湊電路 402針對採用32位元字之SHA2雜湊函數執行64個回合之處理,且針對採用64位元字之SHA2雜湊函數執行80個回合之處理。若控制電路 1720在區塊 2010處判定仍有至少一個額外回合之處理待執行,則程序返回至區塊 2006,區塊 2006已被描述。然而,回應於在區塊 2010處判定所有回合之處理完成,控制電路 1720使得先前狀態再次自寬向量暫存器檔案 316被讀取且藉由SIMD加法器 1712添加至在狀態暫存器 1704a中緩衝之最終狀態(區塊 2012)。控制電路 1720接著將所得下一狀態之儲存引導回至寬向量暫存器檔案 316中(區塊 2014)。此後, 20之程序在區塊 2016處結束。
如上文參考 6之區塊 600 13之區塊 1304所論述,由SHA2及SHA3雜湊函數處理之訊息經填充以產生長度為塊長度 r個位元之偶數倍的訊息。 21A描繪例示性未經填充訊息 2100,其具有 L個位元之總長度且包括 n個訊息塊。其中,前 n-1個訊息塊包括 r個位元,但最終訊息塊 n包括 k個位元,其中 kr。如 21B中所展示,在一般狀況下,訊息 2100藉由將 r- k個填充位元附加至訊息塊 n之末端來填充,從而產生長度皆為 r個位元的 n個訊息塊。
為獲得經填充訊息所附加的填充位元之內容可取決於所考慮之雜湊函數而變化。舉例而言,在本文中所論述之SHA2及SHA3/SHAKE雜湊演算法中,填充位元將包括標記訊息之未經填充部分之末端(亦即,訊息末端(EOM)標記)及經填充訊息之最後塊之末端(亦即,塊末端(EOB)標記)兩者的位元組。如下文進一步所解釋,在一些狀況下,包括EOM及EOB標記之填充位元可全部包括於含有最終訊息位元組之訊息塊內;在其他狀況下,填充位元之添加可需要將額外訊息塊附加至訊息。在任一狀況下,所揭示發明較佳地在處理器暫存器中經由執行一或多個指令而非經由在記憶體中之兩個位置之間傳送訊息的高潛時記憶體移動操作來執行訊息填充。
在至少一些架構中,載入儲存單元 224、記憶體控制器 112及/或系統互連件 110並不經建構以支援系統記憶體 114與寬向量暫存器檔案 116之間的冗長資料物件(例如,完整的 r位元SHA3/SHAKE及SHA2訊息塊)之資料傳送。在此類架構中,訊息塊以多個較小組塊經傳送至較窄暫存器檔案中,且接著自較窄暫存器檔案經傳送至寬向量暫存器檔案 316之一或多個寬向量暫存器中。舉例而言, 22A繪示將SHA3/SHAKE訊息塊 n組合於包括256位元暫存器r0至rS 301的架構式暫存器檔案 300中的實例。在此實例中,(例如)藉由 2之載入儲存單元 224執行載入長度指令以將1152位元SHA3-224訊息塊 n之五個256位元組塊載入至暫存器r0至r7中且將不含訊息資料之任何暫存器位元組置零。在給出SHA3-224中之訊息塊的1152位元長度的情況下,訊息塊 n內之訊息位元組至多將完全填充暫存器r0至r3加上暫存器r4之前導128個位元(當然,未經填充訊息之最終訊息塊可含有少於 r個位元)。藉由自動執行載入長度指令抑或藉由執行標準載入指令,可將暫存器r4之至少剩餘128位元以及所有暫存器r5至r7置零。(僅適用於所支援之訊息塊長度中之任一者的通用SHA3函數才需要用零填充暫存器r6及r7)。可接著藉由資料傳送電路 406或傳送單元 320執行額外資料傳送指令,以將暫存器r0至r7之內容傳送至寬向量暫存器檔案 316之暫存器R0及R1 317中,該寬向量暫存器檔案包括各自具有如上文所論述的1024位元之例示性寬度的暫存器R0至RT。在替代實現中,可藉由載入架構式暫存器檔案 300內之四個暫存器 301以緩衝組塊n1至n4且接著在後續循環上再使用相同暫存器 301來緩衝組塊n5至n8來達成相同的結果。
22B描繪類似實例,其展示在將訊息塊組合於架構式暫存器檔案 300之暫存器 301中之後將1024位元SHA2訊息塊 n傳送至寬向量暫存器檔案 316中之寬向量暫存器 317。在此實例中,(例如)藉由 2之載入儲存單元 224執行載入長度指令以將SHA2訊息塊 n之四個256位元組塊載入至架構式暫存器檔案 300之暫存器r2至r5中且將不含訊息資料之任何暫存器位元組置零。可接著藉由資料傳送電路 406執行額外資料傳送指令,以將暫存器r2至r5之內容傳送至寬向量暫存器檔案 316之暫存器R0 317中。在替代實現中,可藉由載入架構式暫存器檔案 300內之兩個暫存器 301以緩衝組塊n1及n2且接著在後續循環上再使用相同暫存器 301來緩衝組塊n3至n4來達成相同的結果。
在至少一些較佳實施例中,針對SHA3/SHAKE或SHA2訊息之所有訊息塊執行用於將訊息塊載入至 22A 22B中所給出的寬向量暫存器檔案 316中的程序,該等所有訊息塊包括訊息塊 n,其為未經填充訊息之最後訊息塊。如下文所解釋,可接著經由執行一或多個指令至少部分地在寬向量暫存器檔案 316內填充訊息之末端。
23A 23D描繪針對各種長度之SHA3/SHAKE訊息的各種填充狀況。根據SHA-3標準,每一訊息必須包括標記EOM之EOM填充。在SHA3標準下,EOM填充具有用於SHA3雜湊函數之固定值x06及用於SHAKE雜湊函數之固定值x1F。經填充訊息內EOM填充之位置取決於訊息長度而變化,訊息長度在編譯時間常常係未知的。SHA-3標準進一步授權每一經填充訊息之最後位元組為固定值EOB填充位元組。
23A中所展示,若SHA3/SHAKE訊息之最後訊息塊 2300包括不含有訊息資料的多於兩個位元組,則EOM填充位元組 2302緊接在最後訊息位元組 2306之後被插入至相關寬向量暫存器 317之置零位元組中,且EOB填充位元組 2304作為經填充訊息塊之最後位元組被插入至寬向量暫存器 317之置位元組中。
23B繪示類似第二狀況,其中SHA3/SHAKE訊息之最後訊息塊 2300 '包括並不含有訊息資料之確切兩個置零位元組。在此狀況下,最後訊息塊 2300 '之最後兩個置零位元組用EOM填充位元組 2302,接著是EOB填充位元組 2304替換。
23C描繪第三狀況,其中SHA3/SHAKE訊息之最後訊息塊 2300 ''在最後訊息位元組 2306之後僅包括單一置零訊息位元組。在此狀況下,如下文所描述的填充指令之執行會使EOM及EOB填充值一起被「或」(OR)運算且插入於經填充訊息塊 2300 ''之最終位元組中作為EOM/EOB填充位元組 2308
23D繪示最終狀況,其中SHA3/SHAKE訊息之最後訊息位元組 2306為訊息塊 2310之最後位元組。因為訊息塊 2310在此狀況下不包括所需EOM及EOB填充之容量,所以將額外置零訊息塊 2312附加至訊息(例如,經由執行載入長度指令)。EOM填充位元組 2302作為第一位元組被插入至此置零訊息塊 2312中,且EOB填充位元組 2304作為最後位元組被插入至此置零訊息塊 2312中。應注意,在 23A 23D中所描繪之四種狀況中的每一者中,可有利地藉由單一填充指令應用EOM填充及EOB填充兩者,此係由於EOM填充及EOB填充兩者始終屬於同一訊息塊內。亦應瞭解,儘管 23A 23D描繪將填充應用於包括整數數目個訊息位元組之訊息,但填充可類似地應用於不包括整數數目個位元組的位元訊息。
在一個實施例中,可利用三個指令來實現如 23A 23D中所展示的任意長度之SHA3/SHAKE訊息之填充。此等指令包括:(1)載入長度指令,其將經填充訊息之最終訊息塊分級於架構式暫存器檔案 300中之指定暫存器 301中;(2)傳送指令,其將訊息塊自架構式暫存器檔案 300中之暫存器 301傳送至如 22A中所展示之寬向量暫存器檔案 316中之一或多個寬向量暫存器 317;及(3)填充指令,其在保持於寬向量暫存器 317中之經填充SHA3/SHAKE訊息之最終訊息塊中的適當位元組位置處插入EOM及EOB填充。當然,在替代實現中,有可能利用兩個不同指令將EOM填充及EOB填充插入至最終訊息塊中。然而,對於諸如通常用於後量子加密方案中之單塊訊息的單塊訊息,添加額外填充指令會增加潛時且不合需要地降低雜湊效能。
24A 24D描繪針對各種長度之SHA2訊息的各種填充狀況。根據SHA-2標準,每一訊息必在緊接在最後訊息位元組之後的位元組中必須包括具有值x80之一個EOM填充位元組。EOM填充位元組在經填充訊息內之位置因此取決於訊息長度而變化。SHA-2標準進一步授權,最後兩個字(亦即,取決於所討論之SHA2雜湊函數,兩個32位元字抑或兩個64位元字(參見表II))含有指定以位元為單位的未經填充訊息之長度的EOB填充。
24A中所繪示之第一狀況下,SHA2訊息之最後訊息塊 2400包括不含有訊息資料的多於兩個字加一個位元組。在此狀況下,最後訊息塊 2400藉由緊接在最後訊息位元組 2406之後將EOM填充位元組 2 4 02插入至相關寬向量暫存器 317之置零位元組中且藉由插入兩個EOB填充字 2404作為最後訊息塊 2400之最後兩個字來填充。
24B繪示類似第二狀況,其中SHA2訊息之最後訊息塊 2400 '包括並不含有訊息資料之確切兩個字加一個位元組。在此狀況下,最後訊息塊 2400 '藉由緊接在最後訊息位元組 2406之後將EOM填充位元組 2402插入至相關寬向量暫存器 317之置零位元組中且插入兩個EOB填充字 2404作為最後訊息塊 2400之最後兩個字來填充。
24C描繪第三狀況,其中未經填充SHA2訊息之最後訊息塊 2400 ''包括不含訊息資料的過少位元組以適應EOM填充位元組 2402及兩個EOB填充字 2404。在此狀況下,SHA2訊息係藉由緊接在最後訊息位元組 2406之後將EOM填充位元組 2402插入至相關寬向量暫存器 317之置零位元組中來填充。因為EOB填充字 2404並不適合於訊息塊 2400 ''內,所以將額外置零訊息塊 2408附加至訊息(例如,經由執行載入長度指令)。EOB填充字 2404接著作為訊息塊 2408之最後兩個字被插入。
24D繪示第四狀況,其中SHA2訊息之最後訊息位元組 2406形成完整訊息塊 2410之最後位元組。因為訊息塊 2410不包括EOM或EOB填充之容量,所以將額外置零訊息塊 2412附加至SHA2訊息。額外訊息塊 2412包括EOM填充位元組 2 4 02作為訊息塊 2412之第一位元組,接著是多個置零位元組,且最後在訊息塊 2412之末端處為兩個EOB填充字 2404
在一個實施例中,可利用少至四個指令來實現任意長度之SHA2訊息之填充。此等指令包括:(1)載入長度指令,其將SHA2訊息之最終訊息塊置放於架構式暫存器檔案 300中之指定暫存器 301中且將不含訊息位元組之任何暫存器位元組置零;(2)插入字指令,其將兩個EOB填充字 2404置放於架構式暫存器檔案 300中之暫存器 301之適當位元組中以標記經填充訊息之末端;(3)傳送指令,其將緩衝訊息塊的暫存器 301之內容自架構式暫存器檔案 300傳送至寬向量暫存器檔案 316中之寬向量暫存器 317;及(4)填充指令,其將EOM填充位元組 2402插入寬向量暫存器 317中之適當位置處。在此實施例中,填充指令之執行會插入EOM填充位元組 2402而不插入EOB填充字 2404,此係因為(1) EOM填充位元組 2402及EOB填充字 2404可位於不同訊息塊中,且(2) EOB填充字 2404可利用現有插入字指令高效地定位於架構式暫存器檔案 300內之適當暫存器 301中。當然,在一替代實施例中,EOM填充位元組 2402及EOB填充字 2404兩者可應用於架構式暫存器檔案 300之暫存器 301中的SHA2訊息塊。
現在參考 25,繪示根據一個實施例之例示性填充指令 2500。在至少一個實施例中,例示性填充指令 2500可由加速器單元 314在資料傳送電路 406內執行以針對SHA3/SHAKE訊息塊及SHA2訊息塊兩者執行填充。
在所繪示之實例中,填充指令 2500包括指定用於訊息填充指令之架構特定作業碼的作業碼欄位 2502。填充指令另外包括用於指定填充操作之源及目的地運算元之儲存位置的兩個暫存器欄位 25042506。舉例而言,暫存器1欄位 2504可識別寬向量暫存器檔案 316內緩衝待填充之訊息塊的目標寬向量暫存器 317,且暫存器2欄位 2506可指定架構式暫存器檔案 300中保持以位元組為單位之剩餘訊息長度的暫存器 301
填充指令 2500進一步包括提供用以填充訊息之資訊的模式欄位 2508。在一個例示性實施例中,模式欄位 2508包括至少三個子欄位,包括雜湊識別符(HID)子欄位 2510、塊長度(BL)子欄位 2512及擴展(E)子欄位 2514。HID子欄位 2510指示被應用於訊息塊的雜湊函數之類型。舉例而言,在一個實現中,HID子欄位 2510可包括指定以下雜湊類型中之一者的兩個位元:SHA3、SHAKE、SHA2 (64位元字)及SHA2 (32位元字)。BL子欄位 2512指示(可能在與HID子欄位 2510一起被解譯時)以位元組為單位之訊息塊的長度。E子欄位 2514指示由暫存器1欄位 2504指定之寬向量暫存器 317是保持訊息塊之前導區段S0抑或尾隨區段S1。舉例而言,在寬向量暫存器 317為1024位元寬的一實施例中,若由暫存器1欄位 2504指定之寬向量暫存器 317並不保持訊息塊之尾隨區段,則E子欄位 2514可具有值b0,且若經指定寬向量暫存器 317保持訊息塊之尾隨區段,則E子欄位 2514可具有值b1。當然,在寬向量暫存器 317具有不同寬度(例如,512個位元)之其他實施例中,E子欄位 2514可包括額外位元以指定額外暫存器區段。
現在參看 26,繪示根據一個實施例之例示性填充電路 2600。可實現為例如加速器單元 314之資料傳送電路 406之一部分的填充電路 2600,回應於如 25中所展示的填充指令 2500之執行而填充保持於目標寬向量暫存器中之訊息區段S1。所繪示之實例假定寬向量暫存器檔案 316具有1024位元寬向量暫存器 317
在此例示性實施例中,填充電路 2600包括選擇EOM電路 2602,該選擇EOM電路基於由填充指令 2500之HID子欄位 2510指定之雜湊函數來選擇EOM填充位元組 23022402(亦即,eom_byte)之值。填充電路 2600亦包括選擇EOB電路 2604,該選擇EOB電路基於HID子欄位 2510以類似方式選擇待藉由填充指令 2500插入之EOB填充位元組(亦即,eob_byte)之值。在所描述之實施例中,對於SHA3/SHAKE雜湊函數,選擇EOB電路 2604選擇由SHA-3標準指定之固定eob_byte值,該值含於由暫存器2欄位 2506指示之暫存器中。對於SHA2雜湊函數,選擇EOB電路 2604選擇零eob_byte,此係因為EOB填充字 2404在此實施例中由單獨指令插入。填充電路 2600進一步包括選擇BL大小電路 2606,該選擇BL大小電路基於填充指令 2500之HID欄位 2510及BL欄位 2512選擇並輸出8位元塊長度值。
藉由選擇BL大小電路 2606輸出之8位元塊長度值由EOB賦能電路 2608接收,該EOB賦能電路包括比較器 2610、解碼器 2612及逐位元「及」(AND)電路 2614。8位元塊長度值之高階位元指示訊息塊之長度是否超過1024位元寬向量暫存器 317之寬度(如將(例如)針對SHA3-224、SHAKE-128以及SHAKE 256之狀況)。塊長度之低階7位元形成塊長度大小(bl_size),其指示包含在由暫存器1欄位 2504識別之目標寬向量暫存器 317中緩衝的訊息塊之區段的位元組之數目。解碼器 2612解碼7位元bl_size值以獲得目標寬向量暫存器 317內之訊息塊之末端之位置的128位元表示。比較器 2610比較8位元塊長度之高階位元與填充指令 2500之E子欄位 2514,以形成是否將EOB填充添加至在目標寬向量暫存器中緩衝的訊息塊之區段(亦即,目標寬向量暫存器 317是否緩衝訊息塊之尾隨區段S1)的1位元指示。此1位元指示接著藉由逐位元「及」電路 2614邏輯地組合以產生128位元EOB賦能信號(eob_en(0:127)),該128位元EOB賦能信號識別在目標寬向量暫存器 317中緩衝的待插入EOB填充的訊息區段之位元組(若存在)。
仍參看 26,填充電路2600進一步包括EOM賦能電路 2620,該EOM賦能電路包括選擇電路 2620、比較器 2622、解碼器 2624及逐位元「及」電路 2626。在所描繪之實例中,選擇電路 2620藉由雙輸入多工器實現,該雙輸入多工器具有經耦合以接收訊息長度之8位元指示的第一輸入,及經耦合以接收適用於採用32位元字之SHA-2個雜湊函數的擴展訊息長度的第二輸入。第二輸入處之擴展訊息長度值根據方程式EX_LEN=4*(LEN/4) + LEN藉由將b0插入至原始長度之位元5與6之間而使訊息之原始長度加倍。此技術保留了原始位元6:7之位元位置,該等位元位置指示在最終訊息位元組之擴展訊息塊之32高階位元內的位元組位置(若存在)。若HID子欄位 2510指示雜湊函數為SHA3/SHAKE雜湊函數或採用64位元字之SHA2雜湊函數,則選擇電路 2620選擇其兩個8位元輸入中之第一者,且若HID子欄位 2510指示雜湊函數為採用32位元字之SHA2雜湊函數,則選擇電路 2620替代地選擇其兩個輸入中之第二者。
由選擇電路 2620輸出之8位元長度值包括指示塊長度是否超過1024位元寬向量暫存器檔案 316之寬度的高階位元,及指示包含在由暫存器1欄位 2504識別之目標寬向量暫存器 317中緩衝的訊息塊之區段的位元組之數目的七個低階位元。解碼器 2624解碼七個低階位元以獲得位元組位置之128位元表示(若存在),訊息位元組之末端將在目標寬向量暫存器 317內被插入在該位元組位置處。比較器 2622比較由選擇電路 2620輸出之長度值之高階位元與填充指令 2500之E子欄位 2514,以形成EOM填充是否待添加至在目標寬向量暫存器 317中緩衝之訊息塊之區段的1位元指示。此1位元指示接著藉由逐位元「及」電路 2626邏輯地組合以產生128位元EOM賦能信號(eom_en(0:127)),該128位元EOM賦能信號識別在目標寬向量暫存器 317中緩衝的待插入EOM填充的訊息區段之位元組(若存在)。
EOB賦能信號eob_en(0:127)、EOM賦能信號eom_en(0:127)、eom_byte、eob_byte及來自目標寬向量暫存器 317之訊息區段全部被傳遞至條件「或」電路 2630,該條件「或」電路條件性地將EOM及/或EOB填充插入至訊息區段中以獲得經填充訊息區段Sp。接著將經填充訊息區段Sp儲存回至暫存器1欄位 2504中指定之目標寬向量暫存器 317
現在參考 27,繪示 26之條件「或」電路 2630的例示性實施例。在此實例中,訊息區段之128個位元組中之每一者具有各別相關聯的「或」閘 2700,該「或」閘具有三個8位元輸入。「或」閘 2700之第一輸入經耦合以接收訊息區段S之各別位元組。「或」閘 2700之第二輸入耦合至雙輸入「及」閘 2702之輸出,該雙輸入「及」閘針對訊息區段S之給定位元組用eom_en()限定eom_byte。「或」閘 2700之第三輸入耦合至雙輸入「及」閘 2704之輸出,該雙輸入「及」閘針對訊息區段S之給定位元組用eob_en()限定eob_byte。「或」閘 2700對此等三個輸入執行邏輯或運算,且將經填充訊息區段Sp之所得位元組寫入至寬向量暫存器檔案 316中之目標寬向量暫存器 317。因此,若對於訊息區段S之給定位元組既不確立eom_en()亦不確立eob_en(),則相關「或」閘 2700僅將輸入訊息區段S之位元組寫入至經填充訊息區段Sp之對應位元組。然而,若對於訊息區段S之給定位元組確立eom_en()或eob_en()中之一者或兩者,則相關「或」閘 2700將eom_byte、eob_byte或其邏輯組合寫入至經填充訊息區段Sp之對應位元組中,如由賦能信號eom_en()及eob_en()指示。
現在參看 28,描繪根據一個實施例的用於填充訊息塊之例示性程序的高階邏輯流程圖。所繪示程序可藉由加速器單元 314回應於接收到填充指令 2500而執行。為了易於理解,下文參考 26 27中所描繪之例示性填充電路來描述程序。
28之程序開始於區塊 2800,且接著繼續進行至區塊 2802,區塊 2802繪示加速器單元 314接收填充指令 2500以供執行。回應於接收到填充指令 2500,加速器單元 314首先存取由填充指令 2500之暫存器欄位 25042506指定的源運算元(區塊 2804)。特定言之,加速器單元 314自寬向量暫存器檔案 316中之由暫存器1欄位 2504指定的目標寬向量暫存器 317讀取訊息區段S,自架構式暫存器檔案 300中之由暫存器2欄位 2506指定的暫存器 301讀取未經填充訊息長度,且將此等運算元傳送至 26之填充電路 2600,該填充電路如上文所提及可實現於資料傳送電路 406內。在區塊 2806處,填充電路 2600利用填充指令 2500之模式欄位 2508來選擇填充操作之參數。特定言之,選擇EOM電路 2602基於由模式欄位 2508指定之雜湊函數來選擇EOM填充位元組(eom_byte) 23022402之值,選擇EOB電路 2604選擇待藉由填充指令 2500插入之EOB填充位元組(eob_byte)之值(亦即,用於SHA3/SHAKE之固定值及用於SHA2之零位元組,此係由於EOB填充字 2404係藉由用於SHA2之單獨指令應用),且選擇BL大小電路 2606基於HID子欄位 2510及BL子欄位 2512選擇塊長度。由選擇EOM電路 2602選擇之eom_byte及由所選擇EOB電路 2604選擇之eob_byte形成至條件「或」電路 2630之輸入。
在區塊 2808處,選擇電路 2620基於模式欄位 2508之HID子欄位判定應用於訊息之雜湊函數是否為採用32位元字之SHA2-224或SHA2-256雜湊函數中之一者。若否,則選擇電路 2620選擇並輸出自由暫存器2欄位 2506識別之暫存器 301讀取的訊息長度作為訊息之長度,且 28之程序繼續進行至區塊 2812,其在下文予以描述。然而,若選擇電路 2620在區塊 2808處判定填充指令 2500之HID子欄位 2510指示採用32位元字之SHA2雜湊函數,則選擇電路 2620針對SHA2訊息選擇並輸出加倍長度以考量上文參考 15所描述之訊息擴展。在一個實現中,擴展SHA2訊息長度可方便地計算為:4*(LEN/4) + LEN。程序接著自區塊 2810繼續進行至區塊 2812
區塊 2812繪示藉由EOM賦能電路 2620判定是否待將EOM填充置放於當前訊息區段中。若否,則由EOM賦能電路 2620生成之EOM賦能向量eom_en(0:127)全部為零,且無EOM填充被插入至訊息區段S中。因此,程序轉至區塊 2816,其在下文加以描述。然而,若EOM賦能電路 2620在區塊 2812處判定EOM填充待被插入至訊息區段S中,則EOM賦能電路 2620生成EOM賦能向量eom_en(0:127),該EOM賦能向量識別待插入EOM填充位元組所在的訊息區段S之位元組,且EOM填充位元組係藉由條件「或」電路 2630插入至經填充訊息區段Sp之指定位元組中(區塊 2814)。程序自區塊 2814繼續進行至區塊 2816
在區塊 2816處,選擇BL大小電路 2606及EOB賦能電路 2608判定由雜湊指令 2500之模式欄位 2508指定的雜湊函數是否為SHA3或SHAKE雜湊函數且EOB填充位元組待插入於訊息區段S中。若否,則由EOB賦能電路 2608生成之EOB賦能向量eob_en(0:127)全部為零,且無EOB填充被插入至訊息區段S中。因此,程序自區塊 2816轉至區塊 2820,區塊 2820在下文加以描述。然而,若BL大小電路 2606及EOB賦能電路 2620在區塊 2816處判定由模式欄位 2508指定之雜湊函數為SHA3或SHAKE雜湊函數且EOB填充將被插入至訊息區段S中,則EOB賦能電路 2608生成EOB賦能向量eob_en(0:127),該EOB賦能向量識別待插入EOB填充位元組的訊息區段S之位元組,且EOB填充位元組藉由條件「或」電路 2630插入至經填充訊息區段Sp之指定位元組中(區塊 2818)。程序接著轉至區塊 2820
區塊 2820繪示資料傳送電路 406將所得經填充訊息區段Sp寫入至由暫存器1欄位 2504指定之目標寬向量暫存器 317中。此後, 28之程序在區塊 2822處結束。
現在參考 29,繪示用於(例如)半導體IC邏輯設計、模擬、測試、佈局以及製造中的例示性設計流程 2900的方塊圖。設計流程 2900包括用於處理設計結構或裝置以生成上文所描述並在本文中所展示的設計結構及/或裝置之邏輯上或以其他方式功能上等效表示的程序、機器及/或機構。藉由設計流程 2900處理及/或生成的設計結構可在機器可讀傳輸或儲存媒體上經編碼以包括當在資料處理系統上執行或以其他方式處理時生成硬體組件、電路、裝置或系統之邏輯上、結構上、機械上或以其他方式功能上等效表示的資料及/或指令。機器包括但不限於用於IC設計程序之任何機器,該IC設計程序諸如設計、製造或模擬電路、組件、裝置或系統。舉例而言,機器可包括:微影機器、用於生成遮罩之機器及/或裝備(例如電子束寫入器)、用於模擬設計結構之電腦或裝備、用於製造或測試程序之任何設備或用於將設計結構之功能上等效的表示程式化至任何媒體中的任何機器(例如,用於程式化可程式化閘陣列的機器)。
設計流程 2900可取決於正設計的表示之類型而變化。舉例而言,用於建置特殊應用IC (ASIC)之設計流程 2900可不同於用於設計標準組件之設計流程 2900或不同於用於將設計實體化為可程式化陣列之設計流程 2900,可程式化陣列例如由Altera®公司或Xilinx®公司提供之可程式化閘陣列(PGA)或場可程式化閘陣列(FPGA)。
29繪示包括較佳藉由設計程序 2910處理之輸入設計結構 2920的多個此類設計結構。設計結構 2920可為藉由設計程序 2910生成且處理以產生硬體裝置之邏輯上等效之功能表示的邏輯模擬設計結構。設計結構 2920亦可或替代地包含在藉由設計程序 2910處理時生成硬體裝置之實體結構之功能表示的資料及/或程式指令。無論表示功能及/或結構設計特徵,都可使用諸如由核心開發者/設計者實現之電子電腦輔助設計(ECAD)來生成設計結構 2920。當經編碼於機器可讀資料傳輸、閘陣列或儲存媒體上時,設計結構 2920可藉由設計程序 2910內之一或多個硬體及/或軟體模組存取及處理以模擬或另外功能上表示電子組件、電路、電子或邏輯模組、設備、裝置或系統,諸如本文中所展示之彼等電子組件、電路、電子或邏輯模組、設備、裝置或系統。因而,設計結構 2920可包含檔案或包括人類及/或機器可讀原始程式碼的其他資料結構、經編譯結構及電腦可執行程式碼結構,該等電腦可執行程式碼結構在由設計或模擬資料處理系統處理時在功能上模擬或以其他方式表示硬體邏輯設計之電路或其他層級。此類資料結構可包括硬體描述語言(HDL)設計實體或符合較低層級HDL設計語言(諸如Verilog及VHDL)及/或較高層級設計語言(諸如C或C++)及/或與較低層級HDL設計語言及/或較高層級設計語言相容的其他資料結構。
設計程序 2910較佳採用且併入硬體及/或軟體模組以用於合成、轉譯或以其他方式處理本文中所展示之組件、電路、裝置或邏輯結構之設計/模擬功能等效者以生成可含有諸如設計結構 2920之設計結構的接線對照表 2980。接線對照表 2980可包含例如經編譯或以其他方式處理之資料結構,其表示描述至積體電路設計中之其他元件及電路之連接的導線、離散組件、邏輯閘、控制電路、I/O裝置、模型等之清單。接線對照表 2980可使用反覆製程來合成,其中接線對照表 2980取決於用於裝置之設計規格及參數而經重新合成一或多次。如同本文中所描述的其他設計結構類型,接線對照表 2980可經記錄於機器可讀儲存媒體上或經程式化至可程式化閘陣列中。媒體可為非揮發性儲存媒體,諸如磁碟機或光碟機、可程式化閘陣列、CF卡(compact flash)或其他快閃記憶體。另外或在替代例中,媒體可為系統或快取記憶體或緩衝空間。
設計程序 2910可包括用於處理包括接線對照表 2980之多種輸入資料結構類型的硬體及軟體模組。此類資料結構類型可駐留於例如程式庫元件 2930內,且包括用於給定製造技術(例如,不同技術節點:32 nm、45 nm、290 nm等)的常用元件、電路及裝置之集合,包括模型、佈局及符號表示。資料結構類型可進一步包括設計規格 2940、特性化資料 2950、驗證資料 2960、設計規則 2990以及測試資料檔案 2985,該等測試資料檔案可包括輸入測試圖案、輸出測試結果及其他測試資訊。設計程序 2910可進一步包括例如標準機械設計程序,諸如應力分析、熱分析、機械事件模擬、用於諸如澆鑄、模製及模壓成形等之操作的程序模擬。機械設計之一般熟習此項技術者可瞭解用於設計程序 2910中之可能的機械設計工具及應用的範圍而不偏離本發明之範疇及精神。設計程序 2910亦可包括用於執行諸如定時分析、驗證、設計規則檢查、置放及路由操作等之標準電路設計程序之模組。
設計程序 2910採用且併入諸如HDL編譯器及模擬模型建構工具的邏輯及實體設計工具以連同所描繪支援資料結構中之一些或全部以及任何額外機械設計或資料(若適用)來處理設計結構 2920,以生成第二設計結構 2990。設計結構 2990以用於交換機械裝置及結構之資料的資料格式(例如,以IGES、DXF、Parasolid XT、JT、DRG或用於儲存或呈現此類機械設計結構之任何其他合適格式儲存的資訊)駐留於儲存媒體或可程式化閘陣列上。類似於設計結構 2920,設計結構 2990較佳包含一或多個檔案、資料結構,或其他電腦經編碼資料或指令,其駐留於傳輸或資料儲存媒體上且當藉由ECAD系統處理時生成本文中所展示的本發明之實施例中之一或多者的邏輯上或以其他方式功能上等效之形式。在一個實施例中,設計結構 2990可包含在功能上模擬本文中所展示之裝置的經編譯、可執行之HDL模擬模型。
設計結構 2990亦可採用用於交換積體電路之佈局資料的資料格式及/或符號資料格式(例如,以GDSII (GDS2)、GL1、OASIS、映射檔案或用於儲存此類設計資料結構之任何其他合適格式儲存之資訊)。設計結構 2990可包含資訊,諸如(例如)符號資料、映射檔案、測試資料檔案、設計內容檔案、製造資料、佈局參數、導線、金屬層級、通孔、形狀、用於經由所製造線路由的資料以及製造商或其他設計者/開發者生產如上文所描述及本文中所展示的裝置或結構所需的任何其他資料。設計結構 2990接著可繼續進行至階段 2995,其中例如設計結構 2990:繼續進行至成品出廠驗證(tape-out),經釋放至製造,經釋放至遮罩室,經發送至另一設計室,經發送回至客戶等。
如已描述,在至少一個實施例中,一種處理器包括一暫存器檔案及一執行單元。該執行單元包括:一雜湊電路,其包括至少一狀態暫存器;一狀態更新電路,其耦接至該狀態暫存器;及一控制電路。基於一雜湊指令,該雜湊電路自該暫存器檔案接收並在該狀態暫存器內緩衝正被雜湊之一訊息之一當前狀態。該狀態更新電路對該狀態暫存器之內容執行狀態更新函數,其中執行該狀態更新函數包括對該狀態暫存器之內容執行複數個反覆回合之處理,及將該複數個反覆回合處理中之每一者之一結果傳回至該狀態暫存器。在完成所有該複數個反覆回合之處理之後,該執行單元將該狀態暫存器之內容儲存至該暫存器檔案作為該訊息之一經更新狀態。
在至少一些實施例中,該狀態更新函數包含一安全雜湊演算法3 (SHA3)狀態置換函數;且該狀態更新電路執行二十四個回合之處理,每一回合之處理利用二十四個回合索引中之一各別回合索引作為一輸入。
在一個實施例中,該執行單元在一安全雜湊演算法及Keccak(SHAKE)雜湊演算法之一擠壓階段中執行該雜湊指令。
在至少一些實施例中,該狀態更新函數包含一安全雜湊演算法2 (SHA2)塊雜湊函數。在至少一些實施例中,該雜湊電路進一步包括一加法器,該加法器經組態以將該狀態暫存器之內容加至該當前狀態且將一所得總和傳回至該暫存器檔案。在一些實施例中,該執行單元進一步包括用於緩衝該訊息之一訊息塊之一訊息塊暫存器及耦接至該訊息塊暫存器之一訊息排程回合電路。該訊息排程回合電路對該訊息塊暫存器之內容執行複數個反覆回合之處理,且將該複數個反覆回合之處理中之每一者的一結果傳回至該訊息塊暫存器。在一些實施例中,該狀態更新電路包括用於具有一第一資料寬度之資料字的一資料路徑,且該執行單元經組態以基於指示比該第一資料寬度窄之一第二資料寬度的該雜湊指令,在處理該狀態更新電路中之該訊息的該等資料字之前,將該訊息之一訊息塊的資料字擴展至該第一資料寬度。
雖然已特別展示並描述了各種實施例,但熟習此項技術者應瞭解,在不脫離所附申請專利範圍之精神及範疇的情況下,可在其中作出形式及細節上的各種改變,且此等替代實現皆屬於所附申請專利範圍之範疇。舉例而言,雖然已特定參考SHA標準系列來描述本發明,但熟習此項技術者應瞭解,所揭示之發明亦適用於其他雜湊演算法(例如,通用Keccak函數,以及其他)。另外,儘管本文中為了易於理解已論述繪示性數目個位元及位元組,但應瞭解,用於雜湊演算法中之位元及位元組的特定數目可以且隨著時間推移進行改變,且所揭示發明之原理適用於加密演算法,而不管給定實現中之位元及位元組的特定數目如何。
諸圖中之流程圖及方塊圖繪示根據本發明之各種實施例的系統、方法及電腦程式產品之可能實現之架構、功能性及操作。就此而言,流程圖或方塊圖中之每一區塊可表示模組、區段或指令之部分,其包含用於實現指定邏輯函數之一或多個可執行指令。在一些替代實現中,區塊中所提及之功能可能不以諸圖中所提及之次序發生。舉例而言,取決於所涉及之功能性,連續展示的兩個區塊事實上可實質上同時地執行,或該等區域塊有時可以反向次序執行。亦應注意,方塊圖及/或流程圖繪示之每一區塊以及方塊圖及/或流程圖繪示中之區塊組合可由執行指定功能或動作或進行特殊用途硬體及電腦指令之組合的基於特殊用途硬體之系統實現。
另外,儘管已關於執行引導本發明之功能之程式碼的電腦系統描述態樣,但應理解,本發明可替代地實現為包括儲存可由資料處理系統處理之程式碼的電腦可讀儲存裝置的程式產品。電腦可讀儲存裝置可包括揮發性或非揮發性記憶體、光碟或磁碟或其類似者。然而,如本文中所採用,「儲存裝置」具體地定義為僅包括法定製品且排除信號媒體本身、暫時性傳播信號本身及能量本身。
程式產品可包括資料及/或指令,該等資料及/或指令在資料處理系統上經執行或以其他方式經處理時生成本文中所揭示的硬體組件、電路、裝置或系統之邏輯上、結構上或以其他方式功能上等效的表示(包括模擬模型)。此類資料及/或指令可包括硬體描述語言(HDL)設計實體或符合較低層級HDL設計語言(諸如Verilog及VHDL)及/或較高層級設計語言(諸如C或C++)及/或與較低層級HDL設計語言及/或較高層級設計語言相容的其他資料結構。此外,資料及/或指令亦可採用用於交換積體電路之佈局資料的資料格式及/或符號資料格式(例如,以GDSII (GDS2)、GL1、OASIS、映射檔案或用於儲存此類設計資料結構之任何其他合適格式儲存之資訊)。
100:資料處理系統 102:處理器 104:處理器核心 106:快取記憶體 110:系統互連件 112:記憶體控制器 114:系統記憶體 116:輸入/輸出(I/O)配接器 118:非揮發性儲存系統 120:網路配接器 200:處理器核心 202:指令提取單元 204:指令解碼單元 206:分支處理單元 210:映射器電路 216:分派電路 218:發行佇列 220:固定點單元 222:浮點單元 224:載入-儲存單元 226:向量-純量單元 230:儲存器 300:架構式暫存器檔案 301:256位元暫存器r0至rS 302:功能單元/算術邏輯單元/旋轉單元 304:功能單元/乘法單元 306:功能單元/除法單元 308:功能單元/加密單元 310:功能單元/置換單元 312:功能單元/二進位寫碼十進位(BCD)單元 314:加速器單元 316:寬向量暫存器檔案 317:暫存器R0及R1 320:傳送單元 400:SHA3/SHAKE雜湊電路 402:SHA2雜湊電路 404:單指令多資料(SIMD)互斥或(XOR)電路 406:資料傳送電路 500:程序 502:訊息 504:SHA3吸收階段 506:SHA3/SHAKE擠壓階段 508:訊息摘要 600:區塊 602:1600位元擴展訊息塊 604:SHA3狀態置換函數 606:1600位元逐位元XOR函數 610:1600位元最後吸收狀態 702:SHA-3標準指定之回合索引0 704:SHA3回合函數 800:結果塊1 802:截斷函數 804:截斷函數 900:SHA3雜湊指令 902:作業碼欄位 904:暫存器欄位 906:暫存器欄位 1000:逐位元XOR指令 1002:作業碼欄位 1004:暫存器欄位 1006:暫存器欄位 1008:暫存器欄位 1100a:1024位元雙輸入多工器 1100b:1024位元雙輸入多工器 1102a:1024位元狀態暫存器 1102b:1024位元狀態暫存器 1106:SHA3回合電路 1108:輸出多工器 1110:控制電路/控制邏輯 1200:區塊 1202:區塊 1204:區塊 1206:區塊 1208:區塊 1210:區塊 1214:區塊 1216:區塊 1300:SHA2雜湊函數 1302:訊息 1304:區塊 1306:16× w位元訊息塊/訊息塊1 1308:8× w位元初始狀態 1310:SHA2塊雜湊函數 1312:截斷函數 1314:訊息摘要 1400:訊息排程回合函數 1402: w位元回合密鑰 1404:回合函數/初始更新回合 1406:區塊 1410:8× w位元進位傳播加法函數 1420:區塊/16× w位元初始化 1500:SHA2-224或SHA2-256輸入訊息 1502:32位元字 1504:輸出訊息 1506:64位元雙字 1508:32位元零字 1600:SHA2雜湊指令 1602:作業碼欄位 1604:運算元暫存器欄位 1606:運算元暫存器欄位 1608:模式欄位 1702a:512位元雙輸入狀態多工器 1702b:1024位元雙輸入訊息多工器 1704a:512位元狀態暫存器 1704b:1024位元訊息塊暫存器 1708:更新工作狀態電路 1710:訊息排程回合電路 1712:單指令多資料(SIMD)加法器 1720:控制電路 1800:區塊/輸入狀態 1802:SHA2西格瑪0電路 1804:SHA2 MA電路 1806:SHA2西格瑪1電路 1808:SHA2 CH電路 1810:64位元加法器 1812:64位元加法器/模組化加法器 1814:64位元加法器/模組化加法器 1816:結果狀態 1900:SHA2西格瑪電路 1902:64位元輸入變數 1904a:64位元旋轉電路 1904b:64位元旋轉電路 1906a:32位元旋轉電路 1906b:32位元旋轉電路 1908a:64位元旋轉/移位電路 1908b:32位元旋轉/移位電路 1910a:多工器 1910b:多工器 1910c:多工器 1912:三輸入64位元逐位元XOR電路/3向逐位元XOR電路 1914:64位元輸出 2000:區塊 2002:區塊 2004:區塊 2006:區塊 2010:區塊 2012:區塊 2014:區塊 2016:區塊 2100:未經填充訊息 2300:最後訊息塊 2300':最後訊息塊 2300'':最後訊息塊 2302:EOM填充位元組 2304:EOB填充位元組 2306:最後訊息位元組 2308:EOM/EOB填充位元組 2310:訊息塊 2312:額外置零訊息塊 2400:最後訊息塊 2400':最後訊息塊 2400'':最後訊息塊 2402:EOM填充位元組 2404:EOB填充字 2406:最後訊息位元組 2408:訊息塊 2410:完整訊息塊 2412:訊息塊 2500:填充指令 2502:作業碼欄位 2504:暫存器1欄位 2506:暫存器2欄位 2508:模式欄位 2510:雜湊識別符(HID)子欄位 2512:塊長度(BL)子欄位 2514:擴展(E)子欄位 2600:填充電路 2602:選擇EOM電路 2604:選擇EOB電路 2606:選擇BL大小電路 2608:EOB賦能電路 2610:比較器 2612:解碼器 2614:逐位元「及」電路 2620:EOM賦能電路/選擇電路 2622:比較器 2624:解碼器 2626:逐位元「及」電路 2630:條件「或」電路 2700:「或」閘 2702:雙輸入「及」閘 2704:雙輸入「及」閘 2800:區塊 2802:區塊 2804:區塊 2806:區塊 2808:區塊 2810:區塊 2812:區塊 2814:區塊 2816:區塊 2818:區塊 2820:區塊 2822:區塊 2900:設計流程 2910:設計程序 2920:設計結構 2930:程式庫元件 2940:設計規格 2950:特性化資料 2960:驗證資料 2980:接線對照表 2985:測試資料檔案 2990:設計規則/第二設計結構 2995:階段
1為根據一個實施例的包括處理器之資料處理系統之高階方塊圖;
2為根據一個實施例的處理器核心之高階方塊圖;
3為根據一個實施例的處理器核心之例示性執行單元之高階方塊圖;
4為根據一個實施例的在處理器核心內之加速器單元之更詳細方塊圖;
5為根據SHA-3標準之訊息雜湊的時間-空間圖;
6 5中所描繪之吸收階段之時間-空間圖;
7A 6中所繪示的SHA3置換函數之時間-空間圖;
7B 7A中所描繪的SHA3回合函數之時間-空間圖;
8 5中所繪示之SHA3/SHAKE擠壓階段之時間-空間圖;
9 10分別繪示根據一個實施例的用於SHA3雜湊指令及逐位互斥或(exclusive OR;XOR)指令之例示性格式;
11為根據一個實施例的例示性SHA3/SHAKE雜湊電路的高階方塊圖;
12為根據一個實施例的處理器執行SHA3雜湊指令所藉以的例示性程序之高階邏輯流程圖;
13描繪根據SHA-2標準之訊息雜湊的時間-空間圖;
14 13中所繪示之SHA2塊雜湊函數之時間-空間圖;
15繪示根據例示性實施例的具有32位元字之SHA2雜湊函數的訊息擴展;
16描繪根據一個實施例的用於SHA2雜湊指令之例示性格式;
17為根據一個實施例的例示性SHA2雜湊電路的高階方塊圖;
18為根據一個實施例的來自 17之例示性更新工作狀態電路之高階方塊圖;
19為如 18中所展示的SHA2西格瑪電路(sigma circuit)之例示性實施例的高階方塊圖;
20為根據一個實施例的處理器執行SHA2雜湊指令所藉以的例示性程序之高階邏輯流程圖;
21A描繪例示性未經填充訊息;
21B繪示例示性經填充訊息;
22A 22B描繪將訊息塊之組塊組合於較窄第一暫存器檔案中且將訊息塊傳送至較寬第二暫存器檔案;
23A 23D繪示SHA3/SHAKE訊息之各種填充情境;
24A 24D描繪用於SHA2訊息之各種填充情境;
25繪示根據一個實施例之例示性填充指令;
26描繪根據一個實施例之例示性填充電路;
27繪示根據一個實施例的用於組合塊末端(EOB)及訊息末端(EOM)位元組與訊息的例示性電路;
28為根據一個實施例的用於填充訊息塊之例示性程序之高階邏輯流程圖;且
29描繪根據一個實施例之例示性設計程序。
2800:區塊
2802:區塊
2804:區塊
2806:區塊
2808:區塊
2810:區塊
2812:區塊
2814:區塊
2816:區塊
2818:區塊
2820:區塊
2822:區塊

Claims (20)

  1. 一種處理器,其包含: 一指令提取單元,其提取待執行之指令; 一暫存器檔案,其包括用於儲存源及目的地運算元之複數個暫存器;及 一執行單元,其用於執行一雜湊指令,其中該執行單元包括:一雜湊電路,其包括至少一狀態暫存器;一狀態更新電路,其耦接至該狀態暫存器;及一控制電路,其中該執行單元基於該雜湊指令經組態以執行以下操作: 自該暫存器檔案接收並在該狀態暫存器內緩衝正被雜湊之一訊息之一當前狀態; 在該狀態更新電路中對該狀態暫存器之內容執行一狀態更新函數,其中執行該狀態更新函數包括對該狀態暫存器之內容執行複數個反覆回合之處理,及將該複數個反覆回合處理中之每一者之一結果傳回至該狀態暫存器;及 在完成所有該複數個反覆回合之處理之後,將該狀態暫存器之內容儲存至該暫存器檔案作為該訊息之一經更新狀態。
  2. 如請求項1之處理器,其中: 該狀態更新函數包含一安全雜湊演算法3 (SHA3)狀態置換函數;且 執行複數個反覆回合之處理包括執行二十四個回合之處理,其中每一回合利用二十四個回合索引中之一各別回合索引作為一輸入。
  3. 如請求項1之處理器,其中 該狀態更新函數包含一安全雜湊演算法3 (SHA3)狀態置換函數;且 執行複數個反覆回合之處理包括執行由該雜湊指令指示之多個回合之處理。
  4. 如請求項1之處理器,其中該執行單元在一安全雜湊演算法及Keccak (SHAKE)雜湊演算法之一擠壓階段中執行該雜湊指令。
  5. 如請求項1之處理器,其中: 該狀態更新函數包含一安全雜湊演算法2 (SHA2)塊雜湊函數;且 該雜湊電路進一步包括一加法器,該加法器經組態以將該狀態暫存器之內容加至該當前狀態且將一所得總和傳回至該暫存器檔案。
  6. 如請求項1之處理器,其中: 該狀態更新函數包含一安全雜湊演算法2 (SHA2)塊雜湊函數; 該執行單元進一步包括用於緩衝該訊息之一訊息塊之一訊息塊暫存器及耦接至該訊息塊暫存器之一訊息排程回合電路;且 執行一狀態更新函數包括藉由該訊息排程回合電路對該訊息塊暫存器之內容執行複數個反覆回合之處理,且將該複數個反覆回合之處理中之每一者的一結果傳回至該訊息塊暫存器。
  7. 如請求項1之處理器,其中: 該狀態更新函數包含一安全雜湊演算法2 (SHA2)塊雜湊函數; 該狀態更新電路包括用於具有一第一資料寬度之資料字的一資料路徑;且 該執行單元經組態以基於指示比該第一資料寬度窄之一第二資料寬度的該雜湊指令,在處理該狀態更新電路中之該訊息的該等資料字之前,將該訊息之一訊息塊的資料字擴展至該第一資料寬度。
  8. 一種資料處理系統,其包含: 多個處理器,包括如請求項1之處理器; 一共用記憶體;及 一系統互連件,其以通信方式耦接該共用記憶體及該多個處理器。
  9. 一種在一處理器中進行資料處理之方法,該方法包含: 藉由一指令提取單元提取待由該處理器執行之指令,其中該等指令包括一雜湊指令;及 基於接收到該雜湊指令,該處理器之一執行單元執行該雜湊指令,其中該執行單元包括:一雜湊電路,其包括至少一狀態暫存器;一狀態更新電路,其耦接至該狀態暫存器;及一控制電路,其中該執行包括: 自一暫存器檔案接收並在該狀態暫存器內緩衝正被雜湊之一訊息之一當前狀態; 在該狀態更新電路中對該狀態暫存器之內容執行一狀態更新函數,其中執行該狀態更新函數包括對該狀態暫存器之內容執行複數個反覆回合之處理,及將該複數個反覆回合處理中之每一者之一結果傳回至該狀態暫存器;及 在完成所有該複數個反覆回合之處理之後,將該狀態暫存器之內容儲存至該暫存器檔案作為該訊息之一經更新狀態。
  10. 如請求項9之方法,其中: 該狀態更新函數包含一安全雜湊演算法3 (SHA3)狀態置換函數;且 執行複數個反覆回合之處理包括執行二十四個回合之處理,其中每一回合利用二十四個回合索引中之一各別回合索引作為一輸入。
  11. 如請求項9之方法,其中執行該雜湊指令包括在一安全雜湊演算法及Keccak (SHAKE)雜湊演算法之一擠壓階段中執行該雜湊指令。
  12. 如請求項9之方法,其中: 該狀態更新函數包含一安全雜湊演算法2 (SHA2)塊雜湊函數;且 該方法進一步包含藉由一加法器將該狀態暫存器之內容加至該當前狀態且將一所得總和傳回至該暫存器檔案。
  13. 如請求項9之方法,其中: 該狀態更新函數包含一安全雜湊演算法2 (SHA2)塊雜湊函數; 該執行單元進一步包括用於緩衝該訊息之一訊息塊之一訊息塊暫存器及耦接至該訊息塊暫存器之一訊息排程回合電路;且 執行一狀態更新函數包括在該訊息排程回合電路中對該訊息塊暫存器之內容執行複數個反覆回合之處理,且將該複數個反覆回合之處理中之每一者的一結果傳回至該訊息塊暫存器。
  14. 如請求項9之方法,其中: 該狀態更新函數包含一安全雜湊演算法2 (SHA2)塊雜湊函數; 該狀態更新電路包括用於具有一第一資料寬度之資料字的一資料路徑;且 該方法進一步包含: 基於指示比該第一資料寬度窄之一第二資料寬度的該雜湊指令,在處理該狀態更新電路中之該訊息的該等資料字之前,將該訊息之一訊息塊的資料字擴展至該第一資料寬度。
  15. 一種設計結構,其有形地體現於一機器可讀儲存裝置中用於設計、製造或測試一積體電路,該設計結構包含: 一處理器,其包括: 一指令提取單元,其提取待執行之指令; 一暫存器檔案,其包括用於儲存源及目的地運算元之複數個暫存器;及 一執行單元,其用於執行一雜湊指令,其中該執行單元包括:一雜湊電路,其包括至少一狀態暫存器;一狀態更新電路,其耦接至該狀態暫存器;及一控制電路,其中該執行單元基於該雜湊指令經組態以執行以下操作: 自該暫存器檔案接收並在該狀態暫存器內緩衝正被雜湊之一訊息之一當前狀態; 在該狀態更新電路中對該狀態暫存器之內容執行一狀態更新函數,其中執行該狀態更新函數包括對該狀態暫存器之內容執行複數個反覆回合之處理,及將該複數個反覆回合處理中之每一者之一結果傳回至該狀態暫存器;及 在完成所有該複數個反覆回合之處理之後,將該狀態暫存器之內容儲存至該暫存器檔案作為該訊息之一經更新狀態。
  16. 如請求項15之設計結構,其中: 該狀態更新函數包含一安全雜湊演算法3 (SHA3)狀態置換函數;且 執行複數個反覆回合之處理包括執行二十四個回合之處理,其中每一回合利用二十四個回合索引中之一各別回合索引作為一輸入。
  17. 如請求項15之設計結構,其中該執行單元在一安全雜湊演算法及Keccak (SHAKE)雜湊演算法之一擠壓階段中執行該雜湊指令。
  18. 如請求項15之設計結構,其中: 該狀態更新函數包含一安全雜湊演算法2 (SHA2)塊雜湊函數;且 該雜湊電路進一步包括一加法器,該加法器經組態以將該狀態暫存器之內容加至該當前狀態且將一所得總和傳回至該暫存器檔案。
  19. 如請求項15之設計結構,其中: 該狀態更新函數包含一安全雜湊演算法2 (SHA2)塊雜湊函數; 該執行單元進一步包括用於緩衝該訊息之一訊息塊之一訊息塊暫存器及耦接至該訊息塊暫存器之一訊息排程回合電路;且 執行一狀態更新函數包括藉由該訊息排程回合電路對該訊息塊暫存器之內容執行複數個反覆回合之處理,且將該複數個反覆回合之處理中之每一者的一結果傳回至該訊息塊暫存器。
  20. 如請求項15之設計結構,其中: 該狀態更新函數包含一安全雜湊演算法2 (SHA2)塊雜湊函數; 該狀態更新電路包括用於具有一第一資料寬度之資料字的一資料路徑;且 該執行單元經組態以基於指示比該第一資料寬度窄之一第二資料寬度的該雜湊指令,在處理該狀態更新電路中之該訊息的該等資料字之前,將該訊息之一訊息塊的資料字擴展至該第一資料寬度。
TW112124023A 2022-07-05 2023-06-28 安全雜湊演算法之基於硬體之實現 TW202409871A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/857,627 2022-07-05
US17/884,704 2022-08-10

Publications (1)

Publication Number Publication Date
TW202409871A true TW202409871A (zh) 2024-03-01

Family

ID=

Similar Documents

Publication Publication Date Title
US10928847B2 (en) Apparatuses and methods for frequency scaling a message scheduler data path of a hashing accelerator
US10469249B2 (en) SM4 acceleration processors, methods, systems, and instructions
CN108702286B (zh) 抗功率侧信道攻击的高级加密标准加速器处理器
US9960917B2 (en) Matrix multiply accumulate instruction
US8417961B2 (en) Apparatus and method for implementing instruction support for performing a cyclic redundancy check (CRC)
TWI518589B (zh) 用以執行groestl雜湊法之指令
Fritzmann et al. Towards reliable and secure post-quantum co-processors based on RISC-V
US20190042249A1 (en) Hardware accelerators and methods for high-performance authenticated encryption
US10509580B2 (en) Memory controller and methods for memory compression utilizing a hardware compression engine and a dictionary to indicate a zero value, full match, partial match, or no match
JP2011123884A (ja) プログラム可能な巡回冗長度検査(crc)計算のための命令セット・アーキテクチャ
TW201812637A (zh) 低成本之密碼加速器
TWI739754B (zh) 向量運算指令
US9270460B2 (en) Instructions to perform JH cryptographic hashing in a 256 bit data path
TW202409871A (zh) 安全雜湊演算法之基於硬體之實現
US20240061961A1 (en) Hardware-based implementation of secure hash algorithms
US20240053989A1 (en) Hardware-based message block padding for hash algorithms
CN114692231A (zh) 用于针对硬件重放攻击和存储器访问模式泄漏的提高的恢复力的存储器地址总线保护
KR20210018130A (ko) 프로세서, 프로세서의 동작 방법 및 이를 포함한 전자 장치
US20240053963A1 (en) Hardware-based galois multiplication
TW202409827A (zh) 基於硬體之伽羅瓦乘法
US20240015004A1 (en) Hardware-based key generation and storage for cryptographic function
TW202113589A (zh) 具有私有管線之處理器