常换口令就安全?未必!
5月份第一个星期四是“世界口令日”,本应是提醒人们重新审视自己口令策略的日子,却被某些公司当成了公关机会,社交媒体上满是糟糕的建议。
今年的“糟糕口令建议”奖花落无线通信行业游说机构CTIA(美国无线通信与互联网协会)。该协会甚至为此专门设立了一个网页,在口令日当天上午各种发推宣传。
它在推文写道:“今天是世界#口令日!提醒你pin码/口令要常换常新哦。”然而,正如很多人立马指出的,这条建议根本臭不可闻。
不过,认真想想:这不是正确的建议吗?难道不是几乎所有系统管理员都不得不修改系统让人们每隔几个月就重置口令以更好地保证安全吗?
没错,但那都是2014年时的老黄历了。自2015年末开始,世界几大政府部门,从英国间谍机构GCHQ(政府通信总部)到美国标准设立机构国家标准与技术局(NIST),再到消费者机构联邦贸易委员会(FTC),都强烈建议不要频繁更换口令。
话虽如此,数十亿的用户名和口令泄露基本上定义了刚刚过去的这几年,从电子邮件提供商到信用征询机构、家装商店、零售店,甚至政府部门,都没能逃过用户名/口令泄露的魔爪。
既然是这样,难道不是更应该让人们定期更换口令吗?不好说。可以说是,也可以说不是。
说是,是因为这些信息总会过时,迅速变得无关紧要。说不是,是因为频繁重置伤精费神,容易让人们倾向于采用更简单的口令,并不能真正给使用暴力破解的黑客增加任何难度。
不过,即便2019年随着黑客攻击模式的改变而每个人都建议定期修改口令,即便到了2021年人们又严厉谴责那些提出了2018年建议的组织,我们都无需大惊小怪。
从来都不缺组织机构和个人上赶着告诉你你应该怎样操作口令:NCSC、CESG、NIST、FTC、谷歌、微软、Mozilla、斯诺登……
但那又怎样?他们都说是时候审视口令的不同方面了,但给出的建议又经常相互冲突。最后拿出的所谓最佳口令建议我们往往能在此后两年一遍又一遍地拎出来开嘲讽。
随机口令还是可读口令?
是个人都知道口令直接设成“password”就跟银行卡密码设成“123456”一样蠢。但还是有众多用户这么干,以致大多数登录门户设计者不得不直接设了硬编码的“愚蠢口令禁用”门槛。
但是,然后呢?“password1”又能好上多少?足够好了吗?替换几个字符,弄成“p@ssw0rd”这样的行不行?显然,客观讲,后者看起来是比前者强上一些。但问题是比这好得多的办法不是没有啊。不过,这些好办法基本落入两种选择:随机口令,或是可读口令。
最好的随机口令是真正随机的,不是什么转头就忘的奇怪拼写,而是压根儿永远记不住的字母、数字和符号的组合,比如“4&bqJv8dZrXgp”。
这种口令之所以更好,是因为要产生并使用它,你得用个口令管理器。口令管理器是个好东西,我们稍后再讨论。
但是还有个问题:如果有人想要破解你的随机口令,他们很可能会用自动化软件对一个系统狂轰滥炸成千上万个可能口令组合,直到最后命中正确的哪一个。
这种情况下,再怎么随机都没用,口令的长度决定一切。计算机无所谓你用哪种语言的字符当口令,但口令长度越长,所需猜解次数越多,而且是指数级增多。
经过20年的不懈努力,我们终于教会大家使用人类很难记住,但计算机很容易猜解的口令了。
当然,以上假设中很大一部分落在大家都会在口令中引入数字、符号和大写字母上。如果不引入这些东西,口令破解软件就只需尝试小写字母,破解时间会大幅缩短。
因为长度是关键,也因为输入随机字母和数字太考验人的耐性,有很多组织和个人就认为口令应由用户能实际记住的几个随机单词构成,比如“correct horse battery staple”。
这么做有点好处,谷歌已经推行好几年了。于是,哪种选择更好呢?随机口令?可读口令?
答案是:都好,也都不好。如果你想记住口令并亲自敲入,那可读单词组合更好。但如果太多人都不在口令中用到数字和符号,口令的强度会受到影响。
而且,很多组织机构严格的口令策略也要求用户注册时必须在口令中含有大写字母、数字和符号。这种情况下,可读单词组合式口令事实上并不可行。
总体看来,随机口令相比之下有效得多。因为随机口令通常会迫使用户转向另一种完全不同的口令使用方式——不同用户使用不同口令。这样就能规避掉使用相同口令的其他账户被黑的风险了。而且,如果用户已经启用反正都记不住的随机口令,那就不妨再长一点咯!
结论:如果想记住口令,用可读式的;否则,用随机的。但一定要确保口令长度不太短,至少要超过10位吧。
随之而来的另一个问题:
口令管理器还是大脑?
推荐使用口令管理器的理由简直不要太多。首先,如果你能养成每次登录都用口令管理器的习惯,那你基本上就是在提升自己的整体安全状况了——因为每次登录都不一样了。
另外,既然都已经用软件保存&粘贴口令了,为什么不增加点口令长度呢?随机+够长,真的是护住在线安全的好办法,也是仅凭用户名/口令访问机密信息的不安全系统中用户所能获得的最佳安全方式了。
不过,缺点也不是没有。源远流长的人脑还是会有些独特的优势的。
最大的优势当然就是存在人脑里的口令不会被黑,而存在某个数据库中的口令是有可能被黑的。口令管理器虽然很棒,但它们依然只是个软件,并不能免疫安全漏洞这种东西。
口令管理器提供商自然会加倍努力地保护自身产品安全。但商业需求会导致解决方案安全性作出妥协。比如说,最好口令管理器之一的1Password,就将其账户迁移到了“在线保险柜”中,用户的所有口令都存在线上,通过手机/计算机访问,而不是直接存在用户设备本地。
这么做有几个好处。比如,用户无需再在各设备间同步以确保所有东西都是最新的。公司角度来看,这么做也大大方便了按月计费而不是一锤子买卖。
然而不幸的是,这种方法也让口令管理器提供商成为了全球黑客的众矢之的:只要能破解这一个系统,它托管的所有口令就尽在我手。另外,别忘了,各国政府总有办法强迫这些公司交出这些本应保密的信息,有时候还附带禁言令,拿了你的口令你都不知道。
可用性也是个问题:每次想登录个网站都要打开个App或运行个软件也是件蛮痛苦的事。
相反,记在脑子里倒是可以随时随地毫无障碍地取用,还不用付费,可算作是不上锁还黑不着的数据库了吧。
结论:使用并惯于使用口令管理器吧。除非你要保护的东西真的极端机密。但如果真的是极端机密的东西,那你就不应该只通过用户名/口令的方式访问之。
经常修改口令?
如前文讨论过的,经常修改和根本不改都有各自的理由。
经常修改意味着旧口令毫无用处。至少理论上毫无用处。但实际上,很多研究人员都发现,因为我们是人不是机器,这种方法带来了其他一系列问题。
举个例子,如果不得不经常修改自己的口令,人们就倾向于使用更短更不安全的口令。人们会弱化对口令本身固有安全性的重视程度,因为很快又会换掉了嘛。这明显不合逻辑,但老实说,也并非全无道理,毕竟我们大多数人并不真的觉得自己会被黑。
经常修改口令还会吞掉大量的资源:各种系统需要频繁更新,人们老是被催着去该口令。而且,“新”口令没那么容易记住,也就导致不断的重置和不停麻烦技术部那些本就不堪重负的技术支持人员。
改还是不改?多久改一次?那就是个平衡问题:定期修改口令的好处超出了其不利因素吗?大多数情况下,并不。
在有充分理由怀疑已经被黑客盯上的情况下,修改口令是有意义的。但那时处于这种情况下的人们应该已经强烈注意到了运营安全的需求,其中就包括使用会定期修改的复杂长口令。每隔几个月就从IT部门调几个人过来告诉他们那些本就已经在做的事毫无必要,也很烦人。
于是,我们真正讨论的是那些身处高位却对安全毫无概念的人:基本上,就是那些首席级高管和政客了。对他们而言,让手下人去做就对了。
最常见的强制修改口令的情况最容易发生在被黑过的公司身上,比如推特,被黑后让每个用户都改了口令。但在企业层面上,还是别费力不讨好了,强制定期更换口令不适合作为一项策略规定。
结论:虽然很有吸引力,但别强制定期更改口令。
双因子身份验证?
双因子身份验证最棒的一点,是多了层额外的安全保护——以正确用户名/口令登录后还短信一条临时验证码之类的。
也就是说,除了掌握你的用户名/口令,还必须持有(或能访问)你的手机,才可以登录你的账户。这大概是当前正常预算范围内普通用户能获得的合理安全和抵御远程访问最有效的方式了。
双因子方法没有物理安全或生物特征扫描器那么好,但也足够好了。基本可以确信试图访问某系统的人就是其所声称的那个人。
当然,无论是对系统管理员还是对用户而言,双因子身份验证也有可能带来痛苦的体验。每次访问系统都会带来额外的费用和繁琐手续,还有时间延迟。但如果是个重要系统,不用权衡,直接上双因子吧。
自己的银行账户需不需要双因子身份验证?当然需要!那可都是血汗钱。那么,Facebook或者亚马逊账户呢?嗯,可能需要吧。于是,在线安全的另一大问题浮现——超越口令和用户本身。
结论:重要登录(社交媒体、电子商务、银行业务)上用双因子身份验证。自己运营的每个重要系统上都提供双因子身份验证选项。就这么做吧,虽然会麻烦一点,但黑客也同样觉得双因子身份验证很麻烦啊。
更健壮的系统
虽然每个人都会担心用户及其口令问题,随时在变还会相互冲突的各种建议就是这种担心的明证,但事实上,口令问题没有所谓的正确答案。
任何仅依赖用户名/口令访问的系统基本上都是在“欢迎入侵”。真正的安全工作,真正应该重视的地方,是口令现象背后的东西。
暴力破解只适用于容忍数千次登录尝试的系统。虽然X次错误尝试之后锁定账户会让用户沮丧乃至暴躁,但这确实是遏制暴力破解攻击的超有效方法。
同样的,引入双因子身份验证系统或许有点麻烦,但它也能大幅增强安全。设置入侵检测系统并安排专人管理,是比试图改变每个用户的行为更有效的资源和时间利用方式。NIST其实在这方面有挺多好建议。
引入具体的口令策略是把双刃剑。强制用户使用超过8位的口令,还至少要包含1个大写字母、1个数字,有助于改善安全状况。
但这种做法完全无视了用户再三设置口令都不被通过的挫败感。更别说还有些让人抓狂的小决定:可以用“#”不能用“%”,可以用冒号不能用分号等等。
准备好应付大量口令重置请求和令人生无可恋的技术支持要求电话吧,同时千万记住别犯蠢用明文发送口令。
理想世界中会有一套标准供不同系统沟通可接受的口令类型,口令管理器能自动配置新口令,而整个过程只需用户点击一下按钮即可完成。
当然,这就是Facebook和谷歌的做法,他们利用自身庞大的既有用户群让公司企业可以更容易地让用户安全登录公司系统,虽然同时也雁过拔毛地刮取信息转手变卖……
“用Facebook登录”按钮的吸引力是巨大的,但真的用Facebook登录的IT专业人士最好去面壁忏悔一下。
然后,还有个更残酷的真相:如果每个人都用同一个系统,那大家就都不安全了。安全出自多样性。
总结
综上,更有水平的口令使用指南如下:
- 使用口令管理器和长口令。
- 尽量启用双因子身份验证,别抱怨那额外的一步。
- 脑子里常备2套口令:用在不甚重要但不创建账户就登录不了的网站上的一两个随时可以抛弃的简单口令;还有就是可以记住且永远不会告诉别人的一两个重要的长口令(四五个对你自身有意义的随机单词就挺好)。后者用于银行账户和类似的重要系统。如果用户不幸遭遇灾祸提前到阎王面前报到,想要访问这些账户的人就必须发函并亲自前来验明与用户的合法关系才行。
- 使用2个浏览器:一个用来登录Facebook、谷歌之类的,另一个用来访问其他的。别让这些疯狂吞噬数据的大家伙侵入你的日常在线生活。
- 最后,别浪费时间试图教导别人应该怎样管理口令。这么做对你没有任何好处,你不是在浪费时间做无用功,就是把你自己放到了别人IT支持员工的位置上——相信我,IT支持不是什么愉快的经历。
有疑问?想想斯诺登会怎么做就好了啊!