Security 提高基于web的登录的安全性

Security 提高基于web的登录的安全性,security,password-protection,Security,Password Protection,现在我的登录系统如下: 密码长度必须至少为8个字符,并且至少包含一个大小写字母、一个数字和一个符号 密码不能包含用户名作为其子字符串 用户名,salted+hash(使用SHA2)密码存储在数据库中 nonce(salt)对于每个用户都是唯一的,并与用户名和密码一起以明文形式存储 整个登录过程只能通过TLS完成 您如何对以下措施的有效性进行排名以提高安全性 增加密码长度 强制用户每隔X一段时间更改一次密码,新密码不能是上一个Y密码 将nonce大小从32字节增加到64字节(因无可用而删除) 使用

现在我的登录系统如下:

  • 密码长度必须至少为8个字符,并且至少包含一个大小写字母、一个数字和一个符号
  • 密码不能包含用户名作为其子字符串
  • 用户名,salted+hash(使用SHA2)密码存储在数据库中
  • nonce(salt)对于每个用户都是唯一的,并与用户名和密码一起以明文形式存储
  • 整个登录过程只能通过TLS完成
  • 您如何对以下措施的有效性进行排名以提高安全性

  • 增加密码长度
  • 强制用户每隔
    X
    一段时间更改一次密码,新密码不能是上一个
    Y
    密码
  • 将nonce大小从32字节增加到64字节(因无可用而删除)
  • 使用AES加密salt,密钥仅对进行身份验证的应用程序可用
  • 多次重新设置密码
  • 在db上使用一个较长的、应用程序范围的salt+唯一用户salt的组合
  • 我不太喜欢1和2,因为它会给用户带来不便。
    当然,只有当攻击者破坏了数据库(例如:通过SQL注入)而不是应用程序所在的文件系统时,4和6才有效

  • 增加密码长度会给密码增加一些熵
  • 要求频繁更改密码通常会迫使用户使用不太安全的密码。他们需要在5月、6月和7月弄清楚密码是什么。Some@05x, Some@06x, Some@07x.
  • 无法确定,但我希望密码长度在您的情况下更重要
  • 稍微安全一点。但是,如果有人获得了对您数据的访问权,他们可能会获得对密钥的访问权
  • 除了增加CPU成本之外,你不会得到任何好处 有许多久经考验的单向密码加密算法非常安全。我宁愿使用其中一个,也不愿发明自己的。您原来的项目1、2和5都很好。我会放弃3,4

    您可以允许密码短语来缓解密码长度问题

    3将当前大小从32字节增加到64字节
    4使用AES加密salt,密钥仅对进行身份验证的应用程序可用
    5多次重新刷新密码

    这些步骤仅影响密码文件(DB列)被盗且攻击者可见的情况。nonce只会打败预散列(rainbow表),但这仍然是一件好事,应该保留

    (同样,假设您试图最小化受损数据库的影响。)加密nonce意味着攻击者有额外的暴力步骤,但您没有说明nonce的加密密钥存储在哪里。可以安全地假设,如果数据库被破坏,nonce将是纯文本的,或者是简单的解密。因此,攻击者的努力再次成为对每个哈希的暴力

    重新灰化只会使暴力攻击花费更长的时间,但可能不会更多,这取决于您对潜在攻击者每秒裂缝的假设

    不管您的密码组合要求如何,用户仍然可以使用“更容易猜测”的密码P@ssw0rd“这符合规则。因此,暴力在任何情况下都有可能在某些用户群体中取得成功。(我的意思是强调采取措施防止密码泄露。)


    密码存储方案在防止泄露方面听起来相当不错。我会确保身份验证过程的其他部分也是安全的(限制登录尝试、密码过期、SQL注入对策、难以预测的会话令牌等),而不是过度设计这一部分。

    答案可能在某种程度上取决于网站的性质、用户和攻击者。例如,这是一个黑客可能针对特定帐户(可能是“管理员”帐户)的网站,还是一个他们只想获得尽可能多的帐户的网站?用户的技术水平如何,他们保持自己帐户安全的动机如何?在不知道答案的情况下,我会假设它们不是技术性的,也没有动机

    可能产生影响的措施 5)多次重新刷新密码。这可以显著降低所有暴力攻击的速度-哈希1000次,暴力攻击速度降低1000倍

    4)使用AES加密salt,密钥仅对进行身份验证的应用程序可用如何使其仅对应用程序可用?它必须存储在某个地方,如果应用程序受到攻击,攻击者很可能会得到它。可能会有一些直接针对DB的攻击,这会产生影响,所以我不认为这是无用的,但这可能不值得。如果您确实这样做了,那么您还可以加密密码本身和数据库中的任何其他敏感数据

    6)使用一种salt,它是数据库上较长的、应用程序范围的salt+唯一用户salt的组合。如果您只关心密码,那么是的,这将是实现与4)相同结果的更好方法,当然,它很容易实现

    无效措施 3)将nonce大小从32字节增加到64字节。计算rainbow表对于任何salt都是完全不切实际的,因此这只会在攻击者不知道salt的情况下起作用。然而,如果他们可以得到散列密码,他们也可以得到盐

    无效和烦人的措施 1)增加密码长度将密码长度增加到8以上不会对暴力时间产生实际影响

    2)强制用户更改密码我同意,这将