欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

哈希及哈希算法的介紹

算法與數(shù)據(jù)結(jié)構(gòu) ? 來源:未知 ? 作者:胡薇 ? 2018-05-22 14:11 ? 次閱讀

聊到區(qū)塊鏈的時(shí)候也少不了會(huì)聽到“哈?!?、“哈希函數(shù)”、“哈希算法”,是不是聽得一頭霧水?別急,這一講我們來講講什么是哈希算法。

1

哈希是一種加密算法

哈希函數(shù)(Hash Function),也稱為散列函數(shù)或雜湊函數(shù)。哈希函數(shù)是一個(gè)公開函數(shù),可以將任意長(zhǎng)度的消息M映射成為一個(gè)長(zhǎng)度較短且長(zhǎng)度固定的值H(M),稱H(M)為哈希值、散列值(Hash Value)、雜湊值或者消息摘要(Message Digest)。它是一種單向密碼體制,即一個(gè)從明文到密文的不可逆映射,只有加密過程,沒有解密過程。

它的函數(shù)表達(dá)式為:h=H(m)

無論輸入是什么數(shù)字格式、文件有多大,輸出都是固定長(zhǎng)度的比特串。以比特幣使用的Sh256算法為例,無論輸入是什么數(shù)據(jù)文件,輸出就是256bit。

每個(gè)bit就是一位0或者1,256bit就是256個(gè)0或者1二進(jìn)制數(shù)字串,用16進(jìn)制數(shù)字表示的話,就是多少位呢?

16等于2的4次方,所以每一位16進(jìn)制數(shù)字可以代表4位bit。那么,256位bit用16進(jìn)制數(shù)字表示,當(dāng)然是256除以4等于64位。

于是你通常看到的哈希值,就是這樣的了:

00740f40257a13bf03b40f54a9fe398c79a664bb21cfa2870ab07888b21eeba8。

這是從btc.com上隨便拷貝的一個(gè)哈希值,不放心的話你可以數(shù)一下,是不是64位~

2

Hash函數(shù)的特點(diǎn)

Hash函數(shù)具有如下特點(diǎn)。

易壓縮:對(duì)于任意大小的輸入x,Hash值的長(zhǎng)度很小,在實(shí)際應(yīng)用中,函數(shù)H產(chǎn)生的Hash值其長(zhǎng)度是固定的。

易計(jì)算:對(duì)于任意給定的消息,計(jì)算其Hash值比較容易。

單向性:對(duì)于給定的Hash值,要找到使得在計(jì)算上是不可行的,即求Hash的逆很困難。在給定某個(gè)哈希函數(shù)H和哈希值H(M)的情況下,得出M在計(jì)算上是不可行的。即從哈希輸出無法倒推輸入的原始數(shù)值。這是哈希函數(shù)安全性的基礎(chǔ)。

抗碰撞性:理想的Hash函數(shù)是無碰撞的,但在實(shí)際算法的設(shè)計(jì)中很難做到這一點(diǎn)。

有兩種抗碰撞性:一種是弱抗碰撞性,即對(duì)于給定的消息,要發(fā)現(xiàn)另一個(gè)消息,滿足在計(jì)算上是不可行的;另一種是強(qiáng)抗碰撞性,即對(duì)于任意一對(duì)不同的消息,使得在計(jì)算上也是不可行的。

高靈敏性:這是從比特位角度出發(fā)的,指的是1比特位的輸入變化會(huì)造成1/2的比特位發(fā)生變化。消息M的任何改變都會(huì)導(dǎo)致哈希值H(M)發(fā)生改變。即如果輸入有微小不同,哈希運(yùn)算后的輸出一定不同。

3

哈希算法

把網(wǎng)址A,轉(zhuǎn)換成數(shù)字1。網(wǎng)址B,轉(zhuǎn)換成數(shù)字2。

一個(gè)網(wǎng)址X,轉(zhuǎn)換成數(shù)字N,根據(jù)數(shù)字N作為下標(biāo),就可以快速地查找出網(wǎng)址X的信息。這個(gè)轉(zhuǎn)換的過程就是哈希算法。

比如這里有一萬首歌,給你一首新的歌X,要求你確認(rèn)這首歌是否在那一萬首歌之內(nèi)。

無疑,將一萬首歌一個(gè)一個(gè)比對(duì)非常慢。但如果存在一種方式,能將一萬首歌的每首數(shù)據(jù)濃縮到一個(gè)數(shù)字(稱為哈希碼)中,于是得到一萬個(gè)數(shù)字,那么用同樣的算法計(jì)算新的歌X的編碼,看看歌X的編碼是否在之前那一萬個(gè)數(shù)字中,就能知道歌X是否在那一萬首歌中。

