OverLord
我们登录一个网站的时候,使用账号密码登录验证身份,这是我们一贯的操作。但是,这种单纯的账号密码实际上被盗风险颇高。今天要讲到的两步验证,就是进一步提升账号安全的一个有效手段。顾名思义,两步验证就是需要两个步骤,也就是两重身份验证秘钥来验证使用者的身份。这样可以给网络提供额外的一层保护机制,因为它可以确保在账号密码被盗的时候,账户依旧安全。
举个例子,一般情况下,无论是朋友还是网站、软件,都会告诉你登录密码要尽可能设得复杂,比如我们极端一些,密码采用数字+密码+特殊字符+大小写区分的交叉组合,C@3f4#5a6!8N&,且不说能否记住这个密码,单就复杂程度而言,似乎很安全了吧?然而事实并不是这样(图1)。
为什么这样说?近年来,密码的失窃,已经发展到了一个全新的阶段——拖库。简单说拖库就是黑客利用网站的漏洞进行攻击并潜入其中,把数据库中的敏感信息窃取出来。比如黑客在A网站成功实施了拖库,从中找到A站的用户账号信息资料,黑客就可以使用这一套去对B网站、C网站……等等进行撞库,也就是试着用A站的用户名密码登录——大部分人都是一套用户名/密码通行天下,所以即便你的密码足够长、足够复杂,但是这些都是存储在网站的数据库中,一旦其中某一个网站被窃,那么看起来再安全的密码也失去意义了(图2)。
就拿安全性较高的APPLE ID为例好了。如果你只是单纯使用了APPLE ID的账号密码,但是没有开启两步验证,那么别人距离你的密码其实也就只有一个生日外加两个问答的距离。突破这一层之后,他能干什么呢?可以重置你的密码,窃取你同步到云端的隐私信息,包含通讯录、照片、邮件、短信、通话记录等等。所以,这就是近年来很多服务提供商都开始推行两步验证的根本原因了(图3)。
根据验证的机制,现在验证的因素主要是三类。第一类是“你自己(Something you are)”,比如指纹、虹膜和面部识别等;第二类是“你拥有的(Something youhave)”难以被复制的实体,如你的手机、实体动态密码器;第三类就是“你知道的(Something youknow)”,也就是能够自行记录的,比如密码。
而双因素验证,则使用至少两个验证方式,比如说,一个是“你知道的”密码,另一个是“你拥有的”如验证器,手机或USB秘钥。黑客必须通过不同渠道同时盗取两个不同机制的因素才能完成窃取动作,这个难度不言而喻。可以说,双因素验证必然是两步验证,但是,两步验证不一定是双因素验证。区别就在于,两步验证是否使用了三类因素中的两个不同方式类别。但对于使用者来说,无论如何,两步验证也远远比单纯的账号密码要安全许多。如短信验证码和电话语音验证码都是验证你是否持有这个手机或者电话来判断身份。
而使用验证器验证,在手机上安装密码生成应用程序验证器(Authenticator),可以生成一个随着时间变化的一次性密码,用于账户验证,而且这个应用程序不需要连接网络即可工作。验证器使用TOTP(Time-basedOne-timePassword),也称时间动态口令,是OTP(One-timePassword)的一种,由HOTP(HMAC-BasedOne-TimePassword)演变而来,比如网银和网络游戏的实体动态口令牌就是类似原理(图4)。
前面我们提到,使用验证器验证,当用户开启验证服务的时候,服务器就会随机生成一个密钥,举例如“HD45TNF12L655ID79B”,服务器将这个密钥保存在数据库中。然后,你看到的网页会显示一个二维码,内容是这个TOTP的密匙。当用户使用验证器的客户端扫描这个TOTP的二维码密匙时,就会把密钥“HD45TNF12L655ID79B”保存到客户端内,此时,该密匙便离线保存在验证器里了。
接下来,当用户需要登录验证的时候,验证器的客户端会每隔一段时间(如30秒)使用密钥“HD45TNF12L655ID79B”和时间戳通过一种特殊的算法生成一次性动态口令,如“160197”,看起来就是一串普通的验证数字。用户此时输入这个动态口令“160197”并点击确认,服务器端就会使用已经保存到数据库中的密钥“HD45TNF12L655ID79B”时间戳通过一种特殊的算法生成一次性動态口令进行对比校验,如果两个动态口令在服务器验证时一样,则验证成功允许登录。虽然听起来略为拗口,但这就是两步验证的完整运行机制(图5)。
显然,两步验证的机制看起来颇为复杂,但是它提供了一个额外的安全保护,而这样的安全保护机制效果实际上是1+1>2的。但是,两步验证也不是没有缺点,那就是第二个“钥匙”丢失时,可能会被服务提供商拒之门外,即便你知道这个账号的账户、密码也无计可施(图6)。
因此,在设置两步验证时,需要注意两点。第一,需要至少设置两个“你拥有的”验证方式,如验证器验证码、短信验证码、实体USB秘钥中的两个;第二是设置两步验证时,会生成一次性登录码,也是为了有效地避免被锁在账号外。所以务必保存好这个一次性登录码。
目前各网站、服务商的二次验证机制,绝大部分都是基于手机的,银行、证券客户端或者部分网游则会提供USB秘钥的可选服务。所以大体上看,手机是其中非常重要的一环。因此这里要请大家,尤其使用Android手机的用户特别注意,保持系统随时更新以避免老版本漏洞,且不要ROOT或越狱,不要随意借给他人使用。同时开启必要的应用锁,如支付宝和微信支付等等。当然手机的锁屏密码也不要采用简单的数字或图案,Android手机和iPhone锁屏密码都应使用复杂密码而不是6位数字或图案,或者干脆使用指纹,这些基础安全措施绝不可以忽略(图7)。
目前,大部分提供两步验证的网站或者服务有很多,这类两步验证应用/身份验证器的A PP都是遵循TOTP协议的同一套加密算法生成验证码的,所以它们完全通用,使用上基本一致。因此,我们也挑选了3个二次验证的APP给读者选择使用。
Authy是一款完全免费的两步验证,而且支持iOS/Android/Windows/macOS多系统,并且提供了Chrome浏览器插件。更为重要的是它可以备份数据,并支持跨设备同步,也就是说这一个APP就能通行全部支持TOTP两步验证的网站了,非常方便。值得注意的是,为了确保安全,Authy在任何新设备上登录,它都要求必须接收短信验证码,输入手机号码和短信验证码才可以访客登录,此外Authy还支持在每次打开应用都需要验证指纹或者是手势及数字密码,安全性毋庸置疑(图8)。
1Password是管理网站登录和敏感信息的最好应用,它拥有友好的用户界面,可以在任何时刻在任何设备上使用,包括笔记本电脑、手机甚至智能手表AppleWatch。1Password是一个独特的密码管理器,可以为用户带来安全和方便。它提供反钓鱼保护功能和卓越的密码管理,并具有自动生成强密码功能。所有的机密資料,包括密码、身份卡和信用卡,都是保存在一个安全的地方。1Password支持大多数Web浏览器,包括Safari、Camino、OmniWeb、DEVONagent、Firefox、Flock、Fluid和NetNewsWire等主流浏览器。所有浏览器扩展都共享一个密码链上的存储数据,这意味着当你从一个浏览器跳到另外一个浏览器的时候再也不需要手动复制你的密码。除了这些,新版本同样也可以支持一次性密码(TOTP两步验证码)(图9、图10)。
为了让用户能够免密码安全登录微软账户或其他网络账号,微软开发了自己的MicrosoftAuthenticator(微软身份验证器),类似于“GoogleAuthenticator(谷歌身份验证器)”,既能够通过二次验证安全代码增强账户安全性,又能够实现免密码登录(图11、图12)。