1. 程式人生 > >SHA-2 安全雜湊演算法2 演算法詳解

SHA-2 安全雜湊演算法2 演算法詳解

SHA-2

又稱安全雜湊演算法2(Secure Hash Algorithm 2),是一種密碼雜湊函式演算法標準,其輸出長度可取224位、256位、384位、512位,分別對應SHA-224、SHA-256、SHA-384、SHA-512。它含包含另外兩個演算法:SHA-512/224、SHA-512/256。

下面我們主要討論SHA-256演算法

具體步驟:

SHA-256演算法的輸入是最大長度小於2^64位的訊息,輸出是256位的訊息摘要,輸入訊息以512位的分組為單位進行處理。

1.訊息充填

新增一個“1”或者N個“0”使其長度模512與448同餘。在訊息後附加64位的長度塊,其值為充填前訊息的長度。從而產生長度為512整數倍的訊息分組,充填後訊息的長度最多為2^64位。

2.初始化連結變數

連結變數的中間結果和最終結果儲存於256位的緩衝區中,緩衝區用8個32位的暫存器可用A-H,h0-h7表示,輸出仍然放在緩衝區以代替舊的8個暫存器。首先要對連結變數進行初始化:

h0 := 0x6a09e667
h1 := 0xbb67ae85
h2 := 0x3c6ef372
h3 := 0xa54ff53a
h4 := 0x510e527f
h5 := 0x9b05688c
h6 := 0x1f83d9ab
h7 := 0x5be0cd19
初始變數是取自前8個素數(2、3、5、7、11、13、17、19)的平方根的小數部分其二進位制表示的前32位。

3.處理主迴圈模組

訊息塊是以512位分組為單位進行處理的,需要進行64步迴圈操作。每一輪的輸入均為當前處理的訊息分組和上一輪輸出的256位緩衝區A-H的值。每一步中均採用了不同的訊息字和常數。


4.得出最終的Hash值

所有512位的訊息塊分組都處理完以後,最後一個分組處理後得到的結果即為最終輸出的256位的訊息摘要。

步函式:

每一步都會生成兩個臨時的變數,T1、T2:


根據T1、T2的值,對暫存器A、E進行更新。ABCEFG的輸入值則一次賦值給BCDFGH。


A = ( T1 + T2 ) mod 2^32
B = A
C = B
D = C
E = ( D +T1) mod 2^32
F = E
G = F
H = G 

且ROTR^n(x)表示對32位的變數x迴圈右移n位。

Kt的獲取方法是取錢64個素數立方根的小數部分二進位制的前64位。其作用是提供了64位隨機串集合以消除輸入資料裡的任何規則性。

對於每個輸入分組匯出的訊息分組Wt,前16個訊息字Wt(0<= t <=15)直接按照訊息輸入分組對應的16個32位字,其他的則按照如下公式來計算得出:


其中:



SHR^n(x)表示對32位的變數x右移n位,其匯出方法為: