网络安全评估标准中,对口令字的安全要求是:由字母、数字、符号组成的长度不少于14位的复杂口令字。为什么这样的口令字是安全的呢?
我用Python代码模拟了黑客对这样的口令字进行暴力破解的过程,代码主要包括3点考虑:
- 正常情况下,黑客会逐位递增尝试口令字的排列组合;
- 键盘上能作为口令字的字符有95个,包括大小写字母、数字和符号;
- 世界上最快的计算机是Summit,理论上的峰值运算速度可达每秒20亿亿次。
由这三点考虑形成了如下代码:
import math
num_pass_length = 1 # 密码长度,口令字长度由1逐渐增加
total_time = 0 # 破解时间,0位口令字为0
num_pass_char = 26 + 26 + 10 + 33 # 95个能作为口令字的字符:包括52个大、小写字母,10个数字,33个符号
for num_pass_length in range(1,16): # 测试的口令字长度为0到15位
num_total_path = math.pow(num_pass_char, num_pass_length) # 当前位数的口令字排列组合可能性
count_tianhe = 2 * math.pow(10, 17) # 最快的计算机理论上的峰值运算速度为20亿亿次/秒
year_to_sec = 365 * 24 * 60 * 60 # 一年多少秒钟
need_time_year = num_total_path /year_to_sec /count_tianhe # 当前长度的口令字需要破解的时间
total_time += need_time_year # 累计破解时长
if num_pass_length >= 5:
print("{}位密码,理论上最快{:.3f}年内完全破解".format(num_pass_length, total_time))
结果如下:
5位密码,理论上最快0.000年内完全破解
6位密码,理论上最快0.000年内完全破解
7位密码,理论上最快0.000年内完全破解
8位密码,理论上最快0.000年内完全破解
9位密码,理论上最快0.000年内完全破解
10位密码,理论上最快0.000年内完全破解
11位密码,理论上最快0.001年内完全破解
12位密码,理论上最快0.087年内完全破解
13位密码,理论上最快8.226年内完全破解
14位密码,理论上最快781.429年内完全破解
15位密码,理论上最快74235.772年内完全破解
通过结果可以看出,10位以下的口令字安全性很低。而11、12、13位的口令字通过周期更换的方法,可以被认为比较安全。
至于14位以上的复杂口令字,因为破解13位以内的口令字已经需要耗费8年多,所以黑客一般不会对14位以上的复杂口令字进行尝试,那么它当然是安全的!
网友评论