2014-01-24 46 views
0

我一直在閱讀與此相關的問題和解答,但沒有人提出這個問題,它有缺陷嗎?在JavaScript中對用戶認證進行散列密碼

  1. 用戶都有自己的密碼,我在我的服務器存儲的散列
  2. 他訪問登錄和我提供一個明文的隨機字符串
  3. 在登錄頁面的JavaScript哈希他的密碼,追加明文,老調重彈的整個字符串,並將其發送給服務器
  4. 該服務器採用哈希密碼從DB追加明文,老調重彈,並比較

我覺得這個方法可以防止密碼DIS只要隨機字符串不可預測並且不能在合理的時間內重新使用,就可以進行關閉和重放攻擊。

這個算法有什麼缺陷嗎?

回答

1

,我看到的最大的問題是,你解決那些已經得到解決(通過SSL)一個問題,如果你沒有在你的方案中使用SSL,你仍然暴露在人在的中間和會話劫持漏洞。如果你的已經使用SSL,這是所有不必要的複雜性,正如我們所知,複雜性對安全性不利。

所以,你的算法的缺陷是你沒有保護通信信道。沒有這一點,你的算法不是特別安全,因此,你的算法不是特別必要的。

+0

你提出一個很好的觀點,我想關於竊取cookie等。但我有興趣從通常的做法中刪除SSL,只使用它來登錄表單,然後保持清除HTTP。 SSL可能很昂貴,大多數提供商不會免費提供給您。 –

0

我同意上一個關於使用SSL的答案,但我會在這裏專門解決這個算法。

要打破你的算法,攻擊者需要做以下之一:

  1. 瞭解用戶的明文密碼
  2. 瞭解用戶的哈希密碼
  3. 瞭解明文隨機字符串加上雙 - 已加密的密碼

假設攻擊者知道或可以猜測您使用的哈希算法。

有幾種方法可以實現(1)在算法之外。共密碼,密碼重用等

哈希密碼(2)本質上是一個密碼爲好,因爲你會接受任何人誰提交哈希密碼+隨機明文。因此,如果攻擊者可以在客戶端或服務器上找到哈希密碼,那麼他可以登錄到您的網站。

(3)很有趣,並且是一個可能的攻擊媒介。如果沒有SSL,攻擊者可以通過嗅探從(3)中找到兩個元素 - 他會聽到服務器發來的隨機明文,然後雙重密碼發送到服務器。然後他可以使用密碼猜測工具來確定原始密碼。從常用密碼列表開始,對它們進行散列,添加明文,然後再次散列。破解所需的時間取決於密碼的強度和散列算法的大小。他還可以嘗試使用彩虹表來查找「散列密碼」+「隨機明文」字符串。

通過找到一種方法來防止攻擊者嗅探交換機,你的安全性會得到改善。