作為例子,如果要你組織那一萬首歌,一個(gè)簡(jiǎn)單的哈希算法就是讓歌曲所占硬盤的字節(jié)數(shù)作為哈希碼。這樣的話,你可以讓一萬首歌“按照大小排序”,然后遇到一首新的歌,只要看看新的歌的字節(jié)數(shù)是否和已有的一萬首歌中的某一首的字節(jié)數(shù)相同,就知道新的歌是否在那一萬首歌之內(nèi)了。

一個(gè)可靠的哈希算法,應(yīng)該滿足:

對(duì)于給定的數(shù)據(jù)M,很容易算出哈希值X=F(M);

根據(jù)X很難反算出M;

很難找到M和N使得F(N)=F(M)

前面提到哈希函數(shù)具有抗碰撞性,碰撞性就是指有人實(shí)現(xiàn)找出一奇一偶使得哈希結(jié)果一致,但這在計(jì)算上是不可行的。

首先,把大空間的消息壓縮到小空間上,碰撞肯定是存在的。假設(shè)哈希值長(zhǎng)度固定為256位,如果順序取1,2,…2^256+1, 這2^256+1個(gè)輸入值,逐一計(jì)算其哈希值,肯定能找到兩個(gè)輸入值使得其哈希值相同。但不要高興的太早,因?yàn)槟愕糜袝r(shí)間把它算出來,才是你的。

根據(jù)生日悖論,如果隨機(jī)挑選其中的2^128+1輸入,則有99.8%的概率發(fā)現(xiàn)至少一對(duì)碰撞輸入。那么對(duì)于哈希值長(zhǎng)度為256位的哈希函數(shù),平均需要完成2^128次哈希計(jì)算,才能找到碰撞對(duì)。如果計(jì)算機(jī)每秒進(jìn)行10000次哈希計(jì)算,需要約10^27年才能完成2^128次哈希計(jì)算。在區(qū)塊鏈中,哈希函數(shù)的抗碰撞性用來做區(qū)塊和交易的完整性驗(yàn)證,一有篡改就能被識(shí)別出來。

前面提到挖礦需要礦工通過隨機(jī)數(shù)不斷計(jì)算得到小于給定難度值的數(shù)值。難度值(difficulty)是礦工們挖礦時(shí)的重要參考指標(biāo),它決定了礦工大約需要經(jīng)過多少次哈希運(yùn)算才能產(chǎn)生一個(gè)合法的區(qū)塊。比特幣的區(qū)塊大約每10分鐘生成一個(gè),為了讓新區(qū)塊的產(chǎn)生基本保持這個(gè)速率,難度值必須根據(jù)全網(wǎng)算力的變化進(jìn)行調(diào)整。

哈希函數(shù)通過調(diào)整難度值來確保每個(gè)區(qū)塊挖出的時(shí)間都大約在10分鐘,哈希函數(shù)計(jì)算的難度值對(duì)保證區(qū)塊鏈系統(tǒng)的安全意義重大。正如美國(guó)的幾位計(jì)算機(jī)科學(xué)家在共同所著的書中所寫的:“哈希密碼是密碼學(xué)中的瑞士軍刀,它們?cè)诒姸喔骶咛厣膽?yīng)用中找到了一席之地,為了保證安全,不同的應(yīng)用會(huì)要求不同的哈希函數(shù)特點(diǎn)。事實(shí)已經(jīng)證明,要確定一系列哈希函數(shù)以全面達(dá)成可證安全極度困難?!?/p>

工作量證明需要有一個(gè)目標(biāo)值。比特幣工作量證明的目標(biāo)值(target)的計(jì)算公式如下:

目標(biāo)值=最大目標(biāo)值 / 難度值

其中,最大目標(biāo)值為一個(gè)恒定值:

0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

目標(biāo)值的大小與難度值成反比。比特幣工作量證明的達(dá)成就是礦工計(jì)算出來的區(qū)塊哈希值必須小于目標(biāo)值。

我們也可以簡(jiǎn)單理解成,比特幣工作量證明的過程,就是通過不停地變換區(qū)塊頭(即嘗試不同的隨機(jī)值)作為輸入進(jìn)行SHA256哈希運(yùn)算,找出一個(gè)特定格式哈希值的過程(即要求有一定數(shù)量的前導(dǎo)0)。而要求的前導(dǎo)0的個(gè)數(shù)越多,代表難度越大。

4

舉個(gè)栗子幫助理解

▌場(chǎng)景一、小星和阿呆在籃球場(chǎng)

小星:阿呆,你是不是口渴了,你要不要去買水喝,順便幫我買一瓶哈。

阿呆:呵呵,你的小心思我還不知道,你自己也口渴了吧,你去,我不去。

小星:哎哎,咱們不扯這些沒用的,來拋硬幣,好不好,正面你去,反面我去,公平吧,如何?

阿呆:好吧。

