【问题标题】:Secure user authentication安全的用户身份验证
【发布时间】:2013-07-23 12:25:28
【问题描述】:

我正在考虑使用以下方法实施安全用户身份验证。 那么如何从询问用户名开始并将其提交到服务器。提交时,服务器将查找与该用户相关的密码。它会附加一些值(比如时间戳或任何其他可以发送回客户端的附加值)。它将使用一些公钥算法对其进行加密并将其发送回客户端。现在将提示客户端输入密码。现在,当用户输入密码并提交时,密码值将附加与服务器中附加到密码相同的值;使用相同的公钥算法生成加密字符串并与从服务器接收的值进行比较。如果它们相等,则用户已通过身份验证并且可以创建会话,否则会失败。

我想知道这种方法在性能方面是否可行且有效;以及违反这种方法的难度。

【问题讨论】:

  • 你勾勒出的算法有点类似于cyptographic nonce
  • @AndersLindahl.. 哇,我不知道密码随机数的这个概念。是的,看起来有点像。而且我想我的方法会避免重放攻击和蛮力攻击。如果我在这里错了,请纠正我。

标签: algorithm security authentication key


【解决方案1】:

这个协议非常糟糕,因为它允许攻击者使用离线方法来破解密码。这意味着攻击者只能向服务器发送一个请求,他将收到加密的密码+时间戳(基本上是密码的哈希),然后他将能够暴力破解密码离线。使用一个好的字典、一组好的规则和几个 GPU,这可以很容易地完成。

实际上,服务器不应该向客户端发送任何与密码相关的信息(“密码正确”或“密码不正确”除外)。

【讨论】:

  • 我同意发送密码信息作为回复是不合适的。但是由于它是(实际密码与用户名+时间戳或任何其他动态值)的加密,因此每次响应值都会有所不同,攻击者很难应用暴力攻击。可能是,我们可以应用密码失败限制,即。 3 次尝试失败后,该帐户将被锁定。
  • enc(password+username+timestamp) 基本上是密码的哈希,用户名+时间戳是盐。因此,服务器将密码的哈希发送给任何请求它的人。然后可以离线破解此哈希。此外,您无法在尝试失败后锁定帐户,因为攻击者可以在没有服务器交互的情况下测试密码,这意味着服务器不知道客户端尝试失败。
  • @Thomash..你是说攻击者会检索不同的服务器响应,并最终根据收集的值得出实际的密码值。然后我会保留密码更改策略,强制用户每月更改密码。此外,时间戳可以替换为用户和服务器之间符合的一些动态值。
  • 攻击者甚至不需要实际的密码,只需要任何哈希到相同的东西。您实际上是在向客户端发送它需要进入的内容。此外,客户端可能会被破解以验证输入的任何内容,因为没有服务器端验证。
  • @Geobits。为了回应“......只是任何散列到同一事物的东西......”,当我每次都用动态值散列它时,它怎么会返回相同的值。而且我猜想通过密码更改策略,攻击者更难破解密码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
  • 2012-03-18
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
相关资源
最近更新 更多