密碼技術(shù)(七、二)之單向散列函數(shù)

單向散列函數(shù)
??——獲取消息的“指紋”

單向散列函數(shù)具體例子

MD4、MD5

?MD4是由Rivest 于1990年設(shè)計(jì)的單向散列函數(shù),能夠產(chǎn)生128比特的散列值。不過(guò),雖則Dobbertin提出尋找MD4散列碰撞方法,現(xiàn)在它已經(jīng)不安全了。
?MD5是由Rivest于1991年設(shè)計(jì)的單向散列函數(shù),能夠產(chǎn)生128比特的散列值。MD5的強(qiáng)抗碰撞性已經(jīng)被攻破,也就是說(shuō),現(xiàn)在已經(jīng)能夠產(chǎn)生具備相同散列值的兩條不同的消息,因此它也已經(jīng)不安全了。
MD4和MD5的MD是消息摘要(Message Digest)的縮寫(xiě)。

SHA-1、SHA-256、SHA-384、SHA-512

?SHA-1是由NIST(National Institue of Standards and Technology ,美國(guó)國(guó)家標(biāo)準(zhǔn)計(jì)算研究所)設(shè)計(jì)的一種能夠產(chǎn)生160比特的散列值的單向散列函數(shù)。1993年別作為美國(guó)聯(lián)邦信息處理標(biāo)準(zhǔn)規(guī)格發(fā)布的是SHA,1995年發(fā)布修訂版FIPS PUB 180-1稱為SHA-1。在《CRYPTREC密碼清單》中,SHA-1已經(jīng)被列入“可謹(jǐn)慎運(yùn)用的密碼清單”,即除了用于保持兼容性的目的以外,其他情況都不推薦使用。
?SHA-256、SHA-384和SHA512都是由NIST設(shè)計(jì)的單向散列函數(shù),它們的散列值長(zhǎng)度分別為256比特、384比特和512比特。這些單向散列函數(shù)合起來(lái)統(tǒng)稱為SHA-2,它們的消息長(zhǎng)度也存在上限(SHA-256的上限近于264比特,SHA-384和SHA-512的上限接近于2128比特 )。這些單詞散列函數(shù)式于2002年和SHA-1一起作為FIPS PUB 180-2發(fā)布的。
?SHA-1的強(qiáng)抗碰撞性已于2005年被攻破,也就是說(shuō),現(xiàn)在已經(jīng)能夠產(chǎn)生具備相同散列值的兩條不同消息。不過(guò)SHA-2還尚未被攻破。
6種版本SHA-2

6種版本的SHA-2.png

RIPEMD-160

?RIPEMD 是與1996年由Hans Dobbertin、Antoon Bosselaers 和Bart Preneel 設(shè)計(jì)的一種能夠產(chǎn)生160比特的散列值單向散列函數(shù)。RIPEMD-160是歐盟RIPE項(xiàng)目所設(shè)計(jì)的RIPEMD單向散列函數(shù)的修訂版。這一系列的函數(shù)還包括RIPEMD-128、RIPEMD-256、RIPEMD-320等其他一些版本。在《CRYPTREC密碼清單》中,RIPEMD已經(jīng)被列入“可謹(jǐn)慎運(yùn)用的密碼清單”,即除了用于保持兼容性的目的以外,其他情況都不推薦使用。
?RIPEMD的強(qiáng)碰撞性已于2004年被攻破,但RIPEMD-160還尚未被攻破。比特幣中使用的就是RIPEMD-160。

SHA-3

?SHA-3(Secure Hash Algorithm-3)是一種作為新標(biāo)準(zhǔn)發(fā)布的單向散列函數(shù)算法,用來(lái)替代在理論上已經(jīng)被找出攻擊方法的SHA-1算法。全世界的企業(yè)和密碼學(xué)家提交了SHA-3的候選方案很多,經(jīng)過(guò)5年的選拔,最終在2013年正式確定了將Keccak算法作為SHA-3的標(biāo)準(zhǔn)。
Keccak最終被選為SHA-3的理由如下:

  • 采用了與SHA-2完全不同的結(jié)構(gòu)
  • 結(jié)構(gòu)清晰,易于分析
  • 能歐適用于各種設(shè)備,也適用于嵌入式應(yīng)用
  • 在硬件上的實(shí)現(xiàn)顯示出了很高的性能
  • 比其他最終候選算法安全性邊際更大

Keccak