………

▌場(chǎng)景二、小星與阿呆即時(shí)聊天中

阿呆:小星,今天來我家玩,來的路上,有一家披薩店,很好吃,順便帶一點(diǎn)哈。

小星:哦,要不你來我家玩吧,你順便帶上披薩。

阿呆:小星,你竟然都這么說了,看來只能拋硬幣解決了。

小星:丫的,這個(gè)怎么拋,我怎么知道你有沒有搞鬼。

阿呆:嗯,那到也是,要不這樣。

1.考慮對(duì)結(jié)果加密

阿呆:我心中想一個(gè)數(shù),假設(shè)為A,然后A在乘以一個(gè)數(shù)B,得到結(jié)果C。A是我的密鑰,我把結(jié)果C告訴你。你來猜A是奇數(shù)還是偶數(shù),猜中了,算你贏。

小星:這不行,如果你告訴我C是12,我猜A是奇數(shù),你可以說A是4,B是3。我猜A是偶數(shù),你可以說A是3,B是4。要不你告訴我C是多少的時(shí)候,也告訴我B是多少。

阿呆:那這不行,告訴你C和B,不等于告訴你A是多少了,還猜個(gè)屁。不行得換個(gè)方式。

2.不可逆加密

阿呆:小星,你看這樣可以不,我想一個(gè)A,經(jīng)過下面的過程:

1.A+123=B2.B^2=C3.取C中第2~4位數(shù),組成一個(gè)3位數(shù)D4.D/12的結(jié)果求余數(shù),得到E

阿呆:我把E和上述計(jì)算方式都告訴你,你猜A是奇數(shù)還是偶數(shù),然后我告訴你A是多少,你可以按上述的計(jì)算過程來驗(yàn)證我是否有說謊。

小星:嗯,我想想,假如阿呆你想的A為5,那么:

5+123=128128^2=16384D=638 E=638mod12=53

(mod表示除法的求余數(shù))

小星:咦,厲害了,一個(gè)A值對(duì)應(yīng)一個(gè)唯一的E值,根據(jù)E還推算不出來A。你太賤了,好吧,這個(gè)算公平,誰撒謊都能被識(shí)別出來。

小星:阿呆,你出題吧 ……

這種丟掉一部分信息的加密方式稱為“單向加密”,也叫哈希算法。

5

常見的哈希算法

1、SHA-1算法

SHA-1的輸入是最大長(zhǎng)度小于264位的消息,輸入消息以512位的分組為單位進(jìn)行處理,輸出是160位的消息摘要。SHA-1具有實(shí)現(xiàn)速度高、容易實(shí)現(xiàn)、應(yīng)用范圍廣等優(yōu)點(diǎn),其算法描述如下。

對(duì)輸入的消息進(jìn)行填充:經(jīng)過填充后,消息的長(zhǎng)度模512應(yīng)與448同余。填充的方式為第一位是1,余下各位都為0。再將消息被填充前的長(zhǎng)度以big-endian的方式附加在上一步留下的最后64位中。該步驟是必須的,即使消息的長(zhǎng)度已經(jīng)是所希望的長(zhǎng)度。填充的長(zhǎng)度范圍是1到512。

初始化緩沖區(qū):可以用160位來存放Hash函數(shù)的初始變量、中間摘要及最終摘要,但首先必須進(jìn)行初始化,對(duì)每個(gè)32位的初始變量賦值,即:

進(jìn)入消息處理主循環(huán),處理消息塊:一次處理512位的消息塊,總共進(jìn)行4輪處理,每輪進(jìn)行20次操作,如圖所示。這4輪處理具有類似的結(jié)構(gòu),但每輪所使用的輔助函數(shù)和常數(shù)都各不相同。每輪的輸入均為當(dāng)前處理的消息分組和緩沖區(qū)的當(dāng)前值A(chǔ)、B、C、D、E,輸出仍放在緩沖區(qū)以替代舊的A、B、C、D、E的值。第四輪的輸出再與第一輪的輸入CVq相加,以產(chǎn)生CVq+1,其中加法是緩沖區(qū)5個(gè)字CVq中的每個(gè)字與中相應(yīng)的字模232相加。

圖 單個(gè)512位消息塊的處理流程

輸出:所有的消息分組都被處理完之后,最后一個(gè)分組的輸出即為得到的消息摘要值。

SHA-1的步函數(shù)如圖所示,它是SHA-1最為重要的函數(shù),也是SHA-1中最關(guān)鍵的部件。

圖 SHA-1的步函數(shù)

SHA-1每運(yùn)行一次步函數(shù),A、B、C、D的值就會(huì)依次賦值給B、C、D、E這幾個(gè)寄存器。同時(shí),A、B、C、D、E的輸入值、常數(shù)和子消息塊在經(jīng)過步函數(shù)運(yùn)算后就會(huì)賦值給A。

