密码强度计算策略
文章目录
- 密码强度计算策略
- 1 基于密码组合
- 2 基于被破解时间
- 3 基于信息熵
密码强度计算策略
大学上课时,老师就提到千万不要小看登录、注册模块,设计起来也是会很复杂的。那时候编程刚入门没体会,心想登录、注册不就几个input,提交两个表单就完事了嘛。哈哈哈,现在想起来真是年轻!后来慢慢知道了表单校验、图形验证码、邮箱验证等等。
今天这个问题,同样来自于看似简单的注册模块,在注册账号设置密码时,根据输入的密码显示其安全系数。那么是怎么计算密码强度?就来一起探索下这个规则大致都是这么设计的吧!
(这是一个图片!)
首先说明,密码的强度越高,代表的是越不容易被猜测攻击给破解,而不能防止恶意程序或按键记录器窃取。
1 基于密码组合
组合规则很简单也最常见,即要求密码中至少包含4类字符中的3类,即:
- 大写字符[A-Z]
- 小写字符[a-z]
- 数字[0-9]
- 特殊字符:~!@#$%^&*_-+=`|(){}[]:;"’<>,.?/
由于之前做过一题oj,所以设计的时候最开始就想到了这个方法。题目是:牛客网——密码强度等级(这个题目好像是来自于华为OJ,如果链接挂了可以直接百度题目)。
这种方式的优点就是较为简单,代码复杂度低,可以很容易的自定义得分计算规则,并且规则可以设置加分项和减分项。
但缺点也非常明显,一是会降低用户体验,用户输入的密码不能太简单也不能太复杂,太简单通不过规则,太过复杂难以记忆。如下图lastpass(在线密码管理器)注册界面中主密码输入框:
二是随着计算机运算能力的成倍提高,通过复杂的组合规则防止破解的作用也越来越小,且规则只会变得越来越复杂。
2 基于被破解时间
日常中我们见到的几乎都是基于复杂规则进行计算密码强度,且已习惯这种方式,甚至认为只要密码足够复杂,就足够安全。但我们反过来想,要保证密码安全,最主要是保证密码不被破解不就行了!
zxcvbn便是基于密码被破解时间计算密码强度,名字的来源其实就是字母键区最底层从左至右5个字母。zxcvbn是github上拥有10k star的开源项目,使用方便,且几乎支持所有开发语言(github地址)。
官方的介绍说得非常明白,这里就不一一翻译原文了。大概意思是,zxcvbn通过结合模式匹配(即字典,字典包含有常用密码、常用英文词汇等)和估计被破解时间这两种方式,来计算得到密码强度。开发它的目的就是用来替代密码组合规则的,相比之下zxcvbn更安全、灵活和好用。
在下一篇文章里,我将详细介绍zxcvbn的具体使用。
3 基于信息熵
信息熵的思路与第二种方式相同,信息熵越大,越不容易被破解,则密码的强度越高。
这个熵值指的是信息熵,由香农引入到信息论中,又被称为香农熵,与热力学的熵无关。大学学习压缩算法时接触到了信息熵这个概念,熵值是不确定性的量度,即熵值越大,不确定性就越高。
在密码系统中,熵值计算公式为如下,其中K代表密钥空间大小。
H(K)=log2KH(K) = log_2^K H(K)=log2K
即密码所在密钥空间越大,熵值越高,密码的不确定性越大,越不易被破解。
参考文献:基于熵的密码强度估计
github上发现的一个项目:A Password Strength Calculator Based On Shannon Entropy
总结
- 上一篇: 现代电视原理期末复习
- 下一篇: 51单片机4位抢答器_倒计时可调仿真设计