密碼學基礎-Hash演算法
來自專欄 區塊鏈技術的顛覆日記
Hash函數是密碼學的一個重要分支,它是一種將任意長度的輸入變換為固定長度的輸出且不可逆的單向密碼體制。Hash函數在數字簽名和消息完整性檢測等方面有著廣泛的應用。
如果x,x是兩個不同的消息,存在H(x)=H(x),則稱x,x是hash函數H的一個碰撞。
典型的Hash函數有兩類:消息摘要演算法(MD5)和安全散列演算法(SHA)。
Hash函數有如下特點:
1、易壓縮;2、易計算;3、單向性;4、抗碰撞性;5、高靈敏性;
SHA-1 SHA-2演算法--------------------------------------------------------------------------
SHA-256:
(1)、消息的填充
添加1和0,第一位是1,餘下都是0;使其長度模512與448同餘。在消息後附加64位的長度塊,其值為填充前消息的長度。從而產生長度為512整數倍的消息分組。
(2)、初始化鏈接變數
鏈接變數的中間結果和最終結果都保存在256位的緩衝區中,緩衝區用8個32位的寄存器A、B、C、D、E、F、G、H,輸出仍放在緩衝區以代替舊的A、B、C、D、E、F、G、H,首先對鏈接變數初始化,取值前8個素數(2、3、5、7、11、13、17、19)的平方根的小數部分其二進位表示的前32位。
(3)、處理主循環模塊
消息以256位分組位單位進行處理的,要進行64步循環操作。每一輪的輸入均為當前處理的消息分組和上一輪輸出的256位緩衝區A、B、C、D、E、F、G、H的值,每一步均採用了不同的消息字和常數。
(4)、得出最終的Hash值
所有512位的消息分組都處理完以後,最後一個分組處理後得到的結果即為最終輸出的256位的消息摘要。
步函數----------------------------------------------------------------------------------------
步函數是SHA-256中最為重要的函數。
首先每一步都會生成兩個臨時變數T1、T2,用T1、T2的值對A、E進行更新。A、B、C、E、F、G的輸入值則依次賦值給B、C、D、F、G、H。
SHA-512:
SHA-512是SHA-2中安全性能較高的演算法,主要由明文填充、消息擴展函數變換和隨機數變換等部分組成,初始值和中間值由8個64位的移位寄存器組成。同樣關鍵也是步函數。和SHA-256二者結構相同,只是在循環運行的次數、使用常數上有所差異。
SHA-224和SHA-384是SHA-256和SHA-512的截短型,一個是寄存器個數不一樣;一個是鏈接變數初始值不一樣。
SHA-3演算法-----------------------------------------------------------------------------------
由於MD5、SHA系列的Hash函數遭受到了碰撞攻擊,SHA-3誕生。(單獨一節學習SHA-3)
推薦閱讀:
※九章演算法 | Google面試題:原子計數
※第二十九章 Decision Tree演算法(上)
※C語言實現最大匹配分詞
※圖解分散式圖演算法 Pregel: 模型簡介與實戰案例
※Leetcodes Solution 34 Search for a Range