其中,t是步數(shù),0≤t≤79,Wt是由當(dāng)前512位長(zhǎng)的分組導(dǎo)出的一個(gè)32位的字,Kt是加法常量。

基本邏輯函數(shù)f的輸入是3個(gè)32位的字,輸出是一個(gè)32位的字,其函數(shù)表示如下。

對(duì)于每個(gè)輸入分組導(dǎo)出的消息分組wt,前16個(gè)消息字wt(0≤t≤15)即為消息輸入分組對(duì)應(yīng)的16個(gè)32位字,其余wt(0≤t≤79)可按如下公式得到:

其中,ROTLs表示左循環(huán)移位s位,如圖所示。

圖 SHA-1的80個(gè)消息字的產(chǎn)生過程

2、SHA-2算法

SHA-2系列Hash算法,其輸出長(zhǎng)度可取SHA-2系列哈希算法的輸出長(zhǎng)度可取224位、256位、384位、512位,分別對(duì)應(yīng)SHA-224、SHA-256、SHA-384、SHA-512。它還包含另外兩個(gè)算法:SHA-512/224、SHA-512/256。比之前的Hash算法具有更強(qiáng)的安全強(qiáng)度和更靈活的輸出長(zhǎng)度,其中SHA-256是常用的算法。下面將對(duì)前四種算法進(jìn)行簡(jiǎn)單描述。

SHA-256算法

SHA-256算法的輸入是最大長(zhǎng)度小于264位的消息,輸出是256位的消息摘要,輸入消息以512位的分組為單位進(jìn)行處理。算法描述如下。

(1)消息的填充

添加一個(gè)“1”和若干個(gè)“0”使其長(zhǎng)度模512與448同余。在消息后附加64位的長(zhǎng)度塊,其值為填充前消息的長(zhǎng)度。從而產(chǎn)生長(zhǎng)度為512整數(shù)倍的消息分組,填充后消息的長(zhǎng)度最多為264位。

(2)初始化鏈接變量

鏈接變量的中間結(jié)果和最終結(jié)果存儲(chǔ)于256位的緩沖區(qū)中,緩沖區(qū)用8個(gè)32位的寄存器A、B、C、D、E、F、G和H表示,輸出仍放在緩沖區(qū)以代替舊的A、B、C、D、E、F、G、H。首先要對(duì)鏈接變量進(jìn)行初始化,初始鏈接變量存儲(chǔ)于8個(gè)寄存器A、B、C、D、E、F、G和H中:

初始鏈接變量是取自前8個(gè)素?cái)?shù)(2、3、5、7、11、13、17、19)的平方根的小數(shù)部分其二進(jìn)制表示的前32位。

(3)處理主循環(huán)模塊

消息塊是以512位分組為單位進(jìn)行處理的,要進(jìn)行64步循環(huán)操作(如圖所示)。每一輪的輸入均為當(dāng)前處理的消息分組和得到的上一輪輸出的256位緩沖區(qū)A、B、C、D、E、F、G、H的值。每一步中均采用了不同的消息字和常數(shù),下面將給出它們的獲取方法。

圖SHA-256的壓縮函數(shù)

(4)得出最終的Hash值

所有512位的消息塊分組都處理完以后,最后一個(gè)分組處理后得到的結(jié)果即為最終輸出的256位的消息摘要。

步函數(shù)是SHA-256中最為重要的函數(shù),也是SHA-256中最關(guān)鍵的部件。其運(yùn)算過程如圖所示。

圖SHA-256的步函數(shù)

根據(jù)T1、T2的值,對(duì)寄存器A、E進(jìn)行更新。A、B、C、E、F、G的輸入值則依次賦值給B、C、D、F、G、H。

Kt的獲取方法是取前64個(gè)素?cái)?shù)(2,3,5,7,……)立方根的小數(shù)部分,將其轉(zhuǎn)換為二進(jìn)制,然后取這64個(gè)數(shù)的前64位作為Kt。其作用是提供了64位隨機(jī)串集合以消除輸入數(shù)據(jù)里的任何規(guī)則性。

對(duì)于每個(gè)輸入分組導(dǎo)出的消息分組Wt,前16個(gè)消息字Wt(0≤t≤15)直接按照消息輸入分組對(duì)應(yīng)的16個(gè)32位字,其他的則按照如下公式來計(jì)算得出:

圖SHA-256的64個(gè)消息字的生成過程

SHA-512算法

