2011-06-23 49 views
0

我在花了幾個小時瀏覽SO上的許多帖子之後提出了這個問題,以最安全的方式處理PHP/MySQL中的密碼。大多數答案似乎都過時了,人們指向的鏈接也是如此。許多人推薦md5和sha-1。2011年PHP密碼散列

我們都知道MD5和SHA-1不再使用,因爲它們已被顛倒過來,並且還因爲有許多數據庫已經構建了數百萬個md5/sha1字符串。現在,顯然你可以用鹽來解決這個問題,我打算這麼做。

然而,我最近開始使用漩渦遊戲,這似乎更安全,並且是最新的。我是否會認爲漩渦+鹽對密碼有足夠的保護?

我其實是考慮這樣的事情:

<?php 
    $static_salt = 'some_static_salt_string_hard_coded'; 
    $password = 'some_password_here'; 
    $salt = 'unique_salt_generated_here'; 

    $encoded = hash('whirlpool', $static_salt.$password.$salt); 
?> 

你覺得呢?矯枉過正或明智嗎?

+1

散列算法不能顛倒。你只能對他們進行測試。 – HyderA

+0

另請參閱Openwall的[PHP密碼哈希框架](http://www.openwall.com/phpass/)(PHPass)。它的便攜性和強化針對許多用戶密碼的常見攻擊。寫這個框架的人(SolarDesigner)是寫[John The Ripper](http://www.openwall.com/john/)並且在[密碼散列比賽](http:///password-hashing.net/)。所以他知道一兩件關於密碼攻擊的事情。 – jww

回答

1

這將是足夠的(但是,在靜態硬編碼鹽中沒有意義)。而且,爲什麼不使用SHA256?漩渦很少使用。

+0

我對使用漩渦的主要想法是它的一個弱點。另一方面,由於它沒有用得太多,所以不太可能存在公開的漏洞。不利的一面是,它可能會帶來未來的支持和/或安全問題。 – Sk446

+2

使用不當/測試過的密碼/哈希值,隱藏漏洞的可能性越大:)所有廣泛使用的哈希值都由全球社區進行測試,因此很有可能不會發現主要的漏洞。 –

3

這對大多數應用程序來說可能已經足夠了。

但是,如果您的數據庫泄漏了,鹽就會變得(幾乎)無用 - 如果您的配置文件泄露了,也會變成靜態的。他們對彩虹表提供了很好的保護,但是現在使用一堆GPU來強制給定散列表更容易。

恕我直言,目前the best solution is to use bcrypt。它明顯在PHP 5.3+和here's an example中支持如何使用它。

+0

正確答案。如果你不得不問,答案是'使用bcrypt'。 – ZoFreX

0

討論特定算法的優點時沒有對威脅模型和實現細節進行更廣泛的考慮,這是毫無意義的。

是的,漩渦似乎在散熱方面的效力方面似乎有一些優勢,但正如Nickolay所說,這可能具有欺騙性,並且由於它不太廣泛使用。但還有其他一些考慮因素 - 出於某些目的,爲每個帳戶存儲128個字符的字符串可能是不必要的開銷。對於每個人來說,這是一個軟件支持的問題(有些人可能希望使用相同的帳戶記錄來控制對不同系統的訪問)。

在這一天結束,這不要緊,你的哈希算法多麼複雜的是:

  1. 給予自由選擇,用戶隨到隨不好,被猜到的密碼
  2. 用戶將使用相同的密碼不同的服務

如果它適合你 - 那麼很好 - 但是沒有通用的解決方案。