?Keccak是一種被選定為SHA-3標(biāo)準(zhǔn)的單向散列函數(shù)算法。
?Keccak可以生成任意長(zhǎng)度的散列值,但是為了配合SHA-2的散列值長(zhǎng)度,SHA-3標(biāo)準(zhǔn)中共規(guī)定了SHA3-224、SHA-3-256、SHA3-384、SHA3-512這4個(gè)版本。在輸入數(shù)據(jù)的長(zhǎng)度上限方面,SHA-1為264-1比特,SHA-2為2128-1比特,而SHA-3則沒(méi)有限制。
?此外FIPS202中還規(guī)定了兩個(gè)可輸出任意長(zhǎng)度散列值的函數(shù)(extendable-output function,XOF),分別為SHAKE128和SHAKE256。據(jù)說(shuō)SHAKE這個(gè)名字取自Secure Hash Algorithm 與Keccak這幾個(gè)單詞。

Keccak的結(jié)構(gòu)

?Keccak采用了海綿結(jié)構(gòu),輸入的數(shù)據(jù)在進(jìn)行填充后,要經(jīng)過(guò)吸收階段擠出階段,最終生成輸出的散列值。
并且作為海綿結(jié)構(gòu)的變形, Keccak中還提出了一種雙共結(jié)構(gòu)。
這里關(guān)于 Keccak的結(jié)構(gòu),不做過(guò)多解讀,想詳細(xì)了解,請(qǐng)參考原著;

應(yīng)該使用哪種單向散列

  • 首先MD5是不安全的,因此不應(yīng)該使用。
  • SHA-1除了用于對(duì)過(guò)去生成散列值進(jìn)行校驗(yàn)外,不應(yīng)該被用于新的用途,而是應(yīng)該遷移到SHA-2。
  • SHA-2有效應(yīng)對(duì)了SHA-1的攻擊方法,因此是安全的,可以使用。
  • SHA-3 是安全的,可以使用。
    和對(duì)稱密碼一樣,我們不應(yīng)該使用任何自制算法。

對(duì)單向散列函數(shù)的攻擊

暴力破解
任何文件中都或多或少存在具有一定的冗余性。利用文件的冗余性生產(chǎn)具有相同散列值的另一個(gè)文件,這就是一種針對(duì)單向散列函數(shù)的攻擊。
在對(duì)密碼進(jìn)行暴力破解時(shí),我們就是按照順序改變密鑰,如0、1、2、3.....然后分別用這些密鑰進(jìn)行解密的,對(duì)單向散列函數(shù)進(jìn)行暴力破解也是如此,即每次都稍微改變一下消息的值,然后對(duì)這些消息求散列值。
現(xiàn)在我們?cè)趯ふ业氖且粭l具備特定散列值的消息,具備相同散列值的另一條不同的消息。這相當(dāng)于一種試圖破解單向散列函數(shù)的“弱碰撞性”的攻擊 。在這種情況下,暴力破解需要嘗試的次數(shù),可以根據(jù)散列值的長(zhǎng)度計(jì)算出來(lái),以SHA3-512為例,由于它的散列值長(zhǎng)度為512比特,因此最多只需要嘗試2^512次就能找到目標(biāo)消息了,如此多的嘗試次數(shù)在現(xiàn)實(shí)中是不可能完成的。
由于嘗試次數(shù)純粹是由散列值的長(zhǎng)度決定的,因此散列值的長(zhǎng)度越長(zhǎng)的單向散列函數(shù),其抵御暴力破解的能力也就越強(qiáng)。
找出具有指定散列值的消息的攻擊方式分為兩種,即“原像攻擊”和“第二原像攻擊”。原像攻擊(Pre-Image Attack)是指定一個(gè)散列值,找出具有該散列值的任意消息;第二原像攻擊(Second Pre-Image Attack)是指定一條消息1,找出另外一條消息2,消息2的散列值和消息1相同。

生日攻擊
要找到散列值相同的兩條消息,而散列值則可以是任意值。這樣的攻擊,一般稱為生日攻擊(birthday attack)或是沖突攻擊(collision attack),這是一種試圖破解單向散列函數(shù)的“強(qiáng)碰撞性”攻擊。
我們以512比特的散列值為例,對(duì)單向散列函數(shù)進(jìn)行暴力破解所需要的嘗試次數(shù)2^512 次,而對(duì)同一單向散列函數(shù)進(jìn)行生日攻擊所需要嘗試的次數(shù)2^256次,因此和暴力破解相比,生日攻擊所嘗試的次數(shù)要少的多。

單向散列函數(shù)無(wú)法解決的問(wèn)題

單向散列函數(shù)能夠辨別出“篡改”,但無(wú)法辨別出“偽裝”。
當(dāng)我們不僅需要確認(rèn)文件的完整性,同時(shí)還需要確認(rèn)這個(gè)文件是否真的屬于他的,我們還需要認(rèn)證。


該系列的主要內(nèi)容來(lái)自《圖解密碼技術(shù)第三版》
我只是知識(shí)的搬運(yùn)工
文章中的插圖來(lái)源于原著

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容