SHA-512是SHA-2中安全性能較高的算法,主要由明文填充、消息擴(kuò)展函數(shù)變換和隨機(jī)數(shù)變換等部分組成,初始值和中間計(jì)算結(jié)果由8個(gè)64位的移位寄存器組成。該算法允許輸入的最大長(zhǎng)度是2128位,并產(chǎn)生一個(gè)512位的消息摘要,輸入消息被分成若干個(gè)1024位的塊進(jìn)行處理,具體參數(shù)為:消息摘要長(zhǎng)度為512位;消息長(zhǎng)度小于2128位;消息塊大小為1024位;消息字大小為64位;步驟數(shù)為80步。下圖顯示了處理消息、輸出消息摘要的整個(gè)過程,該過程的具體步驟如下。

圖SHA-512的整體結(jié)構(gòu)

消息填充:填充一個(gè)“1”和若干個(gè)“0”,使其長(zhǎng)度模1024與896同余,填充位數(shù)為0-1023,填充前消息的長(zhǎng)度以一個(gè)128位的字段附加到填充消息的后面,其值為填充前消息的長(zhǎng)度。

鏈接變量初始化:鏈接變量的中間結(jié)果和最終結(jié)果都存儲(chǔ)于512位的緩沖區(qū)中,緩沖區(qū)用8個(gè)64位的寄存器A、B、C、D、E、F、G、H表示。初始鏈接變量也存儲(chǔ)于8個(gè)寄存器A、B、C、D、E、F、G、H中,其值為:

初始鏈接變量采用big-endian方式存儲(chǔ),即字的最高有效字節(jié)存儲(chǔ)于低地址位置。初始鏈接變量取自前8個(gè)素?cái)?shù)的平方根的小數(shù)部分其二進(jìn)制表示的前64位。

主循環(huán)操作:以1024位的分組為單位對(duì)消息進(jìn)行處理,要進(jìn)行80步循環(huán)操作。每一次迭代都把512位緩沖區(qū)的值A(chǔ)、B、C、D、E、F、G、H作為輸入,其值取自上一次迭代壓縮的計(jì)算結(jié)果,每一步計(jì)算中均采用了不同的消息字和常數(shù)。

計(jì)算最終的Hash值:消息的所有N個(gè)1024位的分組都處理完畢之后,第N次迭代壓縮輸出的512位鏈接變量即為最終的Hash值。

步函數(shù)是SHA-512中最關(guān)鍵的部件,其運(yùn)算過程類似SHA-256。每一步的計(jì)算方程如下所示,B、C、D、F、G、H的更新值分別是A、B、C、E、F、G的輸入狀態(tài)值,同時(shí)生成兩個(gè)臨時(shí)變量用于更新A、E寄存器。

對(duì)于80步操作中的每一步t,使用一個(gè)64位的消息字Wt,其值由當(dāng)前被處理的1024位消息分組Mi導(dǎo)出,導(dǎo)出方法如圖所示。前16個(gè)消息字Wt(0≤t≤15)分別對(duì)應(yīng)消息輸入分組之后的16個(gè)32位字,其他的則按照如下公式來計(jì)算得出:

圖SHA-512的80個(gè)消息字生成的過程

其中,

式中,ROTRn(X)表示對(duì)64位的變量x循環(huán)右移n位,SHRn(X)表示對(duì)64位的變量x右移n位。

從圖可以看出,在前16步處理中,Wt的值等于消息分組中相對(duì)應(yīng)的64位字,而余下的64步操作中,其值是由前面的4個(gè)值計(jì)算得到的,4個(gè)值中的兩個(gè)要進(jìn)行移位和循環(huán)移位操作。

Kt的獲取方法是取前80個(gè)素?cái)?shù)(2,3,5,7,……)立方根的小數(shù)部分,將其轉(zhuǎn)換為二進(jìn)制,然后取這80個(gè)數(shù)的前64位作為Kt,其作用是提供了64位隨機(jī)串集合以消除輸入數(shù)據(jù)里的任何規(guī)則性。

SHA-224與SHA-384

SHA-256和SHA-512是很新的Hash函數(shù),前者定義一個(gè)字為32位,后者則定義一個(gè)字為64位。實(shí)際上二者的結(jié)構(gòu)是相同的,只是在循環(huán)運(yùn)行的次數(shù)、使用常數(shù)上有所差異。SHA-224及SHA-384則是前述兩種Hash函數(shù)的截短型,它們利用不同的初始值做計(jì)算。

SHA-224的輸入消息長(zhǎng)度跟SHA-256的也相同,也是小于264位,其分組的大小也是512位,其處理流程跟SHA-256也基本一致,但是存在如下兩個(gè)不同的地方。

SHA-224的消息摘要取自A、B、C、D、E、F、G共7個(gè)寄存器的比特字,而SHA-256的消息摘要取自A、B、C、D、E、F、G、H共8個(gè)寄存器的32比特字。

