密碼學(xué)系列之:NIST和SHA算法

簡(jiǎn)介

SHA算法大家應(yīng)該都很熟悉了,它是一個(gè)用來(lái)計(jì)算hash的算法,目前的SHA算法有SHA1,SHA2和SHA3種。這三種算法都是由美國(guó)NIST制定的。

NIST的全稱(chēng)是美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究所,主要來(lái)制定各種標(biāo)準(zhǔn)。

本文將會(huì)講解下NIST和SHA各種算法的關(guān)系。

SHA1

在密碼學(xué)中,SHA-1(Secure Hash Algorithm 1)是一種加密哈希函數(shù),它接受一個(gè)輸入,并產(chǎn)生一個(gè)160位(20字節(jié))的哈希值,稱(chēng)為信息摘要。

我們先看下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。

F是一個(gè)非線(xiàn)性函數(shù)。

<<< 表示額是左移操作,紅色的加號(hào)表示的是加法然后對(duì)232取模。

SHA1算法很簡(jiǎn)單,在2005年之后,SHA1被認(rèn)為是不安全的,截至2010年,許多組織都建議更換SHA-1。

NIST在2011年正式廢止了SHA-1的使用,并在2013年不允許將其用于數(shù)字簽名。

所有主要的網(wǎng)絡(luò)瀏覽器廠商在2017年都停止接受SHA-1 SSL證書(shū)。

SHA2

SHA-2(Secure Hash Algorithm 2)也是由美國(guó)國(guó)家安全局(NSA)設(shè)計(jì)的一組加密哈希函數(shù),于2001年首次公布,它們采用Merkle-Damg?rd結(jié)構(gòu)。

SHA-2和SHA-1相比,包括了重大的變化。SHA-2系列包含六個(gè)哈希函數(shù),分別是SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、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%;" />

我們看下這幾個(gè)函數(shù)表示什么意思:

image
image
image
image

SHA3

2006年,NIST組織了NIST哈希函數(shù)競(jìng)賽,以創(chuàng)建一個(gè)新的哈希標(biāo)準(zhǔn)SHA-3。SHA-3并不是要取代SHA-2,因?yàn)槟壳斑€沒(méi)有證明對(duì)SHA-2的重大攻擊。但是由于MD5、SHA-0和SHA-1的成功攻擊,NIST認(rèn)為需要一種可替代的、不同的加密哈希,這就是SHA-3。

在這個(gè)比賽中,最終Keccak算法勝出,被選為SHA3的標(biāo)準(zhǔn)。

SHA3算法是基于海綿結(jié)構(gòu)的,我們看下海綿結(jié)構(gòu)的工作原理:

image

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

P表示的是輸入的字符串,Z表示的時(shí)候輸出字符串。

一個(gè)海綿函數(shù)由三部分組成,分別是state, 函數(shù)f和填充函數(shù)pad。

state就是上圖的r+c部分,r被稱(chēng)為Bitrate, c被稱(chēng)為Capacity。

P被分成n份,每一份都會(huì)跟Bitrate進(jìn)行異或操作,如果P的長(zhǎng)度不是Bitrate的整數(shù)倍,那么需要使用Pad函數(shù)進(jìn)行填充。

每一輪,Bitrate跟P進(jìn)行異或操作的結(jié)果作為最新的Bitrate, 然后生成新的state,然后這個(gè)state又被f(state)來(lái)替換。

其中函數(shù) f 是 從n個(gè){0,1} 到n個(gè){0,1}的映射。

就這樣一輪一輪進(jìn)行下去,直到所有的P都參與了運(yùn)算。

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

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

> 最通俗的解讀,最深刻的干貨,最簡(jiǎn)潔的教程,眾多你不知道的小技巧等你來(lái)發(fā)現(xiàn)!

> 歡迎關(guān)注我的公眾號(hào):「程序那些事」,懂技術(shù),更懂你!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.1哈希算法 1.1.1Hash的定義 hash (哈?;蛏⒘校┧惴ㄊ荌T領(lǐng)域非?;A(chǔ)也非常重要的一類(lèi)算法??梢?..
    qfguankefeng閱讀 515評(píng)論 0 1
  • 本文分為7個(gè)部分,第1部分介紹密碼學(xué)的基本概念,第2部分講解常見(jiàn)的對(duì)稱(chēng)加密算法,第3部分講解常見(jiàn)的非對(duì)稱(chēng)加密算法,...
    youclavier閱讀 3,651評(píng)論 0 6
  • 1. HASH算法簡(jiǎn)介 1.1 HASH是什么? Hash算法(也叫散列算法) Hash,一般翻譯做“散列”,也有...
    孔雨露閱讀 630評(píng)論 0 5
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂(lè)有人憂(yōu)愁,有人驚喜有人失落,有的覺(jué)得收獲滿(mǎn)滿(mǎn)有...
    陌忘宇閱讀 8,820評(píng)論 28 54
  • 信任包括信任自己和信任他人 很多時(shí)候,很多事情,失敗、遺憾、錯(cuò)過(guò),源于不自信,不信任他人 覺(jué)得自己做不成,別人做不...
    吳氵晃閱讀 6,360評(píng)論 4 8

友情鏈接更多精彩內(nèi)容