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

簡介

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

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

本文將會講解下NIST和SHA各類算法的關係。安全

SHA1

在密碼學中,SHA-1(Secure Hash Algorithm 1)是一種加密哈希函數,它接受一個輸入,併產生一個160位(20字節)的哈希值,稱爲信息摘要。網絡

咱們先看下SHA1的加密流程圖:函數

<img src="https://img-blog.csdnimg.cn/20210403200253300.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_0,text_aHR0cDovL3d3dy5mbHlkZWFuLmNvbQ==,size_25,color_8F8F8F,t_70" style="zoom:67%;" />加密

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

F是一個非線性函數。設計

<<< 表示額是左移操做,紅色的加號表示的是加法而後對232取模。3d

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

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-22四、SHA-25六、SHA-38四、SHA-5十二、SHA-512/22四、SHA-512/256。

咱們看下SHA2的算法流程:

<img src="https://img-blog.csdnimg.cn/20210403220300178.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_0,text_aHR0cDovL3d3dy5mbHlkZWFuLmNvbQ==,size_25,color_8F8F8F,t_70" style="zoom:67%;" />

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

SHA3

2006年,NIST組織了NIST哈希函數競賽,以建立一個新的哈希標準SHA-3。SHA-3並非要取代SHA-2,由於目前尚未證實對SHA-2的重大攻擊。可是因爲MD五、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/

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

> 歡迎關注個人公衆號:「程序那些事」,懂技術,更懂你!

相關文章
相關標籤/搜索