密码强度计算策略

文章目录

  • 密码强度计算策略
    • 1 基于密码组合
    • 2 基于被破解时间
    • 3 基于信息熵

密码强度计算策略

大学上课时,老师就提到千万不要小看登录、注册模块,设计起来也是会很复杂的。那时候编程刚入门没体会,心想登录、注册不就几个input,提交两个表单就完事了嘛。哈哈哈,现在想起来真是年轻!后来慢慢知道了表单校验、图形验证码、邮箱验证等等。

今天这个问题,同样来自于看似简单的注册模块,在注册账号设置密码时,根据输入的密码显示其安全系数。那么是怎么计算密码强度?就来一起探索下这个规则大致都是这么设计的吧!
密码强度计算策略_第1张图片
(这是一个图片!)
首先说明,密码的强度越高,代表的是越不容易被猜测攻击给破解,而不能防止恶意程序或按键记录器窃取。

1 基于密码组合

组合规则很简单也最常见,即要求密码中至少包含4类字符中的3类,即:

  • 大写字符[A-Z]
  • 小写字符[a-z]
  • 数字[0-9]
  • 特殊字符:~!@#$%^&*_-+=`|(){}[]:;"’<>,.?/

由于之前做过一题oj,所以设计的时候最开始就想到了这个方法。题目是:牛客网——密码强度等级(这个题目好像是来自于华为OJ,如果链接挂了可以直接百度题目)。

这种方式的优点就是较为简单,代码复杂度低,可以很容易的自定义得分计算规则,并且规则可以设置加分项和减分项。

但缺点也非常明显,一是会降低用户体验,用户输入的密码不能太简单也不能太复杂,太简单通不过规则,太过复杂难以记忆。如下图lastpass(在线密码管理器)注册界面中主密码输入框:
密码强度计算策略_第2张图片
二是随着计算机运算能力的成倍提高,通过复杂的组合规则防止破解的作用也越来越小,且规则只会变得越来越复杂。

2 基于被破解时间

日常中我们见到的几乎都是基于复杂规则进行计算密码强度,且已习惯这种方式,甚至认为只要密码足够复杂,就足够安全。但我们反过来想,要保证密码安全,最主要是保证密码不被破解不就行了!

zxcvbn便是基于密码被破解时间计算密码强度,名字的来源其实就是字母键区最底层从左至右5个字母。zxcvbn是github上拥有10k star的开源项目,使用方便,且几乎支持所有开发语言(github地址)。

官方的介绍说得非常明白,这里就不一一翻译原文了。大概意思是,zxcvbn通过结合模式匹配(即字典,字典包含有常用密码、常用英文词汇等)和估计被破解时间这两种方式,来计算得到密码强度。开发它的目的就是用来替代密码组合规则的,相比之下zxcvbn更安全、灵活和好用。

在下一篇文章里,我将详细介绍zxcvbn的具体使用。

3 基于信息熵

信息熵的思路与第二种方式相同,信息熵越大,越不容易被破解,则密码的强度越高。

这个熵值指的是信息熵,由香农引入到信息论中,又被称为香农熵,与热力学的熵无关。大学学习压缩算法时接触到了信息熵这个概念,熵值是不确定性的量度,即熵值越大,不确定性就越高。

在密码系统中,熵值计算公式为如下,其中K代表密钥空间大小。
H ( K ) = l o g 2 K H(K) = log_2^K H(K)=log2K
即密码所在密钥空间越大,熵值越高,密码的不确定性越大,越不易被破解。
密码强度计算策略_第3张图片
参考文献:基于熵的密码强度估计

github上发现的一个项目:A Password Strength Calculator Based On Shannon Entropy

你可能感兴趣的:(Web安全)