如果每个组中至少包含一个字符(az、AZ、0-9),它真的会改善密码吗?

信息安全 密码
2021-08-29 15:34:16

许多密码策略要求密码中每组至少有一个字符(大写、小写、符号和数字)。

这真的可以提高密码强度吗?

例如:是(包括数字)

3 i{M?tofQPI.'C`dfmSK

真的比(没有数字)强

n i{M?tofQPI.'C`dfmSK

请尽量保持答案简单。正如问题可能表明的那样,我在密码学方面并不是很熟练。

4个回答

password对于那些只选择最简单的允许密码的人来说,这确实是对熵的改进,例如pa55word(第一个是你能得到的最糟糕的,第二个明显更好但仍然简单得让人无法接受)。 Password1是 的 10 倍Password,但仅仅是因为它更长,尽管Passworda会是原始的 26 倍Password

对于选择安全密码的人来说,这是一个障碍。它迫使密码喜欢ni{M?tofQPI.'C\`dfmSK成为3i{M?tofQPI.'C\`dfmSK. 从纯粹的熵的角度来看,数字 (10) 的可能性比小写 (26)、大写 (26) 或特殊字符 (~32) 的可能性要少。n…密码可以说*的熵是3…密码的2.6 倍2610)。

考虑一个更严格的密码方案:您必须有一个大写字母、一个数字和一个特殊字符。因此,攻击者知道有大量密码是不可能的,因此不需要在暴力攻击中进行测试

使用心理学,攻击者还将优先考虑第一个字符为大写,最后一个字符为数字或特殊字符,这意味着1pa*sswoRdPassword1*(但同样,简单得令人无法接受)强得多。这称为“密码拓扑”(从 Rick Redman 的PathWell:密码拓扑研究中了解更多信息)。

*计算密码熵是非常非常困难的,没有人能正确地做到(除非你在谈论测量自动密码生成器,否则不可能“正确”地做到这一点)。必须假设最坏的情况,即攻击者完全知道您的密码生成方案,因为您不能通过默默无闻来依赖安全性。我有自己的计算熵的方法,我比我见过的其他方法更喜欢它,但它也不完美。因此,最好的密码生成建议是制作一个非常长的密码,即使忽略密码的第一个和最后一个字符,也能满足大多数推荐的密码指南。

将 eg 更改password为 时Password,您将熵加倍,因为它是制作大写字母的最常见位置(并且 upper-vs-lower 有两个选项),而更改passwordpAssword至少意味着大写可以在任何地方,而不是通过增加复杂性在此示例中为 16 倍(八个字符乘以两种情况的可能性)。

不要忘记单词。一个单词值 2-3 个“随机字符”,仅此而已。超级晦涩的单词(尤其是来自稀有语言的单词)可能值最多四个字符(请参阅上面的熵链接),但最好在您的估计中保持保守。我说,如果它在您已知会说的任何语言的拼写词典中,则值 2。任何其他重要的单词都值 3。 Password而其他常见密码(甚至1qaz2wsx; 看看你的键盘)值 1,所以Password1大约为安全为K%. 由于攻击者可以梳理您的驱动器,因此在您的计算机(不包括字典)的任何位置找到的任何“单词”最多值 2 个字符。

随机对于人类来说很难想出,也更难记住(而且,与人类的直觉相反,任意/模糊/聪明不是“随机的”)。这就是为什么密码管理器愿意为你做这件事,创建一个系统,你只需要记住一个大密码,你可以记住一半,另一半放在钱包里。

对于两个随机生成的 8 个字符的密码(例如),从空格 (az,AZ,0-9) 与 (az,AZ) 中选择确实会增加密码的强度。您可以按照我应该如何计算密码的熵中的信息计算出多少?.

在实践中,对于人为生成的密码,很难说。真的Password1比不上PasswordX吗?可能不是。像这样的简单策略并不会真正迫使用户在实践中选择更好的密码。

这个问题的答案有两个组成部分:密码允许的字符数和用户选择的密码质量。

假设您的系统允许在密码中使用可打印的 ASCII 字符,并且密码的长度固定为 5 个字符(记住这只是一个说明性示例)。

如果您的用户是完美的随机数生成器,那么攻击者必须尝试 95^5 种可能的组合,并且最低“复杂性”要求不会提高安全性。从攻击者的 POV 来看,如果密码是“ABCDE”,这不亚于“J(@K>”,因为攻击者不知道所有字符都是字母这一事实的先验知识;他只知道在已找到密码,并且该组合与任何其他 5 个字符的字符串一样可能。**事实上,“复杂性”要求实际上降低了熵,因为有几种组合是不允许的,因此可以从攻击中排除.

不幸的是,人们不是随机数生成器。一点也不。人们会选择尽可能容易记住的东西。攻击者知道这一点,并将通过优先考虑对人类有意义的字符串来优化他们的攻击(因为现在他确实有一些先验信息)。这就是密码复杂性要求通过强制使用的字符至少有最小变化来“帮助”的地方。如果没有这些要求,许多人会简单地使用字母,大多数攻击者会利用这一点来相应地优化搜索。从本质上讲,复杂性要求使人类用户的可能密码池更大。但是,如果您使用像 Fortuna 这样的(希望是加密安全的)伪随机数生成器来生成密码,请不要包含这些“复杂性”

最后,密码复杂度有两个维度:字符的变化和字符的数量。使密码具有数字和特殊字符会增加一维,但放弃复杂性要求而使用长密码(或密码短语)可能要好得多。密码中只有英文字母所损失的熵通常可以通过密码短语中的 6-10 个单词来弥补。这些通常也比“复杂”密码更容易记住。

有证据支持这样一种观点,即添加数字、大写字母、特殊字符等要求会降低实践中的密码强度。这可能是我读过的最好的解释:https ://xkcd.com/936/