我已经看到了一些关于此的帖子,但我还没有看到明确的答案。因此,我想我会尝试在新的背景下(国防部)重申这个问题。
根据 DISA 的“应用程序安全和开发 STIG,V3R2 ”,第3.1.24.2 节密码复杂性和维护,DoD 企业软件对密码有相当严格的指导:
密码长度必须至少为 15 个字符。
密码必须包含大写字母、小写字母、数字和特殊字符的组合。
更改密码后,用户不得使用姓名、电话号码、帐户名称或字典单词等个人信息。
密码必须在 60 天后过期。
用户不得重复使用之前的 10 个密码中的任何一个。
确保应用程序能够在更改密码时要求新帐户密码与以前的密码至少相差四个字符。
用户每天更改密码的次数不得超过一次,管理员或特权用户除外。特权用户可能需要重置用户忘记的密码,并且可以每天多次更改密码。
如NullUserException 的帖子中所述,为了让开发人员真正能够检查最后 X 数量的密码(并确保新密码与以前的密码不同 [项目符号 6 ]),必须使用可逆密码对密码进行加密方法,而不是散列密码(即使我使用的是 NSA 批准的加密算法,这也更加不安全)。提议的答案似乎很有意义,尽管似乎存在一些差异和争论,如Dan Vinton 的帖子所示。
我想这里真正的问题是,是否有人能够实现所有这些看似常见的密码复杂性约束,而不会真正降低其系统的安全性?
编辑:漏洞 APP3320.7(要点 6)指出“确保应用程序有能力在更改密码时要求新帐户密码与以前的密码至少相差四个字符。” 这让我相信我必须运行一个字符串相似度算法,比如 Levenshtein 来检查相似度。我不能在哈希/盐上这样做。如果我在这里错了,请告诉我?