2010-01-22 37 views

回答

57

這取決於你的用例。你不能廣泛宣稱「優越性」。 (我的意思是,在某些情況下,你可以,但要嚴格,你不能)。

但有兩個領域,MD5已破:

  1. 對於初學者:MD5是舊的,和常見的。有大量的彩虹桌靠着它,而且很容易找到。所以,如果你使用md5來散列密碼(沒有鹽 - 不要羞辱你)!你可能不會對它們進行散列,它們很容易找到。即使你真的用簡單的鹽進行散列。
  2. 其次,MD5不再像安全的密碼散列函數那樣安全(事實上,它甚至不再被認爲是密碼散列函數,正如Forked指出的那樣)。您可以生成散列爲相同值的不同消息。所以,如果你有一個帶有MD5哈希的SSL證書,我可以生成一個重複的證書,說明我想要什麼,這會產生the same hash。這通常是人們說MD5是「破」時的意思 - 像這樣的事情。
  3. 第三,與消息類似,您也可以生成不同的文件that hash to the same value,所以使用MD5作爲文件校驗和是「破損」的。

現在,SHA-512是一個SHA-2 Family散列算法。現在SHA-1被認爲是'呃',我會忽略它的。然而,SHA-2對它的攻擊相對較少。維基百科的主要討論內容是a reduced-round preimage attack這意味着如果您以可怕的錯誤方式使用SHA-512,我可以打破它。很明顯,你不可能以這種方式使用它,但攻擊只會變得更好,並且這是進入更多研究的好跳板,以與MD5破壞相同的方式打破SHA-512。然而,在可用的所有哈希函數中,SHA-2系列目前是最強大的,並且考慮到通用性,分析和安全性是最佳選擇。 (但不一定速度。如果你在嵌入式系統中的時候,你需要執行一個整體的其他分析。)

+6

「,因爲你可以生成不同的消息散列到相同的值。」 - 這就是它不再被視爲加密散列的原因,因爲它不再滿足有用信息的所有要求(http://en.wikipedia.org/wiki/Cryptographic_hash_function) –

+1

+1 – WarmWaffles

0

它需要一個更大的字典來反向映射,並有較低的碰撞機率。

10

MD5已經被加密打破了相當長的一段時間了。這基本上意味着一些通常由散列算法保證的屬性不再適用。例如,可以在比輸出長度所需的時間少得多的時間內找到散列衝突。目前,在可預見的將來,SHA-512(SHA-2散列函數系列之一)目前足夠安全,但可能時間不會太長。這就是爲什麼NIST開始參加SHA-3競賽的原因。

通常,您希望散列算法爲單向函數。他們將一些輸入映射到一些輸出。通常輸出是固定長度的,從而提供原始輸入的「摘要」。常見的屬性是,例如輸入的小改變會在輸出中產生很大的變化(這有助於檢測篡改),並且該函數不容易可逆。對於後者的屬性,輸出的長度會有很大的幫助,因爲它爲碰撞攻擊的複雜性提供了理論上限。但是,設計或實施方面的缺陷通常會降低攻擊的複雜性。一旦知道這些信息,就可以評估是否仍然使用散列函數。如果攻擊的複雜性下降得足夠多,實際的攻擊很容易進入沒有專門計算設備的人羣中。

注意:我一直在談論這裏的一種攻擊。事實上,如果更細微,但也更難以掌握。由於散列函數通常用於驗證文件/消息完整性,所以碰撞事件可能是理解和遵循的最容易的事情。

+1

請注意,SHA-512是SHA-2系列中的一種算法。 (解釋參考SHA-3。) – yfeldblum

+0

謝謝,正義。包括:-) – Joey

0

它操作簡單,MD5被打破;)(見Wikipedia

布魯斯攻擊寫道:「[我們]已經知道,MD5是一個破碎的哈希函數」,而且「沒有人應該再使用MD5了。「

3

有幾個不被這裏提到的問題,我覺得這是一個缺乏瞭解哈希是什麼,它是如何工作的,以及使用彩虹或任何其他方法成功攻擊它們需要多長時間...

從數學上講,如果你用鹽哈希和油門嘗試(甚至是1秒),您的安全性就會像破壞一樣,攻擊者會用木勺慢慢將您的1英尺實心鋼牆扔掉:

這將需要數千年的時間,屆時所涉及的每個人都將死亡;還有更重要的事情需要擔心。

如果您通過第20次嘗試鎖定其帳戶...問題已解決。你的牆上有20次擊中= 0.0000000001%的機會。實際上,你實際上是一個更好的統計機會。

You're thinking about it wrong.

同樣重要的是要注意,絕對任何哈希函數將是憑藉什麼哈希很容易受到碰撞:「(小)獨特的別的東西ID」。

當您增加位空間時,您會降低衝突率,但您也會增加id的大小和計算它的時間。

讓我們做一個小小的思想實驗...

SHA-2,如果它存在,將有別的東西...... 00,01共4個可能的唯一ID,10 & 11.會產生碰撞,顯然。你在這裏看到這個問題嗎?散列只是您想要識別的內容的生成ID。

MD5實際上是真的很擅長根據輸入隨機選擇一個數字。 SHA實際上並沒有那麼好, SHA爲ID提供了更多的空間。

使用的方法約爲碰撞發生的可能性的0.1%。真正的原因是更大的位空間。

這實際上是SHA-256和SHA-512不易碰撞的唯一原因;因爲他們使用更大的空間來存儲唯一的ID。

SHA-256和SHA-512用於生成散列的實際方法實際上更好,但不是太多;如果ID中的位數較少,那麼相同的彩虹攻擊會對它們起作用,並且文件甚至密碼可以使用SHA-256和SHA-512具有相同的ID,但由於它使用更多位,因此它的可能性很小。

,真正的問題是如何實現安全

如果允許自動攻擊打你的身份驗證端點每秒1000次,你會得到分成。如果您在第10次嘗試後每3秒限制1次嘗試並鎖定帳戶24小時,則不會。

如果你存儲沒有鹽的密碼(鹽只是發生器的一個額外的祕密,使得難以識別諸如「31337」或「密碼」之類的錯誤密碼)並且有很多用戶,你要去被黑客攻擊。如果你使用它們,即使你使用MD5,你也不會。

考慮到MD5使用128位(HEX爲32個字節,二進制爲16個字節),而SHA 512僅爲4倍的空間,但通過給予2^384個更多可能的ID,實際上消除了衝突率......使用SHA -512,每次。

但是,如果您擔心如果您使用MD5會發生什麼事情,並且您不瞭解真正的實際差異,那麼您仍然可能會被黑客入侵,這有意義嗎?