为啥在密码中使用特殊字符被认为是强密码?

Posted

技术标签:

【中文标题】为啥在密码中使用特殊字符被认为是强密码?【英文标题】:Why is the use of special characters in passwords considered to be a strong password?为什么在密码中使用特殊字符被认为是强密码? 【发布时间】:2014-11-23 10:08:15 【问题描述】:

为什么强密码需要特殊字符。

有些网站要求必须输入特殊字符才能创建密码。

这背后有什么技术原因吗?

【问题讨论】:

relevant xkcd 【参考方案1】:

当然。解释起来很长,而且超出了我的能力范围,所以你需要阅读Entropy in Information Theory 的概念。来自Wikipedia的更简单的解释:

人工密码

众所周知,人们在获得足够的熵以产生令人满意的密码方面是疏忽大意的。一些舞台魔术师利用这种无能来娱乐,以一种次要的方式,通过预测观众做出的假设随机选择(比如数字)。

因此,在一项对超过 300 万个八字符密码的分析中,字母“e”被使用了超过 150 万次,而字母“f”仅被使用了 250,000 次。均匀分布会使每个字符被使用大约 900,000 次。最常用的数字是“1”,而最常用的字母是 a、e、o 和 r。

用户很少在形成密码时充分利用较大的字符集。例如,2006 年从 MySpace 网络钓鱼计划中获得的黑客攻击结果揭示了 34,000 个密码,其中只有 8.3% 使用混合大小写、数字和符号。

请注意,只有从密码集中随机选择密码中的每个字符,才能获得与使用整个 ASCII 字符集(数字、混合大小写字母和特殊字符)相关的全部强度。将一个字母大写并在密码中添加一个或两个数字和一个特殊字符不会达到相同的强度。如果以可预测的方式添加数字和特殊字符,例如在密码的开头和结尾,与相同长度的全字母随机密码相比,它们甚至可以降低密码强度。 NIST 特别出版物 800-63

2004 年 6 月的 NIST 特别出版物 800-63 建议使用以下方案来粗略估计人工生成密码的熵:2

The entropy of the first character is four bits;
The entropy of the next seven characters are two bits per character;
The ninth through the twentieth character has 1.5 bits of entropy per character;
Characters 21 and above have one bit of entropy per character.
A "bonus" of six bits is added if both upper case letters and non-alphabetic characters are used.
A "bonus" of six bits is added for passwords of length 1 through 19 characters following an extensive dictionary check to ensure the password is not contained within a large dictionary. Passwords of 20 characters or more do not receive this bonus because it is assumed they are pass-phrases consisting of multiple dictionary words.

使用这个方案,一个八字符的人工选择的密码,没有大写字母和非字母字符,估计有 18 位熵。 NIST 的出版物承认,在开发时,几乎没有关于现实世界密码选择的信息。

后来使用新获得的真实世界数据对人工选择的密码熵进行的研究表明,NIST 方案没有为人工选择的密码的熵估计提供有效的度量。 可用性和实施​​注意事项

由于各国键盘的实现方式各不相同,并非所有 94 个 ASCII 可打印字符都可以在任何地方使用。这会给希望使用本地计算机上的键盘登录远程系统的国际旅行者带来问题。请参阅键盘布局。许多手持设备(例如平板电脑和智能手机)需要复杂的换档序列才能输入特殊字符。

身份验证程序在密码中允许使用的字符有所不同。有些不识别大小写差异(例如,大写“E”被认为等同于小写“e”),其他一些则禁止其他一些符号。在过去的几十年中,系统允许密码中包含更多字符,但仍然存在限制。系统允许的最大密码长度也有所不同。


或者,用外行的话来说:对于您在字母数字选项上添加的每个额外字节,您都会使密码更加复杂且难以破解。

更多信息here

【讨论】:

【参考方案2】:

其背后的主要技术原因是难以猜测,为了提高密码安全性,这是一种很好的做法。当任何人试图利用时,首先他会尝试使用字典攻击来进行攻击,如果您使用特殊字符,则可以避免此问题。因此,很少有组织制定包含此规则的密码策略以提高安全性。

【讨论】:

【参考方案3】:

1) 如果您只使用字符和数字,您可能会使用一些容易被猜到的单词或数字。黑客拥有可以反复快速尝试所有已知单词的工具,他们会在尝试使用特殊字符的密码之前先尝试这些工具

2) 如果您只使用字母和数字,则在任何位置猜测字符的概率为 1/62(有 62 种可能性)。 如果您使用特殊字符 (there are 32 of them),概率会降低到 1/94。 如果您键入例如 8 个字符,您可以形成的可能组合的总数是 a) 如果您不使用特殊字符:62 ** 8 = 2.1834E+14 b) 如果你使用特殊字符:94 ** 8 = 60.9569E+14

因此,使用特殊字符的组合大约会多 30 倍,也就是说,如果密码中使用了 8 个字符,那么破解带有特殊字符的密码要比不使用特殊字符的密码要多 30 倍

【讨论】:

以上是关于为啥在密码中使用特殊字符被认为是强密码?的主要内容,如果未能解决你的问题,请参考以下文章

SQLPlus:在脚本中使用特殊字符作为密码

ORACLE 用户的 密码 支持哪些特殊字符,不支持哪些字符?

shell脚本中怎样对特殊字符进行处理 一串密码在加密前对密码中的!@#$%等特殊字符进行处理(加上‘’)。

网站做压力测试,为啥div里的字母和特殊字符不自动换行?中文文字可以!郁闷...

随机生成密码,长度6-10位、不可包含特殊字符、必须包含大写、小写和数字,oracle 如何实现?

在python中识别密码验证中的特殊字符