2010-07-14 82 views
2

忍耐我,我一直只學習PHP只有幾個星期,所以示例代碼可能會讓我困惑。我想我終於明白了醃製!這是爲了保護數據庫內的密碼,如果違反。數據庫如何被黑客攻擊?關於醃製等的問題

我不明白的是,黑客爲什麼必須破解哈希,如果他們試圖找出用戶的密碼(假設這是他們的目標)?這不容易嗎?密碼猜測的唯一防禦措施是實現密碼輸入的限制X每天的次數或CAPTCHA?

如何將一個數據庫中獲取擺在首位黑客攻擊?是更多的密碼猜測或哈希可以通過MySQL注入獲得?

謝謝!

+2

當你說「這不容易嗎?」你指的是什麼? – 2010-07-14 21:49:47

+0

在鹽漬哈希:http://stackoverflow.com/questions/1645161/salt-generation-and-open-source-software/1645190#1645190 – Jacco 2010-07-14 22:08:27

+0

「這不會更容易嗎?」指之前的陳述。嘗試通過暴力破解密碼而不是嘗試獲得散列是不是更容易? – Tarik 2010-07-15 15:25:38

回答

3

是,醃製是爲了防止密碼將永遠不能逆轉成明文。它還會阻止某人說「站點A上的加密密碼與站點B上的加密密碼相同,因此用戶在兩個地方都有相同的密碼」。

這不僅僅是爲了保護用戶免受黑客攻擊;這也是爲了保護他們免受

是,對密碼猜測的唯一辦法就是減慢或禁止反覆嘗試。大多數CAPTCHA是易碎的或破損的,您不能對擁有原始數據庫副本的人施加CAPTCHA或猜測限制。因此,即使加密數據不受惡意個人的影響。不要讓他們在.htpasswd或/ etc/shadow文件或數據庫中。

如果你不使用鹽,產生彩虹表(提前)比直接猜測一個非常強壯的密碼容易得多。關鍵是建立反向映射hash->密碼可以完成一次,並且(無鹽)散列對於擁有彩虹表的任何人都是永遠破碎的。

如果您的提供商遭到入侵,您的代碼中存在注入漏洞,如果您的數據庫用戶帳戶密碼被猜出,如果您的提供商使用eBay銷售(假定已擦除)硬盤驅動器有一個三年的數據庫的副本......它可以發生在很多方面。

+0

鹽針對計算前計算攻擊(彩虹表)加強哈希,而不是針對「反轉成明文」(哈希(無論是否是鹽)無法逆轉)。此外,生成彩虹表與打破單個密碼一樣昂貴。但是,在計算了彩虹表之後,可以在表中查找散列並快速找到匹配的輸入。 – Jacco 2010-07-14 22:19:32

+0

@Jacco:如果你有一個彩虹表,你可以將一個散列映射成(一些匹配的)明文。因爲用戶傾向於選擇低複雜度的密碼並且哈希空間很大,所以您找到的明文幾乎總是用戶的密碼。所以不,醃製是爲了防止通過彩虹表反轉成明文。而且,正如我所說,產生彩虹表的原因比打破單個密碼更容易,因爲彩虹表可以事先創建。 – Borealid 2010-07-14 23:00:25

4

鹽漬和散列的思想是保護數據庫已經受損的情況下,密碼,無論是通過SQL注入,緩衝區溢出攻擊或直接轉至服務器機房和拉盤出你的服務器。 Salting不會保護您免於密碼猜測,但可幫助防止攻擊者獲取數據。

1

這裏的關鍵在於,他們並沒有試圖獲取用戶的密碼以便在您的網站上使用,儘管在修復了可能有用的漏洞之後。這是因爲,無論出於何種原因,如果您的網站遭到入侵,則不會對用戶造成任何損害。人們傾向於複製密碼;那會很糟糕。

1

這可能是愚蠢的,但很多人對不同的網站使用相同的密碼。如果您的數據庫遭到破壞並且密碼被簡單地散列,那麼存在黑客可以使用的技術(例如彩虹表,甚至一些網站)來查找導致相同散列的密碼值。然後可以使用該密碼嘗試訪問用戶擁有帳戶的其他網站。

如果數據庫中的密碼醃製,那麼這將成爲顯著困難......如果其他網站也食鹽他們的密碼與不同的鹽到你的話,那就不切實際的黑客。