2012-03-19 210 views
1

請幫我理解。另外我不是在談論SSL或DH密鑰交換。 由於salt存儲在數據庫中,並且是攻擊者保護用戶原始密碼(彩虹表)的祕密,所以在攻擊者將他們的手放在實際的數據庫本身上的情況下。那麼你將如何防範基於暴力/字典的攻擊。再次記錄錯誤的請求並拒絕許多錯誤的請求的IP是已知的,我在這裏談論密碼學。由於用戶1的密碼相同,攻擊者從其他網站獲得密碼,鹽在這裏如何保護。我想不是,那麼有什麼最好的解決方案可以阻止這種攻擊。假設數據非常重要,比如信用卡號+ CVV(我知道不存儲CVV,但這不是問題)。在數據庫中存儲salt +密碼哈希和防止密碼攻擊

編輯:順便說一句,我想出了一些愚蠢的想法,它看起來像停止字典攻擊的已知方法。閱讀這個問題:High cost encryption but less cost decryption

可能是我們可以在這裏討論一些其他的方法,以防止暴力破解/詞典/社會工程學密碼攻擊

+4

我的看法fwiw:如果您僅存儲醃製密碼,並且儘可能保護服務器,那麼您已完成了自己的任務。用戶有責任選擇不易受字典攻擊影響的密碼。 – 2012-03-19 07:45:15

+0

同意jcomeau_ictx,但仍然不向用戶發送鹽,可以做些什麼來使字典攻擊更加困難。 – 2012-03-19 07:50:08

回答

3

對我而言,你的實際問題有點不清楚,但如果是「鹽如何幫助我抵禦暴力攻擊?」答案是,技術上它不。沒有任何關於鹽會使蠻力攻擊變得更加困難,鹽會使難以同時暴力破解多個賬戶。實質上,鹽會人爲地誇大進行暴力攻擊所需的搜索空間,因此在計算上難以預先計算每個可能的密碼,然後針對整個數據庫檢查它們。鹽可以存儲在明確的,只要他們是每個密碼獨特的。

如果你想讓暴力破解密碼更加困難,你想要的是自適應哈希方案。這些方案允許您指定哈希應該花多長時間。因爲誠實的客戶端只需要進行數十次的認證,但攻擊者需要以數百或數十億次的次序進行認證,而較慢的散列使得攻擊者幾乎不可能完成任務,系統。

這一切都歸結爲,如果你使用密碼散列,你應該使用bcrypt。它被設計成包含一個鹽,並且是一個自適應哈希系統。欲瞭解更多信息,請參閱this article on security.stackexchange.com

2

關於鹽:如果你搜索「MD5」使用搜索引擎加密後的口令像谷歌,在這裏你可能會發現原始的簡單密碼。但是,如果您將普通密碼中的鹽混入,然後應用「MD5」加密,則無法找到它。如果任何黑客以任何方式侵入你的數據庫,並且如果你只使用MD5加密,那麼他可能會使用上述方法來破解密碼。對於例如在google上搜索這個字符串:5f4dcc3b5aa765d61d8327deb882cf99,你會得到原始的密碼字符串。鹽主要是爲了防止這種攻擊而添加的。

結賬here。看看這裏的內容和概念來理解。這是來自Spring安全文檔。

+0

同意,但當我們不向用戶發送鹽時,如何停止字典攻擊。 – 2012-03-19 07:48:16

+0

問題是不同的,你的答案是關於使用已知的鹽。問題是salt本身隱藏在DB中,那麼如何強制用戶每次發送不同的數據進行驗證。 – 2012-03-19 07:55:37

+0

鹽可以是用戶名,它取決於你使用什麼鹽。如果您使用salt用戶名,則會將用戶名和普通密碼混合在一起,然後完成MD5加密。這是使用鹽。鹽用於避免字典攻擊。閱讀答案中提到的鏈接。它在那裏給出。 – 2012-03-19 08:18:52

0

無鹽,攻擊者可以利用離線攻擊預先計算常見密碼的哈希:「祕密」「QWERTY」等無鹽允許攻擊者當不同的用戶使用相同的密碼告訴,因爲他們將有相同的哈希。 Salt可以防止預先計算並避免匹配散列問題。

訪問數據庫的攻擊者也可以訪問鹽。由於鹽類不同,她將需要分別攻擊每個密碼。

使用拉伸(重複散列)也會減慢攻擊者的速度。您可以存儲hash^n(password + salt),而不是存儲hash(password + salt),其中n足夠大,整個計算至少需要0.1秒。這限制了攻擊者每秒大約十次試驗,同時對用戶沒有明顯的影響。

+0

對不起,但又錯了答案,這是已知的。請閱讀其他答案和我的評論。我對如何以及如果鹽在基於字典的攻擊中提供任何好處感興趣。這裏的攻擊者不是從彩虹表生成密碼,他可能會使用一些字典式攻擊。我認爲有些網站會向用戶發送salt以便與密碼一起散列,併發送散列以進行驗證。我想知道這是如何工作的,如果網站不是首先存儲密碼本身,而是密碼的散列。 – 2012-03-19 16:47:54

1

鹽的目的不是爲了防止字典攻擊;這是爲了防止諸如彩虹表之類的預計算攻擊。有了鹽之後,攻擊者就可以在訪問數據庫後單獨攻擊每個密碼;他們無法預先計算字典中密碼的哈希值,或者在用戶中重複使用此項工作。

通過增加攻擊者爲測試每個候選密碼所做的工作量,密碼延伸是一種增加字典攻擊難度的方法。

+0

這就是我所理解的。我的問題是我知道一些網站發送一個隨機的salt/token與密碼進行散列併發送回服務器進行認證。如果你不想將實際的密碼本身存儲在服務器上,它是如何工作的。 – 2012-03-20 13:15:31

+0

@PriyankBolia你將需要更具體 - 這聽起來像一個不同的問題,而不是你問的問題,所以你應該單獨發佈。 – 2012-03-21 06:42:16