2013-07-23 84 views
1

我正在考慮使用以下方法實施安全用戶認證。 那麼如何開始詢問用戶名並將其提交給服務器。在提交時,服務器將查找與該用戶相關的密碼。它會附加一些值(比如時間戳或其他可以通過客戶端發送的附加值)。它會使用一些公鑰算法對其進行加密並將其發送回客戶端。現在客戶端會被提示輸入密碼。現在,當用戶輸入密碼並提交時,密碼值將附加相同的值,並附加到服務器的密碼中;使用相同的公鑰算法生成加密字符串,並與從服務器接收的值進行比較。它們是平等的,用戶被認證並且會話可以被創建或以其他方式,它失敗。安全用戶認證

我想知道這種方法在性能方面是否可行和高效;以及如何違反這種做法是困難的。

+0

你已經勾畫出的算法有點類似於[cyptographic現時](http://en.wikipedia.org/wiki/Cryptographic_nonce) –

+0

@AndersLindahl ..哇,我不知道這個密碼nonce的概念。是的,它看起來有點相似。我想我的方法可以避免重播攻擊和暴力攻擊。如果我在這裏錯了,請糾正我。 –

回答

2

該協議非常糟糕,因爲它允許攻擊者使用脫機方法破解密碼。這意味着攻擊者只能向服務器發送一個請求,他會收到加密的密碼+ timstamp(基本上是密碼的散列),然後他可以將密碼強行脫機。使用好的字典,一套好的規則和幾個GPU,這可以很容易地完成。

實際上,服務器不應該向客戶端發送與密碼相關的任何信息(「密碼正確」或「密碼不正確」除外)。

+0

我確實同意發送密碼信息作爲迴應是不合適的。但是由於它是加密(實際密碼與用戶名+時間戳或任何其他動態值),響應值每次都會有所不同,攻擊者很難應用強力攻擊。可能是,我們可以應用密碼失敗限制即。在3次嘗試失敗後,賬戶將被鎖定。 –

+0

'enc(密碼+用戶名+時間戳)'基本上是密碼的散列,username + timestamp是鹽。因此,服務器將密碼的散列發送給任何請求它的人。這個散列可以被脫機破解。此外,在嘗試失敗後,您無法鎖定帳戶,因爲攻擊者可以在沒有服務器交互的情況下測試密碼,這意味着服務器不知道客戶端嘗試失敗。 – Thomash

+0

@ Thomash ..你說攻擊者會檢索不同的服務器響應,並最終根據收集到的值提供實際的密碼值。然後我會保持密碼更改策略,強制用戶每月更換密碼。另外,時間戳可以用用戶和服務器之間一致的一些動態值來代替。 –