谈谈网页产品该如何评估密码强度

4 评论 1539 浏览 11 收藏 10 分钟

编辑导语:在互联网时代下,各种网页和软件都需要设置密码,那么网页产品如何评估密码强度呢?本篇文章介绍了5种进行密码强度的评估方法,感兴趣的一起来看一下。

最近因为在做网页端产品中接触到密码强度设置问题,找了不少解决方案。发现大多基于google提出的以密码长度,英文大小写以及符号组合计分来进行密码强度评估。

什么是密码强度?

指一个密码对抗猜测或是暴力破解的有效程度。

一般来说,指一个未授权的访问者得到正确密码的平均尝试次数。

密码的强度和其长度、复杂度及不可预测度有关。

强密码可以降低安全漏洞的整体风险,但并不能降低采取其他安全措施的需要。

攻击者可以提交猜测到的密码的速率是衡量一个系统安全性的重要因素。

有的系统在多次尝试失败后会暂停登入一段时间,在没有其他安全缺陷时,这种系统可以用相对简单的密码保护。

但是系统必须以某种形式存储用户密码,而当这些数据被盗时,就有极大的危险(via.百度百科)。

根据NordPass 2020年的研究,五个最常见的密码是123456、123456789、picture1、密码和12345678。

我们先来看看破解这些密码需要多少时间。

经过搜集整理了以下5种进行密码强度评估方法,你可以根据产品的数据风控程度选择匹配版本投产使用。

一、简易版

1. 规则

  • 密码长度至少8位;
  • 密码含有数字&字母;
  • 密码含有符号;
  • 密码同时含有大小写字母。

2. 验证

  • 符合2项()以上允许账号注册;
  • 密码不符合规则进行针对性提示。

3. 示例

  • 1种组合→guofu→ 拒绝,提示原因;
  • 2种组合 → guofu1024→通过;
  • 3种组合→ guofu1024?→通过;
  • 4种组合→ Guofu1024?→ 通过。

二、常规版

1. 规则

2. 分数区间

  • x ≥90: 非常安全;
  • 90 > x≥80: 安全(Secure);
  • 80 > x≥70: 强(Strong);
  • 70 > x≥ 60: 一般(Average);
  • 60 > x≥25: 弱(Weak);
  • 25 > x≥0: 非常弱。

3. 验证

  • 允许得分为70分以上的密码进行账号注册;
  • 密码不符合规则进行针对性提示。

4. 示例

Guofu1024?→ 25+20+20+10+5=80分→安全。

三、专业版

1. 符号

  • Flat:均一的加/扣分比例;
  • Incr:出现次数越多,加/扣分比例越大;
  • Cond:根据增加的字元数调整加/扣分比例;
  • n:出现次数;
  • len:密码字串长度。

2. 规则

3. 计算方式

  • 最后的分数为加分条件和减分项目的条件;
  • 分数的范围为0~100分;
  • 分数不需达到最低字元即可计算。

4. 分数区间

  • 60 > x > 0:未达标准;
  • 70 > x ≥ 60:警告;
  • 80 > x ≥ 70:已达标准;
  • x ≥ 80:优秀(100为上限)。

5. 验证

允许得分为60分以上的密码进行账号注册。

6. 示例

  • Aa123 → 43分→未达标准;
  • Aa12L3→64分→警告。

四、HACK版

在彩虹表之前,已经出现了对哈希函数的破解算法,被称为“预计算的哈希链集”(Precomputed hash chains)。

谈谈网页产品该如何评估密码强度

密码彩虹表——示例有关防御彩虹表攻击,开发者在编码时请勿在密码散列函数中使用MD5或SHA1,在密码散列例程中使用密码盐来帮助应用程序“防虹”的编码。

另外,不在彩虹表中的密码强度较高。它是一个庞大的、针对各种可能的字母组合预先计算好的哈希值的集合。

不一定是针对MD5算法的,各种算法的都有,可以快速破解各类密码。在彩虹表中的密码给予提示。

比如,A12345 →此密码安全性低,请修改。

五、Fuzzy版

汪定教授团队对中国网民进行了密码习惯调查和比对先行密码强度模式后,提出了一种更为准确的评估模式。

谈谈网页产品该如何评估密码强度

Google 密码强度反馈选取了10个领域共50个流量排名靠前的网站,借助网站曾经泄露的密码数据库,先利用离线漫步攻击分析得到密码最常用的结构和使用频次的字典表。

测量核心公式:Nmin*log2Cmin,具体解释可参照论文解释。

