龙空技术网

如何创建高强度密码并强化帐户安全性

人人都是产品经理 314

前言:

现时姐妹们对“java验证密码强度的正则表达式”大概比较重视,我们都想要了解一些“java验证密码强度的正则表达式”的相关资讯。那么小编在网摘上搜集了一些有关“java验证密码强度的正则表达式””的相关文章,希望兄弟们能喜欢,朋友们快快来了解一下吧!

当我们在创建或更改密码时,一般需要满足复杂性要求。但是随机密码难以记忆,因此大多数人都使用类似的、可预测的方式创建密码,这使得攻击者更容易破解密码。那么,如何创建高强度密码,并强化账户安全性呢?本文作者对此进行了分析,一起来看一下吧。

通常当我们在创建或更改密码时,密码必须满足密码复杂性要求。例如密码需要包含大小写字母、数字和符号。

如下表所示,假定密码长度8位,使用更大的字符集的确能够产生出更多种组合,理论上攻击者必须尝试所有可能的组合才能破解密码。

然而,人为创建的密码并不是随机的,因为随机密码难以记忆。米勒对短期记忆能力进行了定量研究,年轻人的记忆广度大约为7个数字、6个字母、5个单词。密码复杂性要求使记忆变得更加困难,其迫使大多数人使用类似的、可预测的方式创建密码,反而导致密码有规可循。主要有以下几种方式:

首位是大写字母,末位是数字或符号。常见的单词使用数字或符号的仅外观类似替换,例如使用“$”替换”s”,“@”替换“a”,数字“0”、“5”、“1”替换英文字母“o”、“s”、“i”等。常见的单词或短语末尾附加数字。

掌握这些规律攻击者更容易破解密码。攻击者不一定会逐一尝试所有可能的组合,而是选择一种更合乎逻辑的方式,从更可能的组合开始尝试。攻击者通过最常见的替换来运行字典攻击,例如,如果单词“password”在字典列表中,攻击者可以尝试使用“P@ssw0rd”、“P@55word”或“P@55w0rd”等变体来破解密码。除了这些常见的替换之外,攻击者还可能尝试使用常见的单词或短语,在末尾附加数字。字典攻击很大程度上缩小了密码组合的范围,缩短了破解的时间。

即使密码是随机生成的,以目前的技术,运行在专用硬件(例如高端GPU集群)上的高度优化的密码破解软件可以每秒测试数十亿个密码组合,攻击者使用如此强大的密码破解软件,破解密码可能也只需要几分钟到几小时。另一方面,用户难以记住随机生成的密码,可能会以不安全的方式存储他们的密码,例如写在一张便条纸上,放在计算机附近。

总体而言,从安全和好记的角度来看,密码复杂性要求弊大于利。

在密码中使用混合字符类型的建议最初是Bill Burr于2003年在美国国家标准技术研究所(NIST)工作时撰写的一份文件《NIST SP800-63》中提出的,2017年他在接受华尔街日报采访时公开道歉,称当时他并没有得到可靠的数据作严谨研究,只依靠来自八十年代、不合时宜的旧文件作为参考,而他的建议也没有考虑到一般人的生活习惯及思考模式。

2017年6月,NIST发布了新版《NIST SP800-63》,其中包含对其密码建议的更新,不再强调在密码中使用混合字符类型,而是鼓励用户在合理范围内使用更长的密码或密码短语作为增强安全性的更有效方法。

创建一个长且易于记忆的密码可能具有挑战性,以下一些方法可以提供帮助:

使用密码短语:不要使用单个单词,而是使用由几个不相关单词组合而成的密码短语,这样可以更容易记住密码,同时也增加了密码的长度和复杂性。例如,你可以使用“correct horse battery staple”之类的短语。(实例已经公开,所以已经不具备安全性,只作为说明例子)。使用助记符:你可以使用句子或歌曲歌词中每个单词的首字母来创建密码。使用来自可信来源且受信任的密码管理器创建并存储密码。

以下是创建密码时需要避免的一些额外事项:

避免使用你的姓名、生日或地址等个人信息,因为这些信息可以在网上找到,身边熟悉的人知道也个人信息也容易猜到密码。避免使用常见的单词或短语,因为使用基于字典的攻击很容易猜到这些单词或短语。避免使用连续或重复的字符,因为这些很容易被攻击者猜到。避免使用短密码,因为它们很容易被暴力破解。避免为多个帐户使用相同的密码,因为如果一个密码被泄露,攻击者更容易访问你的所有帐户。避免使用常见的字母替换,例如使用“0”替换“o”或使用“@”替换“a”,因为这些都是众所周知的并且很容易被攻击者猜到。

如何记住密码?

建议使用来自可信来源且受信任的密码管理器存储密码,你只需记住一个主密码即可访问所有已保存的密码。这降低了使用弱密码、重复使用密码或忘记复杂密码的风险。此外,许多密码管理器可以自动填写平台上的登录信息,这可以节省时间并降低手动输入密码时出现拼写错误或其他错误的风险。

作为身份验证者,在处理密码创建和更改请求时,以下一些方法可以提供帮助:

确保密码满足最小长度要求。建议密码的最小长度为12个字符。将用户创建的密码与包含已知常用或泄露的密码列表进行比较,以确保用户没有使用容易猜到或泄露的密码。向用户反馈密码被拒绝的明确原因,并提供创建更强密码的建议。

不要仅依赖密码。

即使是最强的密码也可能被泄露,减轻这种风险的一种方法是使用双因素身份验证(2FA)。2FA通过要求用户提供两种类型的身份验证因素来访问其帐户,从而为身份验证过程增加了额外的安全层。一些常见的2FA类型包括短信验证码、身份验证器应用程序、硬件令牌和生物识别身份验证。

感谢阅读,以上就是本次分享的全部内容,希望你能从这篇文章中有所收获,记得点赞/收藏/分享/关注,后续将会持续更新。

本文由@张楚 原创发布于人人都是产品经理,未经许可,禁止转载。

题图来自 Unsplash,基于 CC0 协议。

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。

标签: #java验证密码强度的正则表达式