2011-12-23 85 views
4

可能重複:
Is 「double hashing」 a password less secure than just hashing it once?多次加密密碼真的會讓它更安全嗎?

所以,我就確保PHP網站閱讀的文章,他們建議哈希密碼多次,其實,這是從直接引文章:

md4(md4(md5(sha1(md4(md5(sha1(sha1($_POST['password'])))))))); 

現在,我個人一般在我的密碼上使用鹽漬的SHA-256哈希,因爲我認爲t帽子MD4和MD5不再安全,多次散列密碼只會給服務器帶來太多的壓力,沒有實際的好處。那是對的嗎?

+1

通常建議使用帶有密鑰的HMAC方法以及該用戶特有的鹽。 http://php.net/manual/en/function.hash-hmac.php – dqhendricks 2011-12-23 00:09:16

+0

當人們將我的問題標記爲可能的重複時,通常會困擾我,但該鏈接實際上非常有用。 – Bhaxy 2011-12-23 00:26:34

回答

2

由於PHP中沒有md4()函數,文章中的直接引用不起作用。然後它仍然沒有意義。

通常應用多個哈希函數不會受到傷害。但是當你從sha1md5你失去了輸入範圍(md5給你128位輸出,但sha1是160位長)。這是對縮短的摘錄進行重新編排,這意味着可能的輸出集合永遠不會比md5()大。

1

有點。如果目標是要真正獲得原始密碼,那麼這是一項不可能完成的任務。然而,通常情況並非如此,如果你真的使用md4作爲最外層散列,那麼...... http://en.wikipedia.org/wiki/MD4#Security

還有很多其他方法可以提高安全性,其中最基本的就是使用某種隨機鹽不隨密碼一起存儲。

1

你可以做的最好的事情來保護一個密碼是1)使用SHA-256或以上的hash_hmac 2)使用每個用戶隨機隨機數並將其存儲在數據庫3)使用每個用戶隨機迭代計數並將其存儲數據庫也是如此。

你也應該閱讀:Secure hash and salt for PHP passwords

1

如果您不能散列你的密碼的數萬次,你不知道自己在做什麼。

This is computuallyly expensive;這就是我想說的。爲了驗證具有正確密碼的用戶的合法目的,負載是微不足道的。但是對於一個試圖在離線攻擊中測試大量密碼的黑客來說,成本太高了。

使用數千次散列函數迭代是一種成熟且廣泛使用的「密鑰加強」技術。它被加入到密鑰派生的標準中,並用於像bcrypt這樣的密碼保護算法。

使用bcrypt或PBKDF2,這將需要您使用salt和迭代。不要試圖用一些破碎的哈希來彌補自己的方法。

+1

考慮改寫這個答案。當在兩種不同算法(即'md5(sha1(...))')之間跳動時,多次散列實際上削弱了安全性。 – FtDRbwLXw6 2011-12-23 03:27:20

+0

是否有任何公認的協議可以在兩種算法之間反彈? – erickson 2011-12-23 06:39:07