DoD密码复杂性:用户无法重用以前的任何X密码

Log*_*man 6 security encryption passwords complexity-theory

我已经看到了几个帖子,但我还没有看到确定的答案.因此,我想我会尝试在新的背景下重申这个问题(国防部).

根据DISA的" 应用安全和开发STIG,V3R2 ",第3.1.24.2密码复杂性和维护,DoD企业软件有一个非常严格的密码指南:

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

  • 密码必须包含大写字母,小写字母,数字和特殊字符的混合.

  • 更改密码后,用户必须无法使用姓名,电话号码,帐户名称或字典单词等个人信息.

  • 密码必须在60天后过期.

  • 用户必须无法重复使用以前的10个密码.

  • 确保应用程序能够在更改密码时要求新帐户密码与以前的密码相差至少四个字符.

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

NullUserException的帖子所述,开发人员实际上可以检查最后X个密码量(并且还确保新密码与以前的密码[ bullet 6 ]不同),密码必须使用可逆密码加密方法,而不是哈希密码(即使我使用的是NSA批准的加密算法,也会更加不安全).拟议的答案似乎有道理,尽管似乎存在一些差异和争论,如Dan Vinton的帖子所示.

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


编辑:漏洞APP3320.7(项目符号第6点)声明"确保应用程序能够在密码更改时要求新帐户密码与以前的密码相差至少四个字符." 这让我相信我必须运行一个字符串相似度算法,如Levenshtein来检查相似性.我不能在hash/salt上执行此操作.如果我错了,请告诉我?

Dou*_*gal 12

所述的字符距离要求仅适用于(一个)先前的密码,而不是之前的10个密码.假设您的密码工具需要输入当前密码以及新密码,您只需检查一下; 不需要在那里存储任何东西.(在你提到的帖子的这个答案上也注明了.)

当然,要求不匹配前10个密码中的任何一个,只需检查旧的哈希值即可.