信息时代的安全防护(一)——密码安全

Safety concept: Opened Padlock on digital background

前言

不知不觉中,21世纪已经过去了18年。千禧年出生的孩子,这时候也已经或即将成年。在这时间的滚滚长河之中,形形色色的数码产品逐步融入人们的日常生活,而我们绝大部分人都已不知不觉中迈入了信息时代。从你用的智能手机,到家庭控制系统,到网上银行及购物,到城市基础设施,整个人类社会的活动和内容都在逐步数字化,虚拟化。在信息化之前的时代,个人隐私和安全有近乎天然的防护——盗取你的财产,小偷首先得知道你住在哪里,然后亲自上门撬锁。只要装上比较好的防盗门,小偷自然进不了家中。但信息时代的到来,使我们的个人隐私和安全防护发生了根本性的变化。我们的信息存储在我们几乎无法控制的地方,而要盗取这些信息,黑客并不需要知道我们住在哪里,甚至不需要知道我们是谁。

这篇文章将探讨信息时代安全防护的一个重要组成部分——密码安全。5年多前我曾写过一篇类似的文章,《网络安全的基石 – 密码安全》。本文可以看作是这篇文章的延伸,亦可以看作一个更大主题的一部分。这个系列的文章不会罗列技术细节,而是从宏观角度探讨我们作为普通用户应该采取的安全措施。

什么是密码

在谈密码安全之前,我们先来谈谈密码。在很多人看来,密码就是我们用来登陆网站或在银行取钱时需要提供的一些私密信息。它可以是几位数字,也可以是一串字符,但只有我们才知道这些数字或字符。这是对密码最朴素的定义。事实上,人们使用密码已经有几千年的历史。早在古代,不论东方还是西方,人们都会利用暗号和口令来认证身份。比如最著名的那句“天王盖地虎,宝塔镇河妖”,其实就是一种最简单形式的密码。密码的英文password直译过来也是“用来通行的话语”。

但究其根本,密码是你在一次认证过程中证明你身份的工具。这种工具的形式是一串字符或数字,使用方法是将其告诉对方,让对方在其记忆里进行匹配,以验证它是属于你的。

密码有什么问题

在我们这些普通用户看来,密码是我们知道的东西,它应该仅存在于我们的记忆中,只有在认证的时候,我们才会将其告诉需要知道的人。不幸的是,这个假设在数码时代是行不通的。有两点关键原因。

第一,我们忽略了一个重要的事实——那些认证我们的人,也同时知道了我们的密码。在古代我们也许可以信任关口的士兵能守口如瓶,但在信息时代,一个网站不可能仅仅把用户的密码留在记忆里,它必然存储在一个地方。不管这个地方多么隐蔽,多么安全,我们的密码仍然被保存了下来,成为了网站拥有的东西。知道拥有是两个完全不同的概念。知道的东西只要你不想说,别人是无法知道的。而拥有的东西,别人是有可能复制或拿走的。

最近几年,针对网站数据库的攻击越来越频繁。2016年5月,LinkedIn的1.64亿账户密码泄露,而随后发现这些密码已泄露长达四年时间。2016年,美国知名社交网站MySpace的3.6亿账户密码泄露,而这些数据已泄露长达8年时间。2015年,网易的2.3亿账户密码泄露。2011年,天涯论坛两千万账户密码泄露。2012年,有爆料称淘宝网两千多万账户密码泄露,因为信息不透明,至今仍然没有验证这条消息。根据 https://haveibeenpwned.com/ 网站的数据,至今为止已经有284个网站被黑客攻破,超过50亿账户密码泄露,而这仅仅是已经公开的数据。每时每刻,我们每天所用的这些网站都在经历大大小小的黑客攻击,它们存储的密码,即便经过了特殊处理,仍然有很大可能被盗取和破解。

第二,人的记忆是有限的,我们知道的越多,忘记的可能性越大。古时候的人没有这么多地方需要认证,所以只用记住极少几个口令就够了。但信息时代,我们所接触的网站数量大大增加了,需要记忆的密码也越来越多。为解决这个问题,人们通常倾向于给不同的网站设置同样的密码,或用一个简单的方法推导密码,以便记忆。对于前一种方法,只要黑客攻破你所用的一个网站,就能登陆所有你使用的网站。对于后一种,虽然不同网站的密码不同,但对于有心人,只要知道一组密码,就不难推导出其他网站的密码。

这两点结合起来,才造成了今天的密码困局。一方面,我们为应付各种网站的密码要求焦头烂额,另一方面,我们的密码不断被黑客攻破,火烧连营。这两点问题存在的根本原因在于我们对密码的认识已经过时。密码不能是我们知道的东西,而应该成为我们拥有的东西。

如何“拥有”密码

针对密码容易忘记和被盗的特点,我们不妨换一个角度看待这个拥有几千年历史的东西。如果我们很难记住这么多密码,不如彻底忘记它们,把它们变成你拥有的东西。简而言之,把密码写下来,存在某个地方,需要的时候再取出来,输入到密码框中去。一旦摆脱了记忆的束缚,我们便可以给每一个网站设置一个毫不相关、完全随机、很难暴力破解的密码。这个密码可以是20位以上,拥有数字、大小写、特殊符号等所有元素,毫无逻辑。这样一旦黑客攻破了其中一个账户,也完全无法知道你其他账户的密码,如果网站给储存的密码做了处理,黑客甚至不能暴力破解出你的明文密码。

