Nul*_*ion 6 security encryption passwords
大多数服务,程序等都有各种密码复杂性检查.在没有深入研究这种检查的功效的情况下,我想到了一个可能有趣但也可能有问题的检查:
"新密码必须是Y与上一个X密码不同的字符."
这会阻止人们使用像Password1!,Password2!等等的密码.但是如果这样做了,就不能对先前使用的密码进行哈希处理 - 它们最好是加密的......对吧?
对于一个小Y而且相当短的密码,你可能仍然可以存储哈希和暴力Y破解新密码的所有字母变体,但是随着Y密码长度的增加而变得不可行.
我最初的想法是这样的:因为当你更改密码时,你必须提供你的原始密码,散列新密码并以加密形式存储旧密码.现在它是可逆的.
因此,假设有效密码始终是哈希值,那么有更好的方法吗?并且这样做是否会增加或降低应用程序的安全性?
我试图将其放入评论中,但我认为这足够重要,可以放入答案。
OP提出的方案并不一定违反CWE-257。该提案不允许系统管理员(比如说)恢复旧密码。
建议使用新密码作为所有旧密码的加密密钥。如果您可以接受客户端而不是服务器上的“新密码验证”,那么这并不比使用密码加密其他任何内容更安全。
因此,“更改密码”小工具将是客户端代码。服务器将发送 N 个早期密码的加密列表,客户端可以使用用户当前的密码对其进行解密,然后使用用户的新密码重新加密。服务器在任何时候都没有足够的信息来确定任何密码,无论是旧的还是新的。只有客户端拥有此信息,但无论如何它都有……不同之处在于,了解您当前密码的攻击者也可以了解您的旧密码。由于得知您当前的密码已经是一场灾难,因此我觉得这并没有那么糟糕。
确实,这并不能防止员工编写自己的密码更改实用程序来绕过密码限制的“攻击”,因为验证不是在服务器端完成的。但我认为这绝不违反 CWE-257。
这实际上是一个相当聪明的想法。