去年,塞尔吉奥•卡尔塔吉隆(Sergio Caltagirone)发现自己陷入了困境。在旅途中,他的手机坏了,完全无法工作。由于无法使用谷歌和Microsoft authenticator应用程序,他在最需要的时候无法使用双因素身份验证——他是从30到40个网站无法识别的IP地址登录的。
安全公司Dragos负责威胁情报的高级副总裁卡尔塔吉隆说:“我有一大堆网站,因为我的2FA账号丢失了,所以我必须进行长时间的账号恢复过程。”“每次我都要联系客服。我有不同的要求,我必须通过他们有效地禁用2FA对我的帐户。有些需要地址验证。(对其他人来说,)我不得不寄上最后一份账单。我经历的这些简直是疯了。”
经验表明,多因素认证是一把双刃剑。要求用户输入每30秒自动生成的密码,这大大增加了账户被接管的难度,即使攻击者已经捕获或以其他方式获得了密码。但是,如果第二个因素(在本例中是“您拥有的东西”,即手机)不可用,同样的保护可以阻止合法用户登录很长一段时间。
当去年9月Caltagirone转述他的经验时,对可用的消费者和小型企业身份验证者的快速调查还有很多不足之处。只有很少的几个应用程序能够备份每个电话用于生成基于时间的一次性密码(TOTP)的唯一加密种子。包括谷歌、Github、Facebook和其他数百个实现基于时间的一次性密码算法标准的网站,都需要临时密码来登录选择使用2FA的用户。
结果呢?当你的设备被盗、丢失或停止工作时,你必须经历与Caltagirone一样的痛苦和耗时的账户恢复过程。备份和恢复机制的缺乏意味着唯一可行的方式来对冲损失或设备故障是打印,扫描,或照片每个二维码或底层Web链接(例如,http://USERNAME@salesforce.com/?secret=LZZIKRWX736EH2IQ&发行人=松弛)表示。这很费时间。更糟糕的是,储存它们既笨重又不安全,尤其是在旅行的时候。
四家提供恢复服务的认证机构的安全都是可以通过的,但在极端情况下,每一家都有弱点,容易受到黑客、恶意内部人士或法院命令的执法机构的攻击(具体取决于应用程序)。在Mark Gamache的宝贵帮助下,我对这些场景和每个身份验证者的风险-收益分析进行了思考。Mark Gamache是一位西雅图地区的安全专家,专注于应用密码学和身份验证。
这篇文章的任何内容都不应该被理解为人们不应该使用2FA。即使启用了备份,使用基于totp的2FA无疑也比不使用2FA要好。重要的是要记住,在任何安全评估中,都没有放之四海而皆准的方法。对一个人来说最安全的东西对另一个人来说不一定是真的。本文不是告诉读者哪种身份验证备份是最安全的,而是帮助读者全面考虑各种因素。
Gamache和我认为其中一个威胁模型是黑客(1)通过网络钓鱼或其他方式成功获得密码(毕竟,这是2FA的定义所预测的场景)和(2)通过SIM交换或其他方式控制用户的电话号码。虽然这些要求非常苛刻,但并非闻所未闻,尤其是针对那些在线钱包中储存了大量比特币的目标。
其他威胁还包括某个身份验证服务的恶意内部人员或某个政府机构,该机构窃取机密数据或强制将其交出。同样,这些都是极端的情况,但并非闻所未闻。
最后,我选择了三种身份验证程序:authy、Duo和lastpass,因为它们让我相信,在不存在未知软件错误或密码疏忽的情况下,它们的备份和恢复过程可以在零知识的情况下工作。这一原则意味着秘密的TOTP种子除了最终用户外,其他任何人都不能使用。保证要求所有加密和解密都在客户机的本地设备上执行,数据在传输中和在提供者的服务器上都进行了加密。
最突出的两个认证者是Duo和Authy。两者都使备份变得容易,并给了我合理的信心,他们会在我的威胁模型下保持秘密种子的安全和机密。这两种身份验证器都主要关注企业客户,客户付费使用它们将大量员工登录到企业门户和专用网络。
这两个身份验证器的制造商提供了一套远远超出2FA的附加安全服务,比如帮助管理员跟踪数千名员工的设备中哪些没有安装安全更新。Duo Security和Authy背后的公司(称为Authy)也提供了一个免费的验证器版本,可以与任何使用TOTP标准的第三方网站兼容,这也是本次综述的重点。
Authy是我的首选,因为它能将加密种子推送到多个设备上,包括mac、pc、平板电脑、备用手机或Linux机器。然后种子在所有设备之间同步,这样一个设备上的更改或添加将自动填充到所有其他设备。如果用户丢失了一个设备,她的其他设备将继续生成totp。然后种子可以被添加到替换设备中。
除了提供一种健壮的备份和恢复方法的保证之外,该方法还提供了拥有多个工作身份验证器的便利性,以及在比本文中其他身份验证器更广泛的设备上使用它们的便利性。(Duo允许我使用多部手机,但它们都必须运行Android或iOS系统。此外,在一台设备上所做的更改或添加与其他设备并不同步。)
Authy用户在备份过程中设置密码,在将种子发送到Authy服务器之前,对设备上的种子进行加密。没有密码,种子就无法解密,永远丢失。如果没有经过严格的恢复过程(稍后将详细介绍),用户就无法从Twilio接收加密的种子数据,除非在设置身份验证器时演示对原始设备或电话号码的控制。
另一个优点是:Authy在记录如何在设备上加密种子方面比其他所有身份验证器都花了更多的时间。Authy机制在用户选择的密码中添加随机密码,然后将其传递至少1000轮PBKDF2,这种算法是最擅长挫败使用单词列表或暴力破解密码的密码破解攻击的算法之一。
生成的哈希用于生成一个密钥,该密钥使用经过时间检验的高级加密标准对种子进行加密。该过程还为每个登记的帐户添加初始化向量。只有在本地执行此过程之后,也就是在用户设备上,加密的种子、salt和IV才会发送到Twilio。
结果:Twilio没有能力存储甚至查看备份密码,因此也没有能力解密种子数据。收到salt、IV和加密后,Twilio服务器将把数据发送到授权的备份设备。然后用户在每个设备上输入备份密码,作为最后一个丢失的部分来解密种子。(salt/IV的价值是在攻击者设法从Twilio窃取加密种子的情况下提供另一层安全性,而不是salt/IV。)
如果用户丢失了所有设备,但仍然可以控制电话号码,则用户必须通过一个帐户恢复过程,其中包括一个强制等待期,以恢复加密的种子数据。如果用户丢失了手机和最初用来建立Authy的电话号码,恢复过程将更加复杂,可能需要提供政府颁发的身份证等。但是,在恢复密码丢失的情况下,所有这些都没有帮助。
我最不喜欢Authy的一点是,它使用短信或语音电话来验证新设备是否被授权接收加密种子。这意味着只需要知道备份密码和SIM交换就可以恢复和解密数据。需要说明的是,这是一种极端的威胁模型,其他身份验证器也类似地允许使用SMS或电子邮件地址进行验证。