最少位数是否会提高密码安全性?

信息安全 密码 密码策略
2021-08-31 01:27:28

一些密码系统将强制执行至少X的一种字符——我看到的一个常见的字符是“最少 3 个数字字符”。据我了解,简单地允许某些字符类,如数字,会大大增加密码空间(例如,每个区分大小写的字母数字字符的 (26*2)+10 可能性与仅字母的 (26*2) 的可能性),所以我看不到至少 3 位数字对提高密码安全性/熵有何作用。

我的猜测是,它只是在密码中强制执行一些变化,以便用户不只是使用普通的字典单词。

我的想法正确吗?passwordABC当可用字符集相同时,是否password123同样(不)可靠?(当然,这些人为的例子很可能会被任何攻击及早尝试和发现)

或者是否有一些技术原因为什么最少的X数字,特殊字符,无论是什么好政策?

4个回答

密码的安全性并不是真正允许用户选择什么,而是用户实际平均选择什么。

攻击者试图猜测用户选择的密码,他会首先尝试最可能的密码。这里的“最可能”是指攻击者进行的一种心理研究;简而言之,这意味着攻击者将尝试使用著名足球/棒球/曲棍球运动员的名字,因为许多用户使用自己的设备使用这些名字作为密码。

理想的用户完全随机选择他的密码,在可能的密码空间上具有统一的概率(即所有可以输入并且机器将接受的密码)。不过,大多数用户不会这样做。即使他们可以在密码中使用数字,如果可以选择,他们也不会使用数字;因为用户和其他人一样,都试图最大限度地提高自己的舒适度和效率,所以他们想要易于输入且易于记忆的密码。全字母密码比混合字母数字密码更容易记住,也更容易输入,尤其是在智能手机上(例如,基本的 Android 可视键盘在不同的屏幕上显示字母和数字)。

对最小位数的限制是为了使用户更加随机:它阻止他们使用全字母密码,因为当技术上允许这样做时,用户最终会依赖非常低熵的密码(那些这很容易猜到)。通过强制包含一些数字,系统管理员可以(稍微)将用户推出他们的舒适区,并强制他们选择一个简单的足球运动员姓名不是有效密码的密码。

通过适度和品味完成,这通过使密码平均不易被猜到来提高安全性。不过不要抱太大希望:许多用户会在密码末尾添加“111”,然后就可以了。攻击者也知道这一点。而且,你添加的约束越多,用户就越有可能成为敌人人们不喜欢被赶出他们的舒适区。如果你推他们太多,他们会做出相当有创意的反应,例如在一张纸上写下完成的密码(根据远古传统,隐藏在键盘下——攻击者当然知道这一点)。用户不能因此而受到责备,但最终的结果是,当实施善意的约束时,安全性可能会降低。

关于密码中的非字母字符的话题,有一个著名的 XKCD 漫画。还请阅读此站点上的后续线程请注意,那里的一些答案没有抓住重点;我特别推荐Thomas PorninAviDMike Hamburg的答案。

对于任何了解信息论和安全性并与不了解信息理论和安全性的人(可能涉及混合案例)发生激烈争论的人,我真诚地道歉。)

然而,这只是硬币的一方面。大多数用户不会尝试使用难以猜到的密码,他们更喜欢使用令人难忘的东西,比如他们第一个孩子的名字。强迫他们有一个数字确实会增加一些熵:当然,很多会附加 1,但有些会使用他们的出生日期。在需要在字母和数字之间切换模式的移动键盘上打字的用户特别有可能将数字放在末尾。

顺便说一句,要求标点符号更有可能增加熵。虽然.末尾的 a 是一个“明显”的标点符号,但一些用户会选择一个两个单词的密码短语,中间有一个标点符号。

还有一个安全剧院方面:如果您在安全策略中记录密码必须至少包含 X 个字符,包括 1 个数字和 1 个大写字母,看起来您正在做一些事情来提高安全性。即使有更好的方法使用全小写密码。

您是对的,强制用户在密码中输入数字的目标会增加字符集,从而增加加密强度,这与强制使用大写字母和特殊字符相同。我认为在密码中强制使用 3 位数字会适得其反,因为大多数用户会简单地将 3 位数字添加到密码的末尾以保持简单。如果大多数密码是 passw123 或 something567,它实际上通过引入模式来降低复杂性。

作为用户,密码使用有两条规则:

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 个强制数字位置选择)。