我日常使用的一款APP在打开登录时经常会提醒我的密码已经超过180天未修改,为了更好的安全性之类的原因,每次都会弹出一个页面让我选择是否需要修复密码,虽然这个选择可以跳过,但是我对这样更改密码的要求总是非常反感的。
我很早之前就发现过一个社会学现象,大多数网站和终端app在注册时都要求设置一个复杂的密码,还贴心的将密码复杂度显示出来,要求密码必须包含大小写字母数字符号等。但他们忽略了一个事实,那就是用户根本无法记住如此复杂的密码。为了方便下次登录,用户可能会将密码设为记住模式或将密码的副本保存到记事本文本中,这反而增加了密码泄露的风险。由于无法记住密码,可能下次登录不得已选择忘记密码流程来重置密码,但是这个重置密码的流程本身也是密码泄露的一个突破口。
这是信息安全领域经典的密码策略悖论,严苛的静态密码复杂度规则,在不配套基础设施的前提下,提升了理论安全上限,却显著推高人为侧泄露风险,整体安全收益经常为负。
一、强制复杂密码引出的用户行为
当人脑记忆负荷超过阈值,普通用户只有几种应对手段,全部引入新漏洞:
1.浏览器、APP自动保存密码
设备一旦被入侵、失窃,所有保存的密码批量失窃;
浏览器密码数据库如果未强加密,或系统账号被突破,直接拖走全部凭据;
很多人没有设备锁屏密码,电脑 / 手机随手放,攻击者不需要破解网站,直接窃取本地密码库。
2.明文密码记录到记事本
无加密明文存储,一旦文件被同步到云盘、电脑被入侵、文件意外分享,密码直接裸奔。远不如一个好记但熵适中的密码。
3.复杂密码+微小改动
强制复杂密码的本意是阻止简单的密码,但是当用户输入一串数字后才发现密码太弱,用户最常见的做法是在数字前后将几个字母或符号,结果就是倒逼用户发明“伪复杂密码”。看似满足了平台的要求,但它事实的有效熵大打折扣。一旦其中一个网站的密码泄露,攻击者通过模式推导就能撞库其它平台的账号。
二、经常重置密码引入的额外攻击面
重置密码本身不会泄露你的密码,但重置通道是一个独立的攻击入口。许多人将密码重置的验证通道选择手机短信或邮箱,每次重置密码后都会遗留历史消息在短信或邮箱中,一旦邮箱被盗,所有关联的平台都会面临风险。短信验证码也存在嗅探攻击、验证码拦截、SIM卡盗窃的攻击风险。
频繁重置导致用户对“重置流程”麻木,更容易点击钓鱼邮件中伪造的“重置链接”。当用户习惯了隔三差五收重置邮件,就不会对异常的重置请求产生警惕。
三、复杂密码本身是安全的
复杂密码本身没有错,但仅仅依靠单一的复杂密码就是一种策略错误。人类生物的记忆存在硬件上限,普通人可靠记忆的高熵密码数量可能只有3个左右。平台一刀切强制要求密码的复杂度,完全不考虑人类的认知极限,属于典型的纸面安全。
现行的国际身份认证标准也要求:
1.废除强制定期更换密码;
2.不强制要求必须混合大小写、数字、符号;
3.禁止常见密码;
4.有限考虑多因素认证MFA。
四、密码管理器
由于用户苦于平台对密码复杂度的要求,大量的用户也开始使用密码管理器来管理各种平台的账号密码,比如常见的Apple密码、Microsoft 密码管理器、1Password等。
密码管理器的本质就是行业内也承认的一个事实:人类无法记忆大量高熵密码。
平台单方面强制要求复杂密码,不如让应用更好的兼容密码管理器来的好。
五、一个很现实的问题
以上说的这些问题,或许平台运营方是知道的,但是它这样选择的原因就是为了规避自身责任。在设置了复杂度密码规则后如果遭遇密码泄露,平台方就可以对外宣称:”我们已经要求用户使用高强度密码“,满足合规要求。
规则只在乎平台合规,不考虑用户真实行为,最终造成安全失效。
六、如何加固账号安全性
无论是平台的建设者还是终端普通用户,都应该达成一套共识:
1.不强制要求”伪复杂“密码;
2.设置密码长度底线并过滤常见的弱密码;
3.开启多因素认证,尤其是高价值账号;
4.密码管理器兼容;
5.在没有已知密码泄露的情况下不要强制定期修改密码;
七、你是否需要一个复杂的密码
为了让你直观了解到一个密码有多复杂,这里引入密钥信息熵的概念。它是衡量密码不确定性的一个指标,是评估密码强度的核心标准。一个10位的数字密码信息熵为33bit。大多数人的密码可能就是一个不超过14位的字母+数字组合的密码,其信息熵只有约83bit。
但这远远达不到密码学公认的安全底线128bit。这还是考虑随机均匀的情况下得到的数据,如果密码中存在模式行为则密码的有效熵还会更低。
高熵密码如果逼迫人脑记忆则几乎必然产生旁路泄露,纸面熵再高也没有意义。安全永远是一个体系,不能只盯着一个密码的复杂度。攻击者永远会选择整个体系链条中最薄弱的环节,而这个最弱的环节可能不是密码的强弱,而是人的行为。