密碼學系列之:NIST和SHA演算法

flydean發表於2021-05-10

簡介

SHA演算法大家應該都很熟悉了,它是一個用來計算hash的演算法,目前的SHA演算法有SHA1,SHA2和SHA3種。這三種演算法都是由美國NIST制定的。

NIST的全稱是美國國家標準與技術研究所,主要來制定各種標準。

本文將會講解下NIST和SHA各種演算法的關係。

SHA1

在密碼學中,SHA-1(Secure Hash Algorithm 1)是一種加密雜湊函式,它接受一個輸入,併產生一個160位(20位元組)的雜湊值,稱為資訊摘要。

我們先看下SHA1的加密流程圖:

密碼學系列之:NIST和SHA演算法

上面的A,B,C,D,E都是32bits的state。

F是一個非線性函式。

<<< 表示額是左移操作,紅色的加號表示的是加法然後對232取模。

SHA1演算法很簡單,在2005年之後,SHA1被認為是不安全的,截至2010年,許多組織都建議更換SHA-1。

NIST在2011年正式廢止了SHA-1的使用,並在2013年不允許將其用於數字簽名。

所有主要的網路瀏覽器廠商在2017年都停止接受SHA-1 SSL證書。

SHA2

SHA-2(Secure Hash Algorithm 2)也是由美國國家安全域性(NSA)設計的一組加密雜湊函式,於2001年首次公佈,它們採用Merkle-Damgård結構。

SHA-2和SHA-1相比,包括了重大的變化。SHA-2系列包含六個雜湊函式,分別是SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。

我們看下SHA2的演算法流程:

密碼學系列之:NIST和SHA演算法

我們看下這幾個函式表示什麼意思:

SHA3

2006年,NIST組織了NIST雜湊函式競賽,以建立一個新的雜湊標準SHA-3。SHA-3並不是要取代SHA-2,因為目前還沒有證明對SHA-2的重大攻擊。但是由於MD5、SHA-0和SHA-1的成功攻擊,NIST認為需要一種可替代的、不同的加密雜湊,這就是SHA-3。

在這個比賽中,最終Keccak演算法勝出,被選為SHA3的標準。

SHA3演算法是基於海綿結構的,我們看下海綿結構的工作原理:

這個函式被分成了兩部分,左邊部分叫做吸收部分,右邊部分叫做輸出部分,一吸一出,像是海綿一樣,所以叫做海綿函式。

P表示的是輸入的字串,Z表示的時候輸出字串。

一個海綿函式由三部分組成,分別是state, 函式f和填充函式pad。

state就是上圖的r+c部分,r被稱為Bitrate, c被稱為Capacity

P被分成n份,每一份都會跟Bitrate進行異或操作,如果P的長度不是Bitrate的整數倍,那麼需要使用Pad函式進行填充。

每一輪,Bitrate跟P進行異或操作的結果作為最新的Bitrate, 然後生成新的state,然後這個state又被f(state)來替換。

其中函式 f 是 從n個{0,1} 到n個{0,1}的對映。

就這樣一輪一輪進行下去,直到所有的P都參與了運算。

輸出部分是將最終生成的state進行f運算,每次運算都取Bitrate部分作為輸出,從而得到最終的輸出。

本文已收錄於http://www.flydean.com/sha1-2-3/

> 最通俗的解讀,最深刻的乾貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!

> 歡迎關注我的公眾號:「程式那些事」,懂技術,更懂你!

相關文章