作者提出从6个维度评估密码的强度,分别是:

  1. 长度要求密码不小于8位;
  2. 强制执行强制最小字符类型要求;
  3. 允许使用符号,带符号的密码通常比不带符号的密码安全得多;
  4. 使用常用弱密码的黑名单表(彩虹表),禁止使用;
  5. 禁用账户名或个人名;
  6. 向用户提供明确的密码建议和指导。

另外,中国用户喜欢把名字放在密码中,作者在破解过程中充分利用名字信息,对算法进行改进,用于度量密码强度测试。

彩虹表需要集成“中式密码”,比如,“woaini”、“5201314”、“zhangsan2022”和“longguofu123”之类的密码。

六、总结

在真实的世界,对于普通用户来说有没有办法可以设置真正意义上高强度的密码呢?

参照专家们给出的建议,你可以试试这样做。

1) 不要在密码中包含用户名、真实姓名、生日或公司名称,也不要包含任何与登录信息相关的信息。

例如,地址或电话号码。最好也不要包含任何可以在社交媒体上访问的信息,例如孩子或宠物的名字。

还有,比如在银行网站让你设置3个安全登录问题的时候,不要如实回答。

2) 研究发现45%的人使用8个字符或更少字符的密码。如果可能的话,密码的长度至少应为16个字符。

相较于在密码中加入非字母字符而言,增加长度可以更简单地使密码变强。

例如,12个字母的密码比12个数字的密码的破解难度仅大8倍。

但由16个仅字母字符组成的密码比由12个各类字符组成的密码的破解难度大800万倍。

3) 密码应包括字母、数字和字符的组合,不应包含任何连续的字母或数字,不应是“密码”一词或重复的相同字母或数字。

例如,guofu8888、mima777、password111。

4) 密码不应是在键盘上经常连续敲击的字符串。例如,asdfghjkl。

5) 密码不应与任何其他帐户共享。可以使用专业的密码管理器和定期修改密码(虽然很难),可以用密码强度工具帮忙生成密码。

密码的存在笔者一直认为是反人性的设计,但是它的存在对鉴权、保护隐私又有其必要性。

选择哪种密码强度取决于设计者对于“便捷”与“安全”的平衡对于金融级别的产品,毫无疑问需要高强度或多重验证。

而对于轻应用,更多可把方便为主要考虑

此外,笔者一直有种感觉,或者没有密码,使用生物生命特征才是更人性化的设计。

次之,用社交账号授权、手机动态验证码进行验证,对于安全性较低的产品也是不错的解决方案。

最后,没有一个密码是“最安全的”,如果有的话,把它写出来就会变得不安全,因为有成千上万的人会在他们的账户上使用它。

 

作者:龙国富,公众号:龙国富,分享用户研究、客户体验、服务科学等领域资讯,观点和个人见解。

本文由@龙国富 原创发布于人人都是产品经理,未经授权,禁止转载。

题图来Unsplash,基于CC0协议。

给作者打赏,鼓励TA抓紧创作!
更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 关注公众号“龙国富”, 🙋‍♂️进入客户体验交流群~ 来一起唠唠客户体验。

    来自广东 回复
  2. 太复杂了我自己记不住,比如说有的软件必须需要区分大小写,每次上去的时候都得重设一下

    来自河北 回复
  3. 原来是这样!终于明白了那些密码为啥非要这样那样设置!

    来自湖北 回复
  4. 补充一个经验:一个使用了互联网很多年也有很多账户的人表示自己的使用习惯如下
    1密码基本上是分级存在的 我一开始分了3级,后来发现自己只有两级,一个是重要账户密码(数字字母大小写特殊符号),另一种是普通的账户密码(数字字母),前者一般只放在“含有资金和支付方式的账户里面”,后者一般就是普通账户,并且经常复用(当然注意,提高密码的安全性行为是一个历史遗留问题,我们需要折中的假设,一般用户的密码就是数字+字母)
    2 有一些网站,为了平衡安全性和盗号等等问题,要求我使用特殊符号,而作为一个用户,我对这个网站的账户安全性评估并没有那么的高,那么我可能会随机的去使用特殊符号去后缀这个网站的密码,其结果就是,我需要每隔一段时间就通过手机验证码的方式去找回这个密码。(劳民伤财)
    3那么网站对用户的密码设计的时候,是否应该去要求用户,或者去教育用户使用一个比较复杂的密码?我觉的其实非财务类其实是多此一举,一些内容生产类的app,可以考虑当账户资产或者价值较高的时候提醒用户去更改密码或者提升用户安全等级。但其实这样做也会提高用户更改找回密码的次数(因为新密码往往在用户的常用密码体系之外)
    4 钥匙串和密码管理器这类软件其实普及度不高,而且有待商榷
    5 综上其实对用户体验来说,加快密码找回的力度和被盗号之后的善后工作似乎更加合理

    来自北京 回复