SHA-224的初始鏈接變量與SHA-256的初始鏈接變量不同,它采用高端格式存儲(chǔ),但其初始鏈接變量的獲取方法是取前第9至16個(gè)素?cái)?shù)(23、29、31、37、41、43、47、53)的平方根的小數(shù)部分其二進(jìn)制表示的第二個(gè)32位,SHA-224的初始鏈接變量如下:

SHA-224的詳細(xì)計(jì)算步驟與SHA-256一致。

SHA-384的輸入消息長(zhǎng)度跟SHA-512相同,也是小于2128位,而且其分組的大小也是1024位,處理流程跟SHA-512也基本一致,但是也有如下兩處不同的地方。

SHA-384的384位的消息摘要取自A、B、C、D、E、F共6個(gè)64比特字,而SHA-512的消息摘要取自A、B、C、D、E、F、G、H共8個(gè)64比特字。

SHA-384的初始鏈接變量與SHA-512的初始鏈接變量不同,它也采用高端格式存儲(chǔ),但其初始鏈接變量的獲取方法是取前9至16個(gè)素?cái)?shù)(23、29、31、37、41、43、47、53)的平方根的小數(shù)部分其二進(jìn)制表示的前64位,SHA-384的初始鏈接變量如下:

SHA-384的詳細(xì)計(jì)算步驟與SHA-512的相同。

3、SHA-3算法

SHA-3算法整體采用Sponge結(jié)構(gòu),分為吸收和榨取兩個(gè)階段。SHA-3的核心置換f作用在5×5×64的三維矩陣上。整個(gè)f共有24輪,每輪包括5個(gè)環(huán)節(jié)θ、ρ、π、χ、τ。算法的5個(gè)環(huán)節(jié)分別作用于三維矩陣的不同維度之上。θ環(huán)節(jié)是作用在列上的線性運(yùn)算;ρ環(huán)節(jié)是作用在每一道上的線性運(yùn)算,將每一道上的64比特進(jìn)行循環(huán)移位操作;π環(huán)節(jié)是將每道上的元素整體移到另一道上的線性運(yùn)算;χ環(huán)節(jié)是作用在每一行上的非線性運(yùn)算,相當(dāng)于將每一行上的5比特替換為另一個(gè)5比特;τ環(huán)節(jié)是加常數(shù)環(huán)節(jié)。

目前,公開文獻(xiàn)對(duì)SHA-3算法的安全性分析主要是從以下幾個(gè)方面來展開的。

對(duì)SHA-3算法的碰撞攻擊、原像攻擊和第二原像攻擊。

對(duì)SHA-3算法核心置換的分析,這類分析主要針對(duì)算法置換與隨機(jī)置換的區(qū)分來展開。

對(duì)SHA-3算法的差分特性進(jìn)行展開,主要研究的是SHA-3置換的高概率差分鏈,并構(gòu)筑差分區(qū)分器。

Keccak算法的立體加密思想和海綿結(jié)構(gòu),使SHA-3優(yōu)于SHA-2,甚至AES。Sponge函數(shù)可建立從任意長(zhǎng)度輸入到任意長(zhǎng)度輸出的映射。

4、RIPEMD160算法

RIPEMD(RACE Integrity Primitives Evaluation Message Digest),即RACE原始完整性校驗(yàn)消息摘要。RIPEMD使用MD4的設(shè)計(jì)原理,并針對(duì)MD4的算法缺陷進(jìn)行改進(jìn),1996年首次發(fā)布RIPEMD-128版本,它在性能上與SHA-1相類似。

RIPEMD-160是對(duì)RIPEMD-128的改進(jìn),并且是RIPEMD中最常見的版本。RIPEMD-160輸出160位的Hash值,對(duì)160位Hash函數(shù)的暴力碰撞搜索攻擊需要280次計(jì)算,其計(jì)算強(qiáng)度大大提高。RIPEMD-160的設(shè)計(jì)充分吸取了MD4、MD5、RIPEMD-128的一些性能,使其具有更好的抗強(qiáng)碰撞能力。它旨在替代128位Hash函數(shù)MD4、MD5和RIPEMD。

RIPEMD-160使用160位的緩存區(qū)來存放算法的中間結(jié)果和最終的Hash值。這個(gè)緩存區(qū)由5個(gè)32位的寄存器A、B、C、D、E構(gòu)成。寄存器的初始值如下所示:

數(shù)據(jù)存儲(chǔ)時(shí)采用低位字節(jié)存放在低地址上的形式。

