Guofu 的 第 37 篇 文章分享
2022年 第 12 篇
最近因为在做网页端产品中接触到密码强度设置问题,找了不少解决方案,发现大多基于google提出的以密码长度、英文大小写以及符号组合计分来进行密码强度评估。
什么是密码强度?
指一个密码对抗猜测或是暴力破解的有效程度。一般来说,指一个未授权的访问者得到正确密码的平均尝试次数。密码的强度和其长度、复杂度及不可预测度有关。强密码可以降低安全漏洞的整体风险,但并不能降低采取其他安全措施的需要。
攻击者可以提交猜测到的密码的速率是衡量一个系统安全性的重要因素。有的系统在多次尝试失败后会暂停登入一段时间,在没有其他安全缺陷时,这种系统可以用相对简单的密码保护。但是系统必须以某种形式存储用户密码,而当这些数据被盗时,就有极大的危险。
(via.百度百科)
根据NordPass 2020年的研究,五个最常见的密码是123456、123456789、picture1、密码和 12345678。我们先来看看破解这些密码需要多少时间。
密码 | 有多少人使用? | 破解需要多少时间? | 它被曝光多少次? |
123456 | 2,543,285 | 不到1秒 | 23,597,311 |
123456789 | 961,435 | 不到1秒 | 7,870,694 |
picture1 | 371,612 | 3小时 | 11,190 |
12345678 | 360,467 | 不到1秒 | 3,759,315 |
经过搜集整理了以下5种进行密码强度评估方法,你可以根据产品的数据风控程度选择匹配版本投产使用。
以下,Enjoy~。
目录:
1、简易版
2、常规版
3、专业版
4、HACK版
5、Fuzzy版
6、总结
1、简易版
1.1 规则
1)密码长度至少8位;
2)密码含有数字&字母;
3)密码含有符号;
4)密码同时含有大小写字母。
1.2 验证
1) 符合2项(含)以上允许账号注册。
2) 密码不符合规则进行针对性提示。
1.3 示例
1种组合 → guofu → 拒绝,提示原因
2种组合 → guofu1024 → 通过
3种组合 → guofu1024? → 通过
4种组合 → Guofu1024? → 通过
2、常规版
2.1 规则
类型 | 分值 |
长度 | +5分:小于等于4个字符 +10分:5到7字符 +25分:大于等于8个字 |
字母 | +0分:没有字母 +10分:全都是小/大写字母 +20分:大小写混合字 |
数字 | +0分:没有数字 +10分:1个数字 +20分:大于等于3个数 |
符号 | +0分:没有符号 +10分:1个符号 +25分:大于1个符 |
奖励 | +2分:同时含有字母和数字 +3分:同时含有字母、数字和符号 +5分:同时含有大小写字母、数字和符 |
2.2 分数区间
x ≥ 90: 非常安全
90 > x ≥ 80: 安全(Secure)
80 > x ≥ 70: 强(Strong)
70 > x ≥ 60: 一般(Average)
60 > x ≥ 25: 弱(Weak)
25 > x ≥ 0: 非常弱
2.3 验证
1) 允许得分为70分以上的密码进行账号注册。
2) 密码不符合规则进行针对性提示。
2.4 示例
Guofu1024? → 25+20+20+10+5=80分 → 安全
3、专业版
3.1 符号
Flat:均一的加/扣分比例
Incr:出现次数越多,加/扣分比例越大
Cond:根据增加的字元数调整加/扣分比例
n:出现次数
len:密码字串长度
3.2 规则
类型 | 分值 |
基本条件 | · 密码最低要求8字元 · 最少符合下列4项中3项规则:大写英文、小写英文、数字、符号 |
加分条件 | · 密码字数/Flat/+(n*4) · 大写英文字母/Cond或Incr/+((len-n)*2) · 小写英文字母/Cond或Incr/+((len-n)*2) · 数字/Cond/+(n*4) · 符号/Flat/+(n*6) · 密码中间穿插数字或符号/Flat/+(n*2) · 已达到密码最低要求项目/Flat/+(n*2) |
扣分条件 | · 只有英文/Flat/-n · 只有数字/Flat/-n · 重复(Case Insensitive)/Incr/-(n(n-1)) · 连续英文大写/Flat/-(n*2) · 连续英文小写/Flat/-(n*2) · 连续数字/Flat/-(n*2) · 连续字母超过三个(如abc, def)/Flat/-(n*3) · 连续数字超过三个(如123,234)/Flat/-(n*3) |
3.3 计算方式
· 增加字符的变化能提高分数。
· 最后的分数为加分条件和减分项目的条件。
· 分数的范围为0~100分。
· 分数不需达到最低字元即可计算。
3.4 分数区间
60 > x > 0:未达标准
70 > x ≥ 60:警告
80 > x ≥ 70:已达标准
x ≥ 80:优秀(100为上限)
3.5 验证
允许得分为60分以上的密码进行账号注册。
3.6 示例
Aa123 → 43分 → 未达标准
Aa12L3 → 64分 → 警告
4、HACK版
在彩虹表之前,已经出现了对哈希函数的破解算法,被称为“预计算的哈希链集”(Precomputed hash chains)。
密码彩虹表-示例
有关防御彩虹表攻击,开发者在编码时请勿在密码散列函数中使用MD5或SHA1,在密码散列例程中使用密码盐来帮助应用程序“防虹”的编码。
另外,不在彩虹表中的密码强度较高。它是一个庞大的、针对各种可能的字母组合预先计算好的哈希值的集合,不一定是针对MD5算法的,各种算法的都有,可以快速破解各类密码。
在彩虹表中的密码给予提示,比如,A12345 → 此密码安全性低,请修改。
5、Fuzzy版
汪定教授团队对中国网民进行了密码习惯调查和比对先行密码强度模式后,提出了一种更为准确的评估模式。(后台回复fuzzyPSM可获取论文原文)
Google 密码强度反馈
选取了10个领域共50个流量排名靠前的网站,借助网站曾经泄露的密码数据库,先利用离线漫步攻击分析得到密码最常用的结构和使用频次的字典表。测量核心公式:Nmin*log2Cmin,具体解释可参照论文解释。
作者提出从6个维度评估密码的强度,分别是:
1) 长度要求密码不小于8位。
2) 强制执行强制最小字符类型要求。
3) 允许使用符号,带符号的密码通常比不带符号的密码安全得多。
4) 使用常用弱密码的黑名单表(彩虹表),禁止使用。
5) 禁用账户名或个人名。
6) 向用户提供明确的密码建议和指导。
另外,中国用户喜欢把名字放在密码中,作者在破解过程中充分利用名字信息,对算法进行改进,用于度量密码强度测试。
彩虹表需要集成“中式密码”,比如,“woaini”、“5201314”、“zhangsan2022”和“longguofu123”之类的密码。
6、总结
在真实的世界,对于普通用户来说有没有办法可以设置真正意义上高强度的密码呢?参照专家们给出的建议,你可以试试这样做。
1) 不要在密码中包含用户名、真实姓名、生日或公司名称,也不要包含任何与登录信息相关的信息,例如,地址或电话号码。最好也不要包含任何可以在社交媒体上访问的信息,例如孩子或宠物的名字。
还有,比如在银行网站让你设置3个安全登录问题的时候,不要如实回答。
2) 研究发现45%的人使用8个字符或更少字符的密码。如果可能的话,密码的长度至少应为16个字符。相较于在密码中加入非字母字符而言,增加长度可以更简单地使密码变强。
例如,12个字母的密码比12个数字的密码的破解难度仅大8倍。但由16个仅字母字符组成的密码比由12个各类字符组成的密码的破解难度大800万倍。
3) 密码应包括字母、数字和字符的组合,不应包含任何连续的字母或数字,不应是“密码”一词或重复的相同字母或数字。例如,guofu8888、mima777、password111。
4) 密码不应是在键盘上经常连续敲击的字符串。例如,asdfghjkl。
5) 密码不应与任何其他帐户共享。可以使用专业的密码管理器和定期修改密码(虽然很难),可以用密码强度工具帮忙生成密码。
密码的存在笔者一直认为是反人性的设计,但是它的存在对鉴权、保护隐私又有其必要性。选择哪种密码强度取决于设计者对于“便捷”与“安全”的平衡,对于金融级别的产品,毫无疑问需要高强度或多重验证。而对于轻应用,更多可把方便为主要考虑。
此外,笔者一直有种感觉,或者没有密码,使用生物生命特征才是更人性化的设计。次之,用社交账号授权、手机动态验证码进行验证,对于安全性较低的产品也是不错的解决方案。
最后,没有一个密码是“最安全的”,如果有的话,把它写出来就会变得不安全,因为有成千上万的人会在他们的账户上使用它。
推荐阅读:
资源下载:(公众号回复口令)
NPS 👉🏻 NPS(净推荐值)资料包
KANO 👉🏻 KANO(需求优先级)分析资料包
IPA 👉🏻 IPA(用户需求与期待)分析资料包
统计 👉🏻 统计分析工具安装包