作为用户,密码使用有两条规则:
1)。 切勿在不同的实体中重复使用相同的密码(例如,不要在您的网上银行使用相同的密码作为由某些匿名个人设置的免费网络论坛)。任何站点都可能以明文形式记录密码(甚至是意外键入的其他站点的密码),并且可能使用这些密码来攻击其他站点上的用户。[1]。
2)。选择不会在字典攻击或任何常见密码列表中找到的高熵密码/密码短语(最好是随机生成且仅稍作修改)。
用户在本地存储密码短语保护的加密列表的系统是一个很好的解决方案,该列表是在所有计算机之间同步的随机生成的密码,但您不能指望大多数用户都这样做。
作为开发人员为系统设置密码规则是一种平衡行为。更严格的规则通常意味着更困难的用户体验 (UX)。如果您的规则特别严格,用户会以某种方式规避您的规则。他们会用电脑写下来,以纯文本形式保存在桌面上,或者停止使用你的服务,或者不断向上级投诉,或者每次登录都使用密码重置机制(最终可能会被一个更薄弱的环节)。也许您在他们的密码中需要一个数字,他们使用一个常用的字典单词,然后在末尾附加一个 1。您要求密码每三个月更改一次且不得重复使用,最终用户将其密码轮换为Spring2012, Summer2012.
相反,没有任何规则意味着您会发现许多白痴用户会选择前 100/1000 个密码列表中的密码。
自定义规则很好,因为您可以设置长度/复杂度的最低限度,并且如果您的规则非常特殊(例如,没有特殊符号;但至少有两个数字和一个大写/小写字母),还可以防止密码重用。但是,您应该确保您的自定义规则不排除强密码,这是获得令人难忘的高熵密码的好方法。此外,使常见的弱密码无效可能有助于保护您的应用程序。例如,如果您不允许用户设置密码,该密码是字典单词加上末尾的数字,或者来自通用密码列表的密码,这可能会增强安全性。(尽管攻击者可以再次使用该信息来知道哪些密码不可以尝试;并且您的用户可能会找到通过您的规则的最低限度的密码)。
但是要回答您的问题,由任意数量的数字、大小写字母组成的 8 字符密码的熵是 lg(62 8 ) ~ 47.6 位(让我们忽略符号)。恰好三个字母是数字的 8 字符密码的熵是 44.3 位 ~ lg (56 * 52 5 10 3 ) (56 = 8 选择 3;从 8 个位置中选择的三个数字的组合数),所以它的较弱。如果放宽条件,要求为 8 个字符且为 3 位或更多位;那么它仍然只有 44.6 位。所以需要d数字N与允许任何符号相比,符号长密码稍微削弱了它,但只有几位熵。或者,如果您比较没有数字要求的 7 位密码 lg(62 7 ) ~ 41.7 位,并添加一个强制选择的随机插入空间的数字;新密码强度提高 80 倍(6.3 位)(十个数字选择;8 个强制数字位置选择)。