處理算法的核心是一個(gè)有10個(gè)循環(huán)的壓縮函數(shù)模塊,其中每個(gè)循環(huán)由16個(gè)處理步驟組成。在每個(gè)循環(huán)中使用不同的原始邏輯函數(shù),算法的處理分為兩種不同的情況,在這兩種情況下,分別以相反的順序使用5個(gè)原始邏輯函數(shù)。每一個(gè)循環(huán)都以當(dāng)前分組的消息字和160位的緩存值A(chǔ)、B、C、D、E為輸入得到新的值。每個(gè)循環(huán)使用一個(gè)額外的常數(shù),在最后一個(gè)循環(huán)結(jié)束后,兩種情況的計(jì)算結(jié)果A、B、C、D、E和A′、B′、C′、D′、E′及鏈接變量的初始值經(jīng)過一次相加運(yùn)算產(chǎn)生最終的輸出。對(duì)所有的512位的分組處理完成之后,最終產(chǎn)生的160位輸出即為消息摘要。

除了128位和160位的版本之外,RIPEMD算法也存在256位和320位的版本,它們共同構(gòu)成RIPEMD家族的四個(gè)成員:RIPEMD-128、RIPEMD-160、RIPEMD-256、RIPEMD-320。其中128位版本的安全性已經(jīng)受到質(zhì)疑,256位和320位版本減少了意外碰撞的可能性,但是相比于RIPEMD-128和RIPEMD-160,它們不具有較高水平的安全性,因?yàn)樗麄冎皇窃?28位和160位的基礎(chǔ)上,修改了初始參數(shù)和s-box來達(dá)到輸出為256位和320位的目的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 哈希函數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    43

    瀏覽量

    9502
  • 哈希算法
    +關(guān)注

    關(guān)注

    1

    文章

    56

    瀏覽量

    10784

原文標(biāo)題:據(jù)說,80%的人都搞不懂哈希算法

