检查密码复杂性:与最近的X密码不同

Nul*_*ion 6 security encryption passwords

大多数服务,程序等都有各种密码复杂性检查.在没有深入研究这种检查功效的情况下,我想到了一个可能有趣但也可能有问题的检查:

"新密码必须是Y与上一个X密码不同的字符."

这会阻止人们使用像Password1!,Password2!等等的密码.但是如果这样做了,就不能对先前使用的密码进行哈希处理 - 它们最好是加密的......对吧?

对于一个小Y而且相当短的密码,你可能仍然可以存储哈希和暴力Y破解新密码的所有字母变体,但是随着Y密码长度的增加而变得不可行.

我最初的想法是这样的:因为当你更改密码时,你必须提供你的原始密码,散列新密码并以加密形式存储旧密码.现在它是可逆的.

因此,假设有效密码始终是哈希值,那么有更好的方法吗?并且这样做是否会增加降低应用程序的安全性?

Nem*_*emo 2

我试图将其放入评论中,但我认为这足够重要,可以放入答案。

OP提出的方案并不一定违反CWE-257。该提案不允许系统管理员(比如说)恢复旧密码。

建议使用密码作为所有密码的加密密钥。如果您可以接受客户端而不是服务器上的“新密码验证”,那么这并不比使用密码加密其他任何内容更安全。

因此,“更改密码”小工具将是客户端代码。服务器将发送 N 个早期密码的加密列表,客户端可以使用用户当前的密码对其进行解密,然后使用用户的新密码重新加密。服务器在任何时候都没有足够的信息来确定任何密码,无论是旧的还是新的。只有客户端拥有此信息,但无论如何它都有……不同之处在于,了解您当前密码的攻击者也可以了解您的旧密码。由于得知您当前的密码已经是一场灾难,因此我觉得这并没有那么糟糕。

确实,这并不能防止员工编写自己的密码更改实用程序来绕过密码限制的“攻击”,因为验证不是在服务器端完成的。但我认为这绝不违反 CWE-257。

这实际上是一个相当聪明的想法。