选择TOTP应对MFA应用泛滥问题

本文探讨了多因素身份验证(MFA)应用泛滥的问题,并介绍了基于时间的一次性密码(TOTP)标准如何提供更灵活的解决方案,包括TOTP工作原理、服务提供商支持识别方法和应用选择考量因素。

选择TOTP应对MFA应用泛滥问题

| Sean Verity

你的手机上是否有一堆MFA应用,让你感觉像穿得太多无法放下手臂?

或者也许手机上的所有MFA应用感觉像一窝英国斗牛犬幼崽。它们跟着你到处跑,要求你的关注,并给你安全拥抱。

无论哪种方式,这都是很多比喻性的冬季装备需要照顾,很多嘴巴需要喂养。考虑到所有这些需要跟踪的应用,请考虑以下问题:

  • 如果你丢失或损坏手机,会失去对哪些服务的访问权限?
  • 你所有的MFA应用都允许备份/导出吗?
  • 对于你知道可以备份的应用,你在过去一个月左右做过备份吗?
  • 在新手机上恢复这些MFA应用的过程是怎样的?
  • 你是否测试过这个过程以确保没有任何意外?

迁移到不同的MFA应用怎么样?

假设你可以导出数据,将这些数据转换为下一个MFA应用可以解析的格式有多困难?

我第一个承认,我曾多次被服务提供商社会工程学攻击,安装他们的MFA应用。想想你注册新服务提供商MFA的那些时候。程序通常以服务提供商说类似这样的话开始:“你的组织要求你做MFA。首先安装我们的MFA应用。”

如果我手机上已经有三个MFA应用呢?它们都不够好吗?如果你幸运,服务提供商至少会建议几个可以使用的替代MFA应用。但即使在注册之后,每次登录时你很可能被温和地推动安装服务提供商的应用,比如"现在无法访问我们的MFA应用?“真是自以为是。

虽然每个MFA应用都有自己"做MFA的特殊方式,比其他供应商更安全”,但有一个基于标准的MFA方法你可能熟悉,几乎所有MFA应用都支持。这是那种你有30秒时间输入6位代码的MFA风格,它有几个名称:

  • Google Authenticator
  • 基于时间的一次性密码(TOTP)

当我看到"Google Authenticator"列为支持的MFA应用时,我曾经认为必须安装Google Authenticator应用。然而,我现在将"Google Authenticator"解释为"支持TOTP的应用"。来自Google Authenticator Github Wiki:

支持TOTP的服务提供商的好处是,有很多应用支持TOTP,因为它是标准化的[1]并且相当简单。以下是TOTP认证通常[2]如何工作的概述:

  • 用户和服务提供商有一个共享密钥
  • 用户的TOTP应用计算自Unix纪元以来的时间步数
  • 时间步数与共享密钥结合,使用HMAC-SHA-1计算6位代码
  • 用户在认证期间向服务提供商提供6位代码
  • 收到6位代码后,服务提供商使用其共享密钥副本进行相同计算
  • 如果代码匹配,认证成功

很简单,对吧?事实上,TOTP如此简单,如果你不喜欢整个图形用户界面的事情,你可以用20行Python实现它,或者几乎完全用bash实现。

这意味着当你选择TOTP时,在使用什么MFA应用和安装多少应用方面有更大的灵活性。例如:

  • 你可以选择使用商业支持的闭源应用或可以审计的开源应用
  • 你可以对MFA密钥进行离线本地备份,或使用提供可信在线备份功能的解决方案
  • 你可以找到允许注册多个设备的TOTP应用
  • 如果你喜欢复古计算,你可以将旧的Commodore 64变成独立的TOTP生成器

如何判断服务提供商是否支持TOTP

在识别服务提供商是否支持TOTP时,你可能不会得到明确的声明。以下是MFA注册期间更可能看到的一些提示:

  • 服务提供商会声明类似"从你的MFA应用输入代码"的内容。这是承认你可能已经有MFA应用。由于TOTP是最常见的MFA风格,很可能支持TOTP
  • 寻找标有"Google Authenticator"的选项。通常旁边会有Google Authenticator徽标

如果这些提示都没有出现,那么TOTP可能作为备用选项被隐藏。也就是说,你可能需要拒绝服务提供商的初始提议。这有时通过"尝试其他方法"表示。

如何选择TOTP应用

显然,主要考虑因素是应用是否支持TOTP。与MFA注册一样,App Store或Google Play中的应用描述通常不会直接说"此应用支持TOTP"。大多数MFA应用确实支持TOTP,但要验证,搜索类似"XYZ MFA应用是否支持TOTP"的内容。这应该会产生技术支持页面、博客或(最好)源代码。

在开始缩小选择范围时,这里还有几个问题需要考虑,可能需要一些工作来弄清楚:

MFA代码备份 - 云备份可以吗?还是需要本地备份? 如果云备份可以,你的备份需要端到端加密(E2EE)吗?并非所有MFA应用都提供E2EE备份。参见:https://www.bleepingcomputer.com/news/google/google-will-add-end-to-end-encryption-to-google-authenticator/

设备注册数量 - 你能只注册一个设备吗?如果你想准备好备用设备,请留意允许将MFA代码传输或导出到第二个设备的功能。

你有"去谷歌化"的Android手机并想保持这样吗? 当应用支持推送通知时,通常需要Google服务来安装或启动MFA应用,即使服务提供商不使用推送通知进行MFA…

独立安全审计 - 寻找你考虑的MFA应用的独立安全审计。这里有一份详细的USENIX 2023论文供你开始:https://www.usenix.org/system/files/sec23summer_198-gilsenan-prepub.pdf

这篇论文真正酷的是研究人员提供了重现他们发现的步骤:https://github.com/blues-lab/totp-app-analysis-public

是否会有你选择的MFA应用在特定场景下不起作用的情况?

但希望你已经看到选择TOTP如何在执行MFA方面为你提供一些灵活性。至少,如果你选择TOTP认证,就不会有那么多MFA应用需要跟踪。

脚注 [1] https://datatracker.ietf.org/doc/html/rfc6238 [2] SHA-1是建议的默认值,也是迄今为止最常见的实现。不过RFC提到了SHA-256或SHA-512变体。TOTP时间步长也不必是30秒。如果你愿意,可以疯狂地每5秒生成一次TOTP。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计