2014-04-25 23 views
0

我知道的哈希值(例如:MD5值)可以有像 '^#&%we242eweqweqweqwedfdfdfee2', '%$#%3423efffe435 %% ^#'可以用彩虹表分析出md5值的簡單明文密碼嗎?

多個值連接,但大多數用戶都實際上使用一個非常簡單的密碼,那些md5值只能與有限的簡單明文密碼有關係嗎?

我的意思是,如果'cfcd208495d565ef66e7dff9f98764da'與'0','tom123','goodcar'等30個簡單值有關聯,那麼從數據庫中獲取md5數據的黑客很容易找出用戶名之間的關係及其明文密碼,然後可以使用這一對值來破解其他網站上的相同帳戶。

那麼,是否有任何指定的md5值只負責有限的簡單值呢? PS:我知道我可以添加鹽或使用更好的方法,如sha512,sha3,但我很好奇上面的問題。

+2

「更好的方法」是bcrypt和scrypt。就密碼散列而言,SHA-512或SHA-3不是「更好的方法」。但無論如何,你的問題的答案是「當然是的」。 –

+0

@ ChrisJester-Young,那麼這意味着一個md5值只對少量簡單的明文值有反應? – Zen

+0

那麼,這完全取決於你如何定義「簡單的明文值」,但是,如果你可以枚舉所有這些值,你可以很容易地建立一個表,它們都對應的MD5值。 –

回答

2

這個問題取決於你對「簡單值」的理解。一般來說,密碼散列函數試圖模擬任意長度輸入到固定長度輸出的隨機映射。那些密碼散列的最基本的安全概念是所謂的衝突阻力,即在計算上不可能找到散列到相同固定長度輸出的一對輸入消息。正如你已經證明,這個概念現在已經被md5破壞了,因爲你可以構造確實在md5下碰撞的特殊消息。

但正如你在談論「簡單的價值」,我假設你排除這種人工製作的消息,然後我們仍然可以將md5視爲隨機映射。

對於這樣一種隨機映射,碰撞的可能性僅取決於輸入域的大小。例如,如果您正在查看字符集{a-z,A-Z,0-9}中的所有6個字符的密碼,則可以確定不會發生碰撞(您甚至可以像克里斯指出的那樣自行嘗試)。但是,如果將該大小擴展到相同字符集中的25個字符,則確保存在衝突,因爲現在有更多可能的密碼比可用的哈希值更多。

估計碰撞的可能性被稱爲birthday problem。如果您有一個簡單的估計,如果您有可能的輸出值k,那麼當您達到sqrt(k)輸入值時,可以預料會發生碰撞。因此,對於k=2^128的md5,如果您的輸入值集合接近2^64的大小,則預計會發生衝突。