security - DoD 密码复杂性 : Users cannot reuse any of their previous X passwords

标签 security encryption passwords complexity-theory stig

我看过一些关于此问题的帖子,但我还没有看到明确的答案。因此,我想我应该尝试在新的背景下(国防部)重述这个问题。

根据 DISA 的“ Application Security and Development STIG, V3R2 ”,3.1.24.2 密码复杂性和维护部分,DoD 企业软件有一个非常严格的指南带密码:

  • 密码长度必须至少为 15 个字符。

  • 密码必须包含大写字母、小写字母、数字和特殊字符的组合。

  • 更改密码后,用户不得 能够使用个人信息,例如姓名、电话号码、 帐户名称或字典单词。

  • 密码必须在 60 年后过期 天。

  • 用户不得重复使用之前 10 个中的任何一个 密码。

  • 确保应用程序能够在更改密码时要求新帐户密码与之前的密码至少有四个字符不同。

  • 用户更改密码的次数不得超过 每天一次,管理员或特权用户除外 用户。特权用户可能需要重置用户忘记的内容 密码以及每天多次更改密码的能力。

NullUserException's post 中所述,为了让开发人员真正能够检查最后 X 个密码(并确保新密码与之前的密码不同 [bullet 6]),必须使用以下方法对密码进行加密一种可逆的方法,而不是散列密码(这更不安全,即使我使用 NSA 批准的加密算法)。提议的答案似乎很有意义,尽管似乎存在一些差异和争论,如 Dan Vinton's post 中所示。 .

我想这里真正的问题是,是否有人能够实现所有这些看似常见的密码复杂性限制,而实际上不会降低系统的安全性

<小时/>

编辑: 漏洞 APP3320.7(要点 6)指出“当密码被更改时,确保应用程序能够要求新帐户密码与以前的密码至少有四个字符不同”改变了。”这让我相信我必须运行字符串相似性算法(例如 Levenshtein)来检查相似性。我不能用哈希/盐来做到这一点。如果我错了,请告诉我?

最佳答案

所述字符距离要求仅适用于前一个密码,而不是前 10 个密码。假设您的密码工具要求输入当前密码和新密码,您只需进行检查即可;不需要在那里存储任何东西。 (还在 this answer 上注明了您提到的帖子。)

当然,不匹配之前 10 个密码中的任何一个的要求是通过仅检查旧哈希值来处理的。

关于security - DoD 密码复杂性 : Users cannot reuse any of their previous X passwords,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15050553/

相关文章:

encryption - 如何在 Web 浏览器中使用 Webauthn/CTAP HMAC-Secret 扩展检索对称 key ?

php - 在数据库中存储用户/客户端密码?需要你的意见

javascript - 随 secret 码生成器 JavaScript 不工作

encryption - 这是什么类型的加密?

linux - 这些 LAMP 权限安全吗?

php - 我应该如何保护我的银行卡详细信息表格?

security - JWT 优于数据库中简单随机生成的 token ?

git - 重用 FaSTLane 匹配来加密其他凭据和 android key 存储

database - 在数据库中存储密码的最佳方式

php - 使用Javascript XmlHttpRequest和PHP保护Web服务调用的安全