昨天下午在线参加了一项数字安全大会,会上有嘉宾提出“非口令生成软件生成的口令都是弱口令”,对此笔者表示呵呵:说得也太绝对了些。他PPT里面还提到工控安全从MAC地址管控开始,这虽然没错,但我在之前的文章中也强调了MAC地址是可以伪造的。
还是先回到本篇主题。在上一篇比较专业的文章中,提到了密码强度检查。密码强度这个概念是无论普通用户抑或系统管理员,都应该花点时间了解和自行安排检查。
笔者:国际认证信息系统审计师、软考系统分析师、软件工程硕士
那么我自己的密码够强吗?
答案是本篇的太长不看版本:
建议使用卡巴斯基提供的密码强度检查工具,网址如下: https://password.kaspersky.com/ |
我这篇没有任何推广收益,所以划走之前,别忘了点赞哦。
现在的浏览器大多都提供了自动生成强密码的功能,比如笔者长期在用的 Firefox 浏览器,会在需要时为用户生成像这样的密码:
3Ebr2;]Sj*fz}8]
确实是足够强。
但不可避免地,依然还是有浏览器提供不了帮助,需要自己设计密码的场合。
那么自己创建的密码究竟有多强,尤其是在易记和强壮之间能否获得平衡,需要通过密码强度检查工具才能比较可靠地确认。
另外,在上一篇中我提出的弱密码排查方法,不仅实施起来有难度,用户也有可能创造出并不在已泄露密码库中的弱密码,这始终需要用户自己在应用密码之前先行检查确认密码强度。
而且,从上次的例子来看,密码强度检查工具并不都那么先进,所以有必要找出一个足够好的密码强度检查工具。
对于用户来说,最容易获得的检查工具必然是基于WEB的,所以嵌入到终端安全软件内的密码强度检查功能,又或者独立的桌面软件这些都不在考虑范围内了。
简单定义如下5条规则:
1、是否密码构成不够复杂,比如长度不足8位,没有包含全部4类字符即英文大写字母、英文小写字母、10个基本数字、非字母字符。非字母字符即 SHIFT+数字键的 !@#$ 等以及字母键旁边的那些。
2、是否有人读(Human-readable)规律,即包含有字典词或字典词的变体(例如单词 Password 或其变体 p@ssw0rd)、汉语拼音(比如 MiMa 密码)、明显的日期特征(比如 19990109)等。
3、是否有序列性质,即包含有数字序列(比如 1234,888,765)、忽略大小写的字母序列(比如 Abcd,xyz)、键盘特征序列(比如 Qwerty)、符号序列(比如 ~!@#$)等。
4、是否曾经暴露过或被其他人使用过,即密码出现在互联网流传的社工密码库内,或称为泄露程度检查。
5、是否和用户本人强关联,即包含了用户的帐户名、用户姓名的拼音全拼或简拼、用户本人生日、手机号码等。话说此条只能靠用户自己检查,没有工具可以支持。
因为不是严谨的测评,所以只考察2个关键点:
该关键点指的就是前面弱密码特征的第4条。该条是在用户个人的密码设计能力之外的,必须靠工具检查。
由于目前已经暴露的社工密码库的密码总量巨大,该检查需要有后端服务支持才能实现,但同时,密码强度检查工具应做到用户输入的密码不会在网络上传输,也不会被记录下来。
在测评时,笔者通过浏览器的开发者工具,在网络传输页面观察密码强度检查工具是否有向网络后端提交数据的行为。
简单地按3条特征要求,使用了如下的密码样例进行测试,且期望:
Abcd!1234 提示强度(或长度)不足,存在字母序列、数字序列
Abcdef!123456 提示存在字母序列、数字序列
Asdf@1234 提示强度(或长度)不足,存在字母序列、数字序列
Asdfgh@123456 提示存在键盘序列、数字序列
Asdf1!@#$ 提示强度(或长度)不足,存在键盘序列、符号序列
China!20240620 提示存在字典词、日期特征序列
ZhongGuo!20240620 提出存在中文拼音词、日期特征序列
sBxpQvJ@5235 这一条是强密码,应确认其足够强,且能检查是否不存在于任何社工密码库内
3、顺带说说其它花絮因素
很多密码强度检查工具会给出密码的“破解时间”,估值有长有短,较夸张的密码强度检查工具对复杂密码甚至给出以万亿(Trillion)年为单位的时间估计。
但这个估计的时间实际毫无意义。因为穷举破解密码所需要的时间,取决于很多因素,包括计算硬件的种类、计算速度、并行规模、算法复杂度、能否空间换时间等等。
为了节省读者时间,测评结果只给出我认为最佳的密码强度检查工具。这结果就是......
没有一个能完全符合预期的。
但在能找到的范围内,比较有名气且较好的就是卡巴斯基提供的密码强度检查工具。
卡巴斯基的密码强度检查工具除了能提供基本的密码强度反馈信息之外,还能实现第4条,也就是能给出密码在泄露密码数据库中出现过的次数。而且还提供了中文的使用界面。
下图是测试的输出:
所以卡巴斯基密码强度检查工具是眼下较好的选择。网址是:
https://password.kaspersky.com/
对给出的密码样例,卡巴斯基密码强度检查工具反馈如下:
密码 | 强度 | 建议或说明 | 泄露情况 |
---|---|---|---|
Abcd!1234 | 极低 | 常用词汇 | 出现了395次。 |
Abcdef!123456 | 极低 | 常用词汇 | 未出现。 |
Asdf@1234 | 极低 | 常见键盘序列 | 出现了9244次。 |
Asdfgh@123456 | 极低 | 常见键盘序列 | 出现了7次。 |
Asdf1!@#$ | 极低 | 常见键盘序列 | 未出现 |
China!20240620 | 很好 | 可以抵抗黑客 | 未出现 |
ZhongGuo!20240620 | 很好 | 可以抵抗黑客 | 未出现 |
sBxpQvJ@5235 | 很好 | 可以抵抗黑客 | 未出现 |
从检查结果看,这个工具还是存在不足的:
1、对包含日期序列的情况没有提示改进
2、对形式上强但实际是字典词的情况没有提示改进
3、不能辨认汉语拼音词汇
需要说一下的是,对于比密码样例倒数第2、3两项实际更复杂的最后一个密码样例,估计卡巴斯基密码强度检查工具只是简单地按长度判断其强度不够倒数第2、3两项高。
因为在界面上,最后一个密码表现为强度提示条未满血。但还有一个问题是这和它给出的估计破解时长有矛盾。它提示最后一项的破解时间长达4个世纪,但倒数第2项却只是2个世纪,估计(我没去观察页面内嵌的前端代码)提示条和破解时间是分开两段不同程序做的计算吧。
泄露程度检查方面,卡巴斯基密码强度检查工具使用的是比较可靠的密码泄露检测服务,来自于 Have I Been Pwned (简称HIBP)[1]。
调用 HIBP 的检测服务并不需要向其提交密码明文,而是通过 GET 操作,以被检查的密码的信息摘要的范围值,批量获取该范围内密码数据库的密码信息摘要值和暴露的数量,然后再在返回内容中检索。
通过浏览器的开发者工具可以观察到卡巴斯基密码强度检查工具发送给 HIBP 进行检查的确实不是密码本身,而是密码的信息摘要的范围值。比如密码 Asdf@1234,它发送的只是 FEB1D 这个数值:
https://api.pwnedpasswords.com/range/FEB1D
HIBP 返回 FEB1D 这个范围内的信息摘要值和暴露的数量,卡巴斯基密码强度检查工具再在返回内容中进行进一步的检索确认密码是否曾经出现以及出现的次数,也就是下面这条:
0231771F8412274D9CD1937F05A174ED930:9244
也就是说,在检查的全过程内,密码的明文并没有离开用户的浏览器。
这就可以了。
能找到的相当多密码强度检查工具都是基于 zxcvbn [2] 实现的。
zxcvbn 是一个由 dropbox 开发的开源密码强度检查项目,原版本的最后更新是在2012年,已经有点时间。在 GITHUB 上也有一些分叉项目对其进行了改良调整补充[3]。
由于 zxcvbn 不支持本篇文章第2部分中,关于弱密码定义的第4条即密码是否曾经泄露进行检查,所以这类工具在进行密码检查时不会也不应该会进行任何网络交互过程。
但笔者在寻找和测试的过程中发现,某些密码强度检查工具宣称自己是基于 zxcvbn 但却通过 POST 操作与后端服务器进行交互,且直接提交密码原文,此类工具就完全不值得推荐使用了。例子如下图:
有读者或者会问,“此类工具”是哪个?但笔者不打算在没有确凿证据的情况下列名单,反正找到可靠好用的就行了。
基于 zxcvbn 的密码强度检查工具一般都进行了适当的修改或补充,比如丰富对密码的建议,调整密码破解时间的计算等。
从对多个基于 zxcvbn 实现的密码强度检查工具的测试结果看,无论如何修改,zxcvbn 始终都显得过时。存在的缺陷比如对于字符序列的辨认比较薄弱,对包含有英文单词的密码强度强弱判断过于乐观,完全不认识以拼音方式出现的中文词,不认识与日期相似但不含分隔符的数字字符序列等。
如下是基于 zxcvbn 的密码强度检查工具(https://www.passwordmonster.com/)对测评密码样例给出的检查结果的典型例子,此类密码强度检查工具的反馈基本上都差不多:
密码 | 强度 | 说明 |
---|---|---|
Abcd!1234 | 非常弱 | 包含了两个字典词,1个字符序列和1个通用密码。(有些工具会建议添加1~2个不常见的单词,以下偕同) |
Abcdef!123456 | 非常弱 | 包含了两个通用密码和1个字典词 |
Asdf@1234 | 非常弱 | 包含了两个通用密码和1个字典词。 |
Asdfgh@123456 | 非常弱 | 包含了两个通用密码和1个字典词。(有些工具警告键盘序列组合容易被猜到) |
Asdf1!@#$ | 弱 | 包含了1个常见密码,1个字典词和与键盘序列相似的字符组合。 |
China!20240620 | 强 | (有些改良工具会提示日期往往很容易被猜测,下同) |
ZhongGuo!20240620 | 非常强 | |
sBxpQvJ@5235 | 非常强 | 提示非常长的破解时间,比如9百万年 |
马上着手检查自己的密码是否够强。
如果是网络安全管理部门,那当然是发通知让信息系统用户自行排查确认和修改弱密码啦。
相关链接:
[1] Have I Been Pwned
[2] zxcvbn
https://github.com/dropbox/zxcvbn/
[3] zxcvbn-TypeScript
本站微信订阅号:
本页网址二维码: