选择TOTP应对多因素认证应用泛滥问题
你的手机上是否装了一堆MFA应用,让你感觉像穿了大衣无法放下手臂?
或者这些MFA应用就像一窝英国斗牛犬幼崽——它们跟着你转,要求你的关注,并给你安全感的拥抱。
无论如何,这就像是需要照顾的大量冬季装备,需要喂养的众多嘴巴。考虑到所有这些需要跟踪的应用,请思考以下问题:
- 如果手机丢失或损坏,你会失去哪些访问权限?
- 所有MFA应用都支持备份/导出功能吗?
- 对于已知支持备份的应用,你最近一个月内做过备份吗?
- 在新手机上恢复这些MFA应用的流程是怎样的?
- 你是否测试过这个流程以确保没有意外?
那么迁移到不同的MFA应用呢?假设你可以导出数据,将这些数据转换为下一个MFA应用可解析的格式有多困难?
我首先承认,我曾多次被服务提供商通过社会工程学手段诱导安装他们的MFA应用。想想你注册新服务提供商MFA的时候,流程通常以这样的话开始:“你的组织要求你启用MFA。请先安装我们的MFA应用。”
如果我手机上已经有三个MFA应用了呢?它们都不够好吗?如果你幸运的话,服务提供商至少会建议几个可用的替代MFA应用。但即使在注册后,每次登录时你很可能都会被温和地提示安装服务提供商的应用,比如"现在无法访问我们的MFA应用吗?“这真是自以为是。
虽然每个MFA应用都有自己"比其他供应商更安全的特殊MFA实现方式”,但有一个基于标准的MFA方法你可能很熟悉,几乎每个MFA应用都支持。这种MFA类型要求你在30秒内输入6位代码,它有以下几个名称:
- 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位代码
- 服务提供商收到代码后,使用其共享密钥副本进行相同的计算
- 如果代码匹配,认证成功
很简单吧?事实上,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注册一样,应用商店中的描述通常不会直接说"此应用支持TOTP"。大多数MFA应用确实支持TOTP,但要验证,可以搜索"XYZ MFA应用是否支持TOTP",这应该会产生技术支持页面、博客或(最好)源代码。
在缩小选择范围时,还需要考虑以下几个问题:
MFA代码备份:云备份是否可以接受,还是需要本地备份? 如果云备份可以接受,你的备份是否需要端到端加密(E2EE)?并非所有MFA应用都提供E2EE备份。
设备注册数量:能否只注册一个设备?如果你想要备用设备,请留意允许将MFA代码传输或导出到第二个设备的功能。
是否使用去谷歌化的Android手机:当应用支持推送通知时,通常需要Google服务来安装或启动MFA应用,即使服务提供商不使用推送通知进行MFA…
独立安全审计:寻找你考虑的MFA应用的独立安全审计。
关于这篇论文真的很酷的是,研究人员提供了重现他们发现的步骤。
是否会有你选择的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。