在我们的密码生成器中没有基于键盘的序列是否很好?

信息安全 密码
2021-08-22 18:32:37

如果我们必须编写一个密码生成器,那么包含一个“基于键盘的序列”检查器是不是一个好主意?所以如果生成的密码是:

asdf4%'Q!76342

然后这个密码将被生成器拒绝,并生成另一个,因为“asdf”。

问题:删除其中包含“基于键盘的序列”的密码是个好主意吗?或者它只会产生可以在统计上被破解的密码,因为我们知道密码中不会有“asdf”?哪种解决方案更好?

3个回答

我会说是的。@Philipp确实提出了一些好处,但是如果删除基于关键字的序列,实际上会丢失多少密码?可能不足以产生任何真正的影响(当然取决于您实际过滤的方式)。

生成这样一个密码的可能性(可能)非常低(所以另一个问题是实现这样的过滤器是否真的值得工作),但如果它确实发生了,那就太糟糕了,因为那样生成的密码很容易猜到,这正是您想要使用生成的密码来避免的。

当您进行过滤时,您过滤的基于键盘的序列的长度应该与密码长度成合理的比例。因此,如果您生成长度为 15 的密码,过滤掉asd可能不是一个好主意(因为asd长密码不会导致容易猜到的密码,但实际上您会排除相当广泛的密码)。如果密码包含长度约为的序列 password.length - 4(序列中的 4 个附加字符似乎足以避免简单的暴力破解),我可能会排除密码。

如果您确实过滤了生成的密码,我也会根据常用密码列表进行过滤(您真的不希望您的密码生成器生成123456or password1)。

一个好的安全方案假定攻击者知道您如何生成密码。

当攻击者知道您的算法永远不会生成某些密码时,它就不必检查这些密码,这减少了他们为暴力破解所需的工作量。因此,在您的生成器中设置这样的限制会适得其反。

一种想法可能是尝试破解使用一种或多种密码破解工具生成的密码,以确保它们的强度。如果该工具可以破解它,请生成一个新密码。这应该会清除许多自动生成的不安全密码,包括密钥序列和字典单词。这样做的一个问题是它可能需要太多的计算能力来运行检查,这取决于有多少用户正在创建新密码。