block hash區塊雜湊遊戲玩法規則開發原理(下)
上篇文章,我們講解了關於雜湊的原理以及舉例,這篇文章我們繼續講解:
常見的雜湊演算法
1SHA-1演算法SHA-1的輸入是最大長度小於264位的訊息,輸入訊息以512位的分組為單位進行處理,輸出是160位的訊息摘要。SHA-1具有實現速度高、容易實現、應用範圍廣等優點,其演算法描述如下。
區塊雜湊遊戲系統開發,開發薇芯:hkkf5566,規則定製,模式定製,鏈上雜湊dapp遊戲開發搭建
對輸入的訊息進行填充:經過填充後,訊息的長度模512應與448同餘。填充的方式為第一位是1,餘下各位都為0。再將訊息被填充前的長度以big-endian的方式附加在上一步留下的最後64位中。該步驟是必須的,即使訊息的長度已經是所希望的長度。填充的長度範圍是1到512。
初始化緩衝區:可以用160位來存放Hash函式的初始變數、中間摘要及最終摘要,但首先必須進行初始化,對每個32位的初始變數賦值,即:
進入訊息處理主迴圈,處理訊息塊:一次處理512位的訊息塊,總共進行4輪處理,每輪進行20次操作,如圖所示。這4輪處理具有類似的結構,但每輪所使用的輔助函式和常數都各不相同。每輪的輸入均為當前處理的訊息分組和緩衝區的當前值A、B、C、D、E,輸出仍放在緩衝區以替代舊的A、B、C、D、E的值。第四輪的輸出再與第一輪的輸入CVq相加,以產生CVq+1,其中加法是緩衝區5個字CVq中的每個字與中相應的字模232相加。
圖 單個512位訊息塊的處理流程
輸出:所有的訊息分組都被處理完之後,最後一個分組的輸出即為得到的訊息摘要值。
SHA-1的步函式如圖所示,它是SHA-1最為重要的函式,也是SHA-1中最關鍵的部件。
圖 SHA-1的步函式
SHA-1每執行一次步函式,A、B、C、D的值就會依次賦值給B、C、D、E這幾個暫存器。同時,A、B、C、D、E的輸入值、常數和子訊息塊在經過步函式運算後就會賦值給A。
其中,t是步數,0≤t≤79,Wt是由當前512位長的分組匯出的一個32位的字,Kt是加法常量。
基本邏輯函式f的輸入是3個32位的字,輸出是一個32位的字,其函式表示如下。
對於每個輸入分組匯出的訊息分組wt,前16個訊息字wt(0≤t≤15)即為訊息輸入分組對應的16個32位字,其餘wt(0≤t≤79)可按如下公式得到:
其中,ROTLs表示左迴圈移位s位,如圖所示。
圖 SHA-1的80個訊息字的產生過程
2SHA-2演算法SHA-2系列Hash演算法,其輸出長度可取SHA-2系列雜湊演算法的輸出長度可取224位、256位、384位、512位,分別對應SHA-224、SHA-256、SHA-384、SHA-512。它還包含另外兩個演算法:SHA-512/224、SHA-512/256。比之前的Hash演算法具有更強的安全強度和更靈活的輸出長度,其中SHA-256是常用的演算法。下面將對前四種演算法進行簡單描述。
SHA-256演算法SHA-256演算法的輸入是最大長度小於264位的訊息,輸出是256位的訊息摘要,輸入訊息以512位的分組為單位進行處理。演算法描述如下。
(1)訊息的填充新增一個“1”和若干個“0”使其長度模512與448同餘。在訊息後附加64位的長度塊,其值為填充前訊息的長度。從而產生長度為512整數倍的訊息分組,填充後訊息的長度最多為264位。
(2)初始化連結變數連結變數的中間結果和最終結果儲存於256位的緩衝區中,緩衝區用8個32位的暫存器A、B、C、D、E、F、G和H表示,輸出仍放在緩衝區以代替舊的A、B、C、D、E、F、G、H。首先要對連結變數進行初始化,初始連結變數儲存於8個暫存器A、B、C、D、E、F、G和H中:
初始連結變數是取自前8個素數(2、3、5、7、11、13、17、19)的平方根的小數部分其二進位制表示的前32位。
(3)處理主迴圈模組訊息塊是以512位分組為單位進行處理的,要進行64步迴圈操作(如圖所示)。每一輪的輸入均為當前處理的訊息分組和得到的上一輪輸出的256位緩衝區A、B、C、D、E、F、G、H的值。每一步中均採用了不同的訊息字和常數,下面將給出它們的獲取方法。
圖 SHA-256的壓縮函式
(4)得出最終的Hash值所有512位的訊息塊分組都處理完以後,最後一個分組處理後得到的結果即為最終輸出的256位的訊息摘要。
步函式是SHA-256中最為重要的函式,也是SHA-256中最關鍵的部件。其運算過程如圖所示。
圖 SHA-256的步函式
根據T1、T2的值,對暫存器A、E進行更新。A、B、C、E、F、G的輸入值則依次賦值給B、C、D、F、G、H。
Kt的獲取方法是取前64個素數(2,3,5,7,……)立方根的小數部分,將其轉換為二進位制,然後取這64個數的前64位作為Kt。其作用是提供了64位隨機串集合以消除輸入資料裡的任何規則性。
對於每個輸入分組匯出的訊息分組Wt,前16個訊息字Wt(0≤t≤15)直接按照訊息輸入分組對應的16個32位字,其他的則按照如下公式來計算得出:
圖 SHA-256的64個訊息字的生成過程
SHA-512演算法SHA-512是SHA-2中安全效能較高的演算法,主要由明文填充、訊息擴充套件函式變換和隨機數變換等部分組成,初始值和中間計算結果由8個64位的移位暫存器組成。該演算法允許輸入的最大長度是2128位,併產生一個512位的訊息摘要,輸入訊息被分成若干個1024位的塊進行處理,具體引數為:訊息摘要長度為512位;訊息長度小於2128位;訊息塊大小為1024位;訊息字大小為64位;步驟數為80步。下圖顯示了處理訊息、輸出訊息摘要的整個過程,該過程的具體步驟如下。
圖 SHA-512的整體結構
訊息填充:填充一個“1”和若干個“0”,使其長度模1024與896同餘,填充位數為0-1023,填充前訊息的長度以一個128位的欄位附加到填充訊息的後面,其值為填充前訊息的長度。
連結變數初始化:連結變數的中間結果和最終結果都儲存於512位的緩衝區中,緩衝區用8個64位的暫存器A、B、C、D、E、F、G、H表示。初始連結變數也儲存於8個暫存器A、B、C、D、E、F、G、H中,其值為:
初始連結變數採用big-endian方式儲存,即字的最高有效位元組儲存於低地址位置。初始連結變數取自前8個素數的平方根的小數部分其二進位制表示的前64位。
主迴圈操作:以1024位的分組為單位對訊息進行處理,要進行80步迴圈操作。每一次迭代都把512位緩衝區的值A、B、C、D、E、F、G、H作為輸入,其值取自上一次迭代壓縮的計算結果,每一步計算中均採用了不同的訊息字和常數。
計算最終的Hash值:訊息的所有N個1024位的分組都處理完畢之後,第N次迭代壓縮輸出的512位連結變數即為最終的Hash值。
步函式是SHA-512中最關鍵的部件,其運算過程類似SHA-256。每一步的計算方程如下所示,B、C、D、F、G、H的更新值分別是A、B、C、E、F、G的輸入狀態值,同時生成兩個臨時變數用於更新A、E暫存器。
對於80步操作中的每一步t,使用一個64位的訊息字Wt,其值由當前被處理的1024位訊息分組Mi匯出,匯出方法如圖所示。前16個訊息字Wt(0≤t≤15)分別對應訊息輸入分組之後的16個32位字,其他的則按照如下公式來計算得出:
圖 SHA-512的80個訊息字生成的過程
其中,
式中,ROTRn(X)表示對64位的變數x迴圈右移n位,SHRn(X)表示對64位的變數x右移n位。
從圖可以看出,在前16步處理中,Wt的值等於訊息分組中相對應的64位字,而餘下的64步操作中,其值是由前面的4個值計算得到的,4個值中的兩個要進行移位和迴圈移位操作。
Kt的獲取方法是取前80個素數(2,3,5,7,……)立方根的小數部分,將其轉換為二進位制,然後取這80個數的前64位作為Kt,其作用是提供了64位隨機串集合以消除輸入資料裡的任何規則性。
SHA-224與SHA-384SHA-256和SHA-512是很新的Hash函式,前者定義一個字為32位,後者則定義一個字為64位。實際上二者的結構是相同的,只是在迴圈執行的次數、使用常數上有所差異。SHA-224及SHA-384則是前述兩種Hash函式的截短型,它們利用不同的初始值做計算。
SHA-224的輸入訊息長度跟SHA-256的也相同,也是小於264位,其分組的大小也是512位,其處理流程跟SHA-256也基本一致,但是存在如下兩個不同的地方。
SHA-224的訊息摘要取自A、B、C、D、E、F、G共7個暫存器的位元字,而SHA-256的訊息摘要取自A、B、C、D、E、F、G、H共8個暫存器的32位元字。
SHA-224的初始連結變數與SHA-256的初始連結變數不同,它採用高階格式儲存,但其初始連結變數的獲取方法是取前第9至16個素數(23、29、31、37、41、43、47、53)的平方根的小數部分其二進位制表示的第二個32位,SHA-224的初始連結變數如下:
SHA-224的詳細計算步驟與SHA-256一致。
SHA-384的輸入訊息長度跟SHA-512相同,也是小於2128位,而且其分組的大小也是1024位,處理流程跟SHA-512也基本一致,但是也有如下兩處不同的地方。
SHA-384的384位的訊息摘要取自A、B、C、D、E、F共6個64位元字,而SHA-512的訊息摘要取自A、B、C、D、E、F、G、H共8個64位元字。
SHA-384的初始連結變數與SHA-512的初始連結變數不同,它也採用高階格式儲存,但其初始連結變數的獲取方法是取前9至16個素數(23、29、31、37、41、43、47、53)的平方根的小數部分其二進位制表示的前64位,SHA-384的初始連結變數如下:
SHA-384的詳細計算步驟與SHA-512的相同。
3SHA-3演算法SHA-3演算法整體採用Sponge結構,分為吸收和榨取兩個階段。SHA-3的核心置換f作用在5×5×64的三維矩陣上。整個f共有24輪,每輪包括5個環節θ、ρ、π、χ、τ。演算法的5個環節分別作用於三維矩陣的不同維度之上。θ環節是作用在列上的線性運算;ρ環節是作用在每一道上的線性運算,將每一道上的64位元進行迴圈移位操作;π環節是將每道上的元素整體移到另一道上的線性運算;χ環節是作用在每一行上的非線性運算,相當於將每一行上的5位元替換為另一個5位元;τ環節是加常數環節。
目前,公開文獻對SHA-3演算法的安全性分析主要是從以下幾個方面來展開的。
對SHA-3演算法的碰撞攻擊、原像攻擊和第二原像攻擊。
對SHA-3演算法核心置換的分析,這類分析主要針對演算法置換與隨機置換的區分來展開。
對SHA-3演算法的差分特性進行展開,主要研究的是SHA-3置換的高概率差分鏈,並構築差分割槽分器。
Keccak演算法的立體加密思想和海綿結構,使SHA-3優於SHA-2,甚至AES。Sponge函式可建立從任意長度輸入到任意長度輸出的對映。
4RIPEMD160演算法RIPEMD(RACE Integrity Primitives Evaluation Message Digest),即RACE原始完整性校驗訊息摘要。RIPEMD使用MD4的設計原理,並針對MD4的演算法缺陷進行改進,1996年首次釋出RIPEMD-128版本,它在效能上與SHA-1相類似。
RIPEMD-160是對RIPEMD-128的改進,並且是RIPEMD中最常見的版本。RIPEMD-160輸出160位的Hash值,對160位Hash函式的暴力碰撞搜尋攻擊需要280次計算,其計算強度大大提高。RIPEMD-160的設計充分吸取了MD4、MD5、RIPEMD-128的一些效能,使其具有更好的抗強碰撞能力。它旨在替代128位Hash函式MD4、MD5和RIPEMD。
RIPEMD-160使用160位的快取區來存放演算法的中間結果和最終的Hash值。這個快取區由5個32位的暫存器A、B、C、D、E構成。暫存器的初始值如下所示:
資料儲存時採用低位位元組存放在低地址上的形式。
處理演算法的核心是一個有10個迴圈的壓縮函式模組,其中每個迴圈由16個處理步驟組成。在每個迴圈中使用不同的原始邏輯函式,演算法的處理分為兩種不同的情況,在這兩種情況下,分別以相反的順序使用5個原始邏輯函式。每一個迴圈都以當前分組的訊息字和160位的快取值A、B、C、D、E為輸入得到新的值。每個迴圈使用一個額外的常數,在最後一個迴圈結束後,兩種情況的計算結果A、B、C、D、E和A′、B′、C′、D′、E′及連結變數的初始值經過一次相加運算產生最終的輸出。對所有的512位的分組處理完成之後,最終產生的160位輸出即為訊息摘要。
除了128位和160位的版本之外,RIPEMD演算法也存在256位和320位的版本,它們共同構成RIPEMD家族的四個成員:RIPEMD-128、RIPEMD-160、RIPEMD-256、RIPEMD-320。其中128位版本的安全性已經受到質疑,256位和320位版本減少了意外碰撞的可能性,但是相比於RIPEMD-128和RIPEMD-160,它們不具有較高水平的安全性,因為他們只是在128位和160位的基礎上,修改了初始引數和s-box來達到輸出為256位和320位的目的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011332/viewspace-2885239/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 區塊鏈雜湊值演算法遊戲開發原理玩法規則定製區塊鏈演算法遊戲開發
- HASH雜湊遊戲原始碼丨HASH雜湊遊戲系統開發丨HASH雜湊遊戲開發成品原始碼部署原始碼遊戲開發
- hash雜湊競猜遊戲開發模式丨雜湊遊戲競猜玩法系統開發技術功能遊戲開發模式
- HASH雜湊遊戲競猜模式系統開發方案(原始碼部署)區塊鏈雜湊遊戲開發多種遊戲介紹模式原始碼區塊鏈遊戲開發
- Hash雜湊遊戲原始碼丨雜湊競猜遊戲系統技術開發丨Hash雜湊遊戲講解遊戲原始碼
- 區塊雜湊競猜遊戲系統開發技術原理分析遊戲
- 雜湊競猜遊戲開發示例丨Hash雜湊遊戲系統開發丨雜湊競猜遊戲詳情遊戲開發
- 雜湊遊戲原始碼開發搭建丨hash雜湊遊戲競猜原始碼搭建丨雜湊遊戲系統開發遊戲原始碼
- HASH雜湊值競猜遊戲開發原始碼丨原始碼示例丨HASH雜湊遊戲程式設計遊戲開發原始碼程式設計
- 區塊雜湊競猜遊戲系統開發技術分析遊戲
- Hash雜湊競猜遊戲系統開發(詳細及分析)丨雜湊Hash競猜遊戲系統開發(原始碼專案)遊戲原始碼
- 區塊鏈雜湊值演算法競猜遊戲開發原理方案詳解區塊鏈演算法遊戲開發
- hash雜湊遊戲競猜系統合約開發解析丨defi丨雜湊遊戲原始碼遊戲原始碼
- 雜湊競猜遊戲系統開發原理丨雜湊遊戲系統開發技術方案丨雜湊競猜遊戲開發原始碼搭建遊戲開發原始碼
- 競猜雜湊遊戲系統開發程式碼詳情丨競猜hash雜湊遊戲開發技術詳情遊戲開發
- hash遊戲競猜系統開發方案丨雜湊HASH遊戲競猜系統開發方案/(原始碼部署)遊戲原始碼
- DAPP雜湊競猜遊戲hash系統設計開發方案APP遊戲
- Hash雜湊遊戲競猜系統開發功能及邏輯案例遊戲
- 雜湊競猜開發原理丨雜湊競猜遊戲原始碼丨雜湊競猜系統開發設計程式碼遊戲原始碼
- 雜湊競猜遊戲系統開發原理方案探究遊戲
- Hash幸運雜湊競猜遊戲系統設計開發丨雜湊單雙尾數大小競猜遊戲遊戲
- 什麼是雜湊演算法?雜湊競猜遊戲開發原理詳解演算法遊戲開發
- 雜湊遊戲系統丨雜湊遊戲系統開發(演示版)丨雜湊遊戲開發原始碼及案例遊戲開發原始碼
- 區塊鏈雜湊遊戲競猜模式系統開發技術原始碼部署區塊鏈遊戲模式原始碼
- Redis命令——雜湊(Hash)Redis
- 雜湊競猜遊戲的原理遊戲
- 雜湊遊戲競猜系統開發原始碼(DEMO)hash遊戲競猜系統開發瞭解方案遊戲原始碼
- hash雜湊競猜遊戲開發技術應用(自帶原始碼案例)遊戲開發原始碼
- 雜湊競猜遊戲系統開發技術丨雜湊競猜遊戲開發原始碼部署遊戲開發原始碼
- 雜湊遊戲競猜開發穩定版,雜湊遊戲競猜系統開發技術詳情及案例,雜湊遊戲競猜原始碼部署遊戲原始碼
- Hash雜湊競猜系統開發介紹現成版
- Redis的雜湊型別(Hash)Redis型別
- 雜湊表(Hash)的應用
- 雜湊遊戲系統技術開發丨雜湊單雙競猜遊戲原始碼丨雜湊遊戲程式設計技術遊戲原始碼程式設計
- 雜湊表(雜湊表)原理詳解
- 雜湊競猜遊戲系統技術開發丨雜湊遊戲Solidity智慧合約遊戲Solid
- Oracle表連線操作——Hash Join(雜湊連線)下Oracle
- 雜湊競猜遊戲原始碼版丨雜湊競猜遊戲系統開發(邏輯及詳情)丨雜湊競猜遊戲開發穩定版原始碼遊戲開發