从普通人的角度看,把密码写下来,记在一个地方,似乎是愚蠢的做法。就像我刚才说的,拥有的东西,别人是有可能复制或拿走的。但现代加密技术的发展,使得别人拿走的东西变成乱码,毫无用处。

加密技术的发展是一部安全人员与黑客斗智斗勇的辉煌历史,在这里我不赘述。现代加密技术基于严密的数学原理,本质上是创造计算机无法暴力破解的数学难题。我们日常用的有对称加密技术与非对称加密技术。非对称加密技术在网络传输层加密(TLS)中有广泛的运用,不在本文讨论范围内。而对称加密技术中运用最广的是“高级加密标准”,英文简称AES (Advanced Encryption Standard),由美国国家标准与技术研究院(NIST)于2001年发布。AES目前在全球被广泛应用于各种领域,包括政府、银行、军事机构等等。历经17年,虽然有各种各样的尝试,但AES作为加密标准从未被真正攻破。

AES的加密从宏观上看很简单,用一个密匙来加密明文,生成密文。解密用同样的密匙解密密文,生成明文。AES一般使用两种长度的密匙,一种是128位,一种是256位。128位的密匙有2的128次方种可能性,如果用一千万台当前全球最顶尖的超级计算机日夜不停的计算,要计算1万万亿年(宇宙也只有150亿年),才有可能破解这个密匙。而256位的密匙的可能性是128位密匙的2的128次方倍。在可预见的将来,这两种密匙都是不可破解的。

但这个密匙怎么保存呢?答案是加密保存。这个密匙是有随机数生成器随机生成,然后用另一个密匙加密。而这个加密密匙的密匙则由用户设置的一个主密码自动生成。听起来很绕口,实际上就是用户主密码 -> 主密码密匙 -> 加密随机密匙 -> 加密数据。只要用户的主密码不被窃取,被加密的数据就不可能被破解。打个比方,传统的网站登陆像用钥匙打开一个保险箱,保险箱里的东西在没打开的时候也存在。这时候只要把保险箱撬开,就能直接取走里面的东西。而使用主密码加密,就如同拥有一只专属于你的魔法棒,它可以把金子变成一团灰,也可以把这团灰还原成金子。没有魔法棒的时候,任何人拿走这团灰也没有办法使用。

因此,只需要记住一个主密码,你就能将原本你知道的那些密码,通通变成你拥有的密码。而实现这个机制的,就是目前信息安全领域大力推荐的密码管理软件。

保护“主密码”

当今的密码管理软件的主要工作原理都是我在上面所说的密码加密保存机制。但不同的密码管理软件对于这套机制及其配套流程(例如同步、登陆、密码填写等)的实现则可能有很大不同。但大体上,真正保护你数据安全的就是你设置的主密码。与其他被保存的密码不同,主密码仍然是你知道的密码,也就是你记忆中的密码。这个密码只存在于你的脑海中,就连密码管理软件也不会记录你设置的密码。于之前相比,你只用牢牢记住这一个密码,不要告诉任何人,不要写在任何地方,你的密码就无法被窃取。

另外,选取安全的密码管理软件就十分重要。我认为,一个安全的密码管理软件,应该有公开透明的安全架构(公开的安全白皮书),很高的加密强度,永不储存用户主密码及其衍生物。对于常见的密码管理软件的评价,可以参考这篇知乎专栏:你的密码真的安全吗?六款密码管理 App 合集推荐对于我个人而言,我强烈推荐1Password,全平台通用,支持中文,并且在安全方面有很多独到做法。

2019年3月18日更新:因1Password未能及时修复严重漏洞 (https://www.securityevaluators.com/casestudies/password-manager-hacking/),且官方态度傲慢,我将撤回对1Password的推荐,并且建议所有1Password的用户立即停止使用该产品,转为使用LastPass或其他密码管理软件。

关于二步验证

有些人会说,我设置了二步验证,就不用像你说的这样管理密码了吧?二步验证防止的其实是密码撞库,也就是当你的密码在其他网站泄露或被黑客截获后,无法被直接用于登陆网站。二步验证在没有安全密码管理的机制之前,的确能防止一些重复密码被撞库和盗用。但二步验证同样存在风险。首先,不是所有网站都开启了二步验证,那些没有开启二步验证的大多数网站仍然存在撞库风险。其次,二步验证的手机短信验证方法存在严重缺陷。如果手机号被恶意转移 (这在很多国家都很常见),则二步验证形同虚设。所以,一个完善安全的密码管理机制仍然是当前信息时代安全防护的核心。

所有鸡蛋放在一个篮子里?

有些人对密码管理软件存在一些抵触心理,在我看来有两方面原因。

一是很多人以为密码管理软件是保险箱,将密码存在里面,万一被撬了就完了。其实密码管理软件利用现代加密技术,将密码加密保存,更像我说的魔法棒。被加密的密码在没有主密码的情况下是无法被提取的,毫无用处。

二是很多人觉得密码管理软件将所有密码放在一起,就像把所有鸡蛋都放在一个篮子里,万一篮子破了或丢了就完了。这个就涉及到数据的可用性问题,的确值得探讨。主流的密码管理软件大多自带或支持同步和备份加密过的密码库,这样即使一个设备丢了,其他地方也可以恢复备份。在强大的加密技术的支持下,把鸡蛋都放在一个安全的篮子里,其实是对鸡蛋最好的保护。只要加密技术不被攻破,篮子不破,你的鸡蛋就永远是你的。


参考文章/网站:
Guess why we’re moving to 256-bit AES keys
Have I Been Pwned
Be your own key master with 1Password