文章出處:【微信號(hào):TheAlgorithm,微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于雙字哈希結(jié)構(gòu)的匹配算法

    中文分詞是計(jì)算機(jī)進(jìn)行文本分析的關(guān)鍵技術(shù)?;谔岣叻衷~效率以滿足日益增長(zhǎng)的文本分析需求,通過分析常用的基于詞典的機(jī)械分詞算法與詞典機(jī)制的優(yōu)缺點(diǎn),在對(duì)最大匹配算法進(jìn)行改進(jìn)的同時(shí),采用雙字哈希詞典設(shè)計(jì)了
    發(fā)表于 11-03 17:16 ?6次下載
    基于雙字<b class='flag-5'>哈希</b>結(jié)構(gòu)的匹配<b class='flag-5'>算法</b>

    哈希算法的基本含義與分類

    根據(jù)維基百科的定義,哈希函數(shù)要做的事情是給一個(gè)任意大小的數(shù)據(jù)生成出一個(gè)固定長(zhǎng)度的數(shù)據(jù),作為它的映射。所謂映射就是一一對(duì)應(yīng)。一個(gè)可靠的哈希算法要滿足三點(diǎn)。
    發(fā)表于 12-26 11:20 ?4074次閱讀
    <b class='flag-5'>哈希</b><b class='flag-5'>算法</b>的基本含義與分類

    什么是哈希算法用途是什么

    哈希算法又稱散列算法,是指某種從任意長(zhǎng)度的數(shù)據(jù)中創(chuàng)建數(shù)字“指紋”的算法。它可以將任意長(zhǎng)度的數(shù)據(jù)映射為固定長(zhǎng)度的數(shù)據(jù),這個(gè)映射后的數(shù)據(jù)我們稱之為哈希
    發(fā)表于 01-11 11:01 ?1.1w次閱讀

    哈希算法SHA-512的基本概念及特性解析

    哈希算法被廣泛應(yīng)用于網(wǎng)絡(luò)安全、數(shù)字證書甚至區(qū)塊鏈等領(lǐng)域。由于哈希算法在數(shù)字安全和密碼學(xué)中扮演著如此重要的角色,對(duì)于稱為SHA-512的哈希
    發(fā)表于 01-24 11:22 ?2.4w次閱讀

    什么是哈希算法它的作用是什么

    哈希音譯自“Hash”,又名為“散列”。本質(zhì)上是一種計(jì)算機(jī)程序,可接收任意長(zhǎng)度的信心輸入,然后通過哈希算法,創(chuàng)建小的數(shù)字“指紋”的方式。例如數(shù)字與字母的結(jié)合,輸出的就為“哈希值”。從數(shù)
    發(fā)表于 03-08 11:21 ?1.9w次閱讀

    哈希算法的前世、今生和未來

    當(dāng)新人在學(xué)區(qū)塊鏈技術(shù)的時(shí)候,都會(huì)聽到哈希哈希算法,這似乎是無處不在的安全性保證。例如比特幣或者以太坊這種運(yùn)行去中心化網(wǎng)絡(luò)和共識(shí)的機(jī)器,都會(huì)有上萬個(gè)節(jié)點(diǎn)通過P2P連接,并且需要“無需可信”和可驗(yàn)證的效率。
    的頭像 發(fā)表于 12-25 18:54 ?1361次閱讀

    基于哈希存儲(chǔ)與事務(wù)加權(quán)的Apriori算法

    Aprior算法能夠挖掘事物之間的關(guān)聯(lián)關(guān)系,但傳統(tǒng)Δ prior算法每計(jì)算一次候選集的支持度,都需要遍歷原始事務(wù)數(shù)據(jù)庫,多次掃描數(shù)據(jù)庫導(dǎo)致其效率較低。為此,提岀一種基于哈希存儲(chǔ)與事務(wù)加權(quán)的改進(jìn)
    發(fā)表于 03-17 11:22 ?10次下載
    基于<b class='flag-5'>哈希</b>存儲(chǔ)與事務(wù)加權(quán)的Apriori<b class='flag-5'>算法</b>

    基于雙峰高斯分布的深度哈希檢索算法

      哈希檢索因?yàn)榫哂写鎯?chǔ)空間小、檢索速度快的特點(diǎn)而受到廣泛關(guān)注。目前深度哈希算法存在2個(gè)主要問題深度哈希編碼本質(zhì)上是二值化特征,并且編碼長(zhǎng)度較短,存在特征表達(dá)能力有限的問題;已有的深度
    發(fā)表于 04-29 14:31 ?16次下載
    基于雙峰高斯分布的深度<b class='flag-5'>哈希</b>檢索<b class='flag-5'>算法</b>

    基于機(jī)器學(xué)習(xí)的哈希檢索算法綜述

    基于機(jī)器學(xué)習(xí)的哈希檢索算法綜述
    發(fā)表于 06-10 11:05 ?5次下載

    區(qū)塊哈希游戲開發(fā)邏輯(上鏈)哈希競(jìng)猜游戲開發(fā)

    什么是哈希/ Hash 哈希又稱作“散列”,是一種數(shù)學(xué)計(jì)算機(jī)程序,它接收任何一組任意長(zhǎng)度的輸入信息,通過哈希算法變換成固定長(zhǎng)度的數(shù)據(jù)指紋輸出形式,如字母和數(shù)字的組合,該輸出就是“
    的頭像 發(fā)表于 06-02 11:39 ?1388次閱讀

    哈希算法是什么,哈希游戲系統(tǒng)開發(fā)方案

    什么是哈希/Hash 哈希又稱作“散列”,是一種數(shù)學(xué)計(jì)算機(jī)程序,它接收任何一組任意長(zhǎng)度的輸入信息,通過哈希算法變換成固定長(zhǎng)度的數(shù)據(jù)指紋輸出形式,如字母和數(shù)字的組合,該輸出就是“
    的頭像 發(fā)表于 06-14 09:14 ?1331次閱讀

    哈希是什么,常見的哈希算法有哪些

    什么是哈希? 哈希又稱作“散列”,是一種數(shù)學(xué)計(jì)算機(jī)程序,它接收任何一組任意長(zhǎng)度的輸入信息,通過哈希算法變換成固定長(zhǎng)度的數(shù)據(jù)指紋輸出形式,如字母和數(shù)字的組合,該輸出就是“
    的頭像 發(fā)表于 06-23 14:57 ?7485次閱讀

    區(qū)塊哈希競(jìng)猜游戲系統(tǒng)開發(fā)加密哈希算法概述

    ? 哈希算法(Hash function)又稱散列算法,是一種從任何數(shù)據(jù)(文件、字符等)中創(chuàng)建小的數(shù)字“指紋”的方法。哈希算法只需滿足把一個(gè)
    的頭像 發(fā)表于 06-24 09:51 ?1198次閱讀
    區(qū)塊<b class='flag-5'>哈希</b>競(jìng)猜游戲系統(tǒng)開發(fā)加密<b class='flag-5'>哈希</b><b class='flag-5'>算法</b>概述

    哈希算法函數(shù)的定義描述及其特征介紹

    哈希的本質(zhì)是一個(gè)采用哈希算法的數(shù)學(xué)函數(shù),它被廣泛應(yīng)用于區(qū)塊鏈中構(gòu)建區(qū)塊以及確認(rèn)交易信息的完整性上。 什么是哈希算法?
    的頭像 發(fā)表于 06-28 21:02 ?6608次閱讀

    安全哈希算法的基礎(chǔ)知識(shí),如何使用算法進(jìn)行身份驗(yàn)證

    本應(yīng)用筆記介紹了安全哈希算法(SHA)的基礎(chǔ)知識(shí),并討論了該算法的變體。然后簡(jiǎn)要介紹了如何使用算法
    的頭像 發(fā)表于 12-21 15:37 ?2621次閱讀
    安全<b class='flag-5'>哈希</b><b class='flag-5'>算法</b>的基礎(chǔ)知識(shí),如何使用<b class='flag-5'>算法</b>進(jìn)行身份驗(yàn)證