天天看點

密碼學系列之:NIST和SHA算法簡介SHA1SHA2SHA3

簡介

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

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

本文将會講解下 NIST 和 SHA 各種算法的關系。

SHA1

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

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

密碼學系列之:NIST和SHA算法簡介SHA1SHA2SHA3

上面的 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算法簡介SHA1SHA2SHA3

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

密碼學系列之:NIST和SHA算法簡介SHA1SHA2SHA3

SHA3

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

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

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

密碼學系列之:NIST和SHA算法簡介SHA1SHA2SHA3

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

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/

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

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

繼續閱讀