有几个关于强制密码的问题,所以我想我会添加自己的:
除了强制执行最小香农熵之外,根据以下标准完全禁止使用特定密码或元素通常是一种好习惯:
- 在 SplashData 的“前 25 名”列表中出现至少一次(“password”、“letmein”、“qwerty”)
- 众所周知的专有名称(“parishilton”、“hasselhoff”)
- IT 安全领域的“有趣”(“correcthorsebatterystaple”、“orpheanbeholderscrydoubt”)
- 以前在我们的系统中使用并已知已被泄露的任何密码
- 等等。
这些显然都是非常糟糕的密码选择,但至少第一类是不好的,因为它们非常常用。教训是显而易见的;不要让您的用户使用这些错误的密码。
获取提交的密码,去除空格并将所有字母转换为小写,然后与黑名单项目运行“包含”比较,颠覆使用空格、大写或添加其他字母/数字来添加熵的尝试,这将是微不足道的。检测字母替换(可能是最小的 Levenshtein 距离)会更难,并非不可能。存储条目被禁止的原因并将其返回给用户也很容易,鼓励他们尝试一些本质上不同并且希望更不可预测的东西(尽管这样一个特定的拒绝原因可能会提供太多信息,如果“用户" 是攻击者)。
理论上好吗?在实践中你会预见到哪些问题?