2011-04-28 44 views
6

我相信我可以將代碼下載到PHP或Linux或其他任何程序,並直接查看MD5函數的源代碼。我不能然後逆向工程的加密?爲什麼沒有MD5功能的代碼幫助黑客破解它?

下面的代碼 - http://dollar.ecom.cmu.edu/sec/cryptosource.htm

好像任何加密方法將是無用的,如果「敵人」有它與創建的代碼。我錯了嗎?

+0

更簡短的回答:出於同樣的原因知道如何添加不讓你找出我添加了什麼兩個數字得到42. – 2011-08-23 00:35:37

+0

恩......好吧..我無法弄清楚你是如何得到42在你的源代碼? – shady 2011-08-23 14:40:32

+0

我的源代碼是「result = x + y」。我使用了什麼數字? – 2011-08-23 23:59:08

回答

8

這不是加密,而是one way hashing mechanism。它摘要該字符串並生成(hopefully)唯一散列。

如果是可逆加密,ziptar.gz格式將會非常冗長。 :)

它不會幫助黑客太多的原因(顯然知道如何做的是有益的)是,如果他們找到一個被哈希的系統的密碼, 2fcab58712467eab4004583eb8fb7f89,他們需要知道用來創建它的原始字符串,以及是否使用了鹽。這是因爲,當您登錄時,出於顯而易見的原因,密碼字符串使用與生成的方法相同的方法進行哈希處理,然後將結果哈希與存儲的哈希進行比較。

此外,許多開發商都遷移到bcrypt併入了工作因素,如果散列需要,而不是.01每秒1秒,大大減慢生成你應用rainbow table,只有使用md5()那些老PHP網站成爲低垂的果實。

Further reading on bcrypt

+0

+1;我希望MD5永遠不會碰撞(現在我會有噩夢:) – 2011-04-28 01:07:04

8

良好的加密操作的標準之一是,該算法的知識不應該更容易打破加密。所以如果沒有算法和密鑰的知識,加密就不應該是可逆的,並且散列函數不能是可逆的,而不管算法的知識如何(所使用的術語是「計算上不可行的」)。

MD5和其他哈希函數(如SHA-1 SHA-256等)對創建摘要或「指紋」的數據執行單向操作,該摘要或「指紋」通常比明文小得多。即使您確切知道該函數的功能,這種單向函數也無法逆轉來檢索純文本。同樣,加密算法的知識並沒有使它更容易(假設一個好的算法)從密文中恢復明文。在不知道使用的加密密鑰的情況下,相反的過程是「計算上不可行的」。

9

這實際上是一個很好的問題。

MD5是一個散列函數 - 它以這樣一種方式「混合」輸入數據,以至於不應該做很多事情,包括恢復給定輸出的輸入(它不是加密,沒有鑰匙,它不是被倒置 - 而是相反)。手工描述是每個輸入位在足夠大的內部狀態下被多次注入,這種混合使得任何差異都很快傳播到整個狀態。

MD5是public since 1992。對MD5的設計沒有祕密,也從來沒有任何祕密。自2004年以來,第一次碰撞發佈的年份(產生相同輸出的兩個截然不同的輸入消息)被認爲是MD5的加密破壞;自1996年以來它被認爲是「弱」(當時發現了一些結構性質,據信最終有助於造成碰撞)。然而,還有其他散列函數,它們與MD5一樣是公開的,並且其中還沒有任何弱點:SHA-2系列。較新的散列函數目前正在作爲SHA-3競賽的一部分進行評估。

真正令人不安的部分是沒有已知的數學證明哈希函數可能實際存在。哈希函數是一種公開描述的高效算法,可以嵌入爲有限,固定和小尺寸的邏輯電路。對於計算複雜性的從業者而言,可能出現無法倒置的電路是有點令人驚訝的。所以現在我們只有候選人:沒有人找到弱點的功能,而不是沒有弱點的功能。另一方面,MD5的案例顯示,顯然,從已知的結構弱點到實際的碰撞到攻擊需要大量的時間(1996年的弱點,2004年的碰撞,應用碰撞) - 一對X.509證書 - 在2008年),所以目前的趨勢是使用算法敏捷性:當我們在一個協議中使用哈希函數時,我們也考慮如何將哈希函數證明是弱的我們可以轉換到另一個。