我在我志愿服务的组织之一拥有一个 Google 帐户。他们最近决定要求所有帐户登录都需要 2FA。Google 的 2FA 注册过程需要 (a) PSTN 电话号码,(b) 智能手机上的 Google 应用程序(不是 Google Authenticator),(c) 硬件安全令牌之一。我不准备向 Google 提供我的电话号码,我也不愿意在有许多第三方 OTP 实现可用的情况下安装要求我在手机上登录的 Google 应用(除此之外,我很少使用智能手机,更愿意使用桌面应用程序)。该组织没有提供硬件令牌,我自己也没有。还有其他选择吗?例如,获取设置和初始化密钥以与 OTP 应用程序一起使用,或以与硬件令牌相同的方式起作用的浏览器扩展。我正在运行 Ubuntu 21.04 和 Firefox,但如果绝对必要,可以使用基于 Chrome 的浏览器。
(编辑澄清在注册期间不提供 Google Authenticator 作为选项:只有 Google(搜索)应用程序或 Gmail 应用程序是可能的。)
“智能手机上的 Google 特定应用”有两种选择——一种使用在线通知(Google Prompt),另一种使用离线 OTP(Google Authenticator)。
一次性密码
Google 以“ Authenticator app ”的名义支持基于 OTP 的 2FA 。它使用 OATH TOTP 标准——与大多数其他 OTP 应用程序使用的完全相同,具有标准参数(6 位数字,30 秒间隔)。
作为注册过程的一部分,您将看到一个直接包含 TOTP 共享密钥的二维码。您几乎可以使用任何现有的 OTP 应用程序对其进行扫描(桌面应用程序也应该能够“扫描”屏幕截图)。
在同一步骤中,您还可以单击“无法扫描?” 并显示与纯文本相同的 TOTP 种子。您可以将其复制并粘贴到您的桌面 OTP 应用程序中,或者将其写在纸上作为备份存储。
该应用程序不需要与 Google 通信。但是,设备的时钟需要准确(Google 官方应用会使用在线时间服务器自动补偿错误的时钟,但在其他应用中,您需要自己处理)。
当询问您的手机类型时,您选择“iOS”还是“Android”并不重要——无论哪种方式,您都会得到相同的过程。
(如果“无法扫描?”选项丢失,也可以使用通用 QR 解码器扫描 QR 码,它将以纯文本形式显示 TOTP 种子。QR 码的内容使用格式
otpauth://totp/GitHub:someuser?secret=ABCDEF&issuer=GitHub
,带有用户名并且发行人仅用于展示。)代币
关于硬件令牌——是的,有一些浏览器扩展可以模拟 WebAuthn 或 U2F 令牌,但其中许多似乎已被废弃,而且它们可能不一定是安全的。(它们也有突然不再工作的风险,所以如果你使用一个,请确保有 TOTP 作为备份。)
在 Linux 上,您还拥有rust-u2f等软件,它在操作系统级别模拟硬件 U2F 令牌——它可以与任何网站和任何 Web 浏览器一起使用,因为它被视为实际连接的 HID 设备。尽管如此,它还是比真正的硬件令牌更脆弱,我不确定我是否会推荐使用它。
最后,让操作系统提供基于软件的“平台令牌”实际上是较新的 WebAuthn 规范的一部分。Windows 10 以“Windows Hello”名称实现它(所有主流浏览器都支持),Apple 刚刚在 macOS Monterey 中添加了类似的“iCloud Passkey”功能。
不幸的是,谷歌不支持“平台”令牌,只支持硬件令牌——我不确定这是故意的还是因为他们使用的是旧的 U2F API 而不是 WebAuthn。(但是,rust-u2f 仍然可以工作,因为它模拟的是硬件令牌,而不是平台令牌。)
您不需要专门使用 Google Authenticator - 任何 TOTP 应用程序都可以。我已经在智能手机上从 Google Authenticator 迁移到 andOTP,它运行良好。