密码必须至少有八个字符,有一个大写和两个数字,这不会给黑客提供太多关于我所有用户密码的信息吗?
让我们来看看。忽略标点符号(因为没有多少人会费心在密码中输入任何符号,除非被迫这样做),密码中通常出现 62 个字符。当然,有些密码比其他密码更常见,因为大多数密码不是随机生成的。
让我们比较一下如果我们只说“最少 8 个字符”会发生什么,而如果我们做出额外的限制会发生什么。让我们也假设最坏情况下的密码,它只有最小值。
如果允许任何字符组合,则可能的密码数是62**8
,即2.2 * 10**14
一个大写和两位数字限制的可能密码的数量是(嗯,我不擅长组合)超过62**5 * 26 * 100
,即2.4 * 10**12
.
所以攻击者肯定有更多的信息:密码的总空间减少了 99%。但是是不是太小了?这种规模差异(2.4 万亿与 220 万亿)是否会在攻击者暴力破解密码和不这样做之间产生差异?
可能不是。即使存在差异,您也可以通过要求 9 个字符而不是 8 个字符来恢复大部分空间。因此,您不会增加了解自己在做什么并选择强密码的用户的风险。
我并不完全相信自己在密码中要求大写和数字是加强密码的最佳方法,但如果它阻止用户使用字典单词,那么你就为攻击者设置了某种障碍。您已经从该空间中消除了最糟糕的密码,这意味着您(希望)在您的网站上制作了“最容易猜到的密码”,至少更难破解。这就是您希望通过这些简单的密码限制来做的所有事情。
您确实必须考虑一下您的威胁模型。例如,有一段时间,我不确定那段时间是过去/现在/未来,在此期间,2 万亿入口彩虹表在计算上是可行的,但 200 万亿彩虹表是不可行的。我怀疑这个时期对于地球上最有能力的攻击者来说是过去,而对于普通破解者来说是未来,但是每当它发生时,这个历史时期都是短暂的,因此你不想建立你的网站假设您的实际攻击者当前存在安全性。
现在,将不同的密码标准应用于不同的用户会更好吗?如果攻击者正在应用从较小的密码空间中受益的攻击,它会。但是,如果任何限制很弱(“超过五个字符和两个数字”是您的示例列表中最弱的),那么与您对所有人使用最强限制相比,仍然允许一些用户使用较弱的密码。
所以基本上不,我认为随机应用几个同等价值标准中的一个不会有任何显着的好处。它可能做的最好的事情就是将所需的攻击规模乘以您选择的不同标准的数量。那是如果不同的规则产生完全不相交的密码空间,那么实际上它不会那么好。
要求大写字母或数字几乎是一种心理技巧,可以鼓励您的用户选择非字典密码,并可能让用户思考一下他们在做什么。如果它有效,那就太好了,无论您是否将相同的规则应用于每个人,它都会有效。与您的用户实际想到和使用的密码空间相比,允许密码的空间几乎无关紧要。
如果您想阻止您的用户选择弱密码,请确保您的限制(无论它们如何应用)都会阻止最常用的密码(http://gizmodo.com/5954372/the-25-most-popular-passwords -of-2012,https: //xato.net/passwords/more-top-worst-passwords/ )。这些肯定是任何暴力攻击者都会尝试的第一批。其中许多包含数字。无法判断它们是否包含大写字母,因为研究人员已将所有内容都小写了。
值得注意的是,根据研究人员的说法,91% 的公开密码落入前 10k 名(不区分大小写)。因此,即使每个密码中有一个大写字母,平均长度为 6.3 个字符,攻击者也可以在 63k 次猜测中暴力破解 91% 的帐户。如果您允许用户使用这些密码,如果幸运的话,在来自普通僵尸网络的在线攻击中需要大约一天的时间才能找到它。对安全散列和加盐密码列表的离线攻击几秒钟。
摆脱那些最常见的密码对于使攻击者难以暴力破解是绝对必要的。密码空间的确切大小远没有那么重要。