直接从计算机生成用于 2FA 的 TOTP(无需移动设备)

直接从计算机生成用于 2FA 的 TOTP(无需移动设备)

在 Ubuntu 22.04.2 上,我很高兴听到一种原生且安全的方法来生成拓扑拓扑图在任何需要 2FA 的应用程序中使用的代码。

您知道在 Ubuntu 计算机上直接执行此操作的开源方法吗?

我能找到的所有教程都是基于“移动应用程序”方式(例如使用 Google Authenticator),但我无法使用这种方式,因为除了笔记本电脑之外我没有任何其他移动设备。

答案1

KeepassXC

这是 Ubuntu 存储库中提供的 Linux 原生开源密码管理器。如果您想要最新版本,还有一个 PPA。

从 Ubuntu 商店或终端安装 keepassXC。打开终端并输入:

sudo apt install keepassxc
  1. 安装后,您必须创建一个数据库来保存密码。
  2. 然后您必须使用用户名和密码创建一个新条目。此步骤不允许创建 TOPT。
  3. 最后,选择新创建的条目(用户名和密码)后,您可以使用顶部的菜单并选择条目> TOTP... > 设置 TOTP。

安全

KeepassXC 数据库默认受密码保护。也就是说,要使用存储在数据库中的密码(和 TOTP),您必须打开 KeepassXC 应用程序并输入密码才能打开数据库。除了密码之外,您还可以选择使用文件(存储在 USB 驱动器中)来提高安全性。也就是说,如果 USB 驱动器中没有特定文件或未插入特定 USB 驱动器,则任何人都无法打开 KeepassXC 数据库并访问 TOTP 或密码。

警告

您可能需要在提供此类 2FA 的网页上重新开始设置 TOTP。例如,您可能需要暂时禁用 Google 帐户中的 2FA,然后重新设置以获取新的二维码。设置 2FA 后,大多数网页不会显示密钥或相应的二维码。如果您目前在手机上使用身份验证应用程序,如果您再次在网页上进行 2FA 设置,该应用程序生成的 TOTP 号码将变得过时。

从积极的一面,KeeppassXC 设置完成后即可为每个 TOTP 生成二维码。也就是说,您可以使用手机的身份验证应用扫描 KeepassXC 生成的二维码来更新它。

浏览器扩展

您可能希望使用 Chrome 或 Firefox 扩展程序来访问 KeepassXC。这样您只需点击几下鼠标即可复制和粘贴用户 ID、密码和 TOTP(如果可用)。

奥西

Authy 是另一款适用于手机、平板电脑的身份验证应用程序,和台式电脑. 甚至有一个Snap 版本的。

与 KeeppassXC 不同,Authy 不管理密码。它仅用于生成 TOTP。从好的方面来说,如果您在手机或平板电脑上使用 Authy,则可以在所有设备(包括台式机)之间保持 TOTP 同步。您必须创建一个 Authy 帐户才能使每台设备上的 Authy 应用保持同步。

希望这可以帮助

答案2

oathtool如果你只需要生成代码而不是管理它们(例如,你不介意将 TOTP 密钥存储在其他地方并在每次需要生成代码时提供它),你可以使用oath-toolkit 包裹。要从 base32 编码的秘密生成 6 位代码,您可以使用以下命令:

oathtool --base32 --totp "SECRET" -d 6

默认时间步长为 30 秒,默认开始时间为 1970-01-01 00:00:00 UTC。请参阅手册页了解更多使用信息。有关来源,请参阅debain 仓库Jammy 来源

如果您不想使用外部包或工具,TOTP 生成所需的算法在相关的 RFC 中描述,您可以使用它们来编写自己的 shell 脚本:

  • RFC 2104:HMAC:用于消息认证的密钥散列
  • RFC 4226:HOTP:基于 HMAC 的一次性密码算法
  • RFC 6238:TOTP:基于时间的一次性密码算法

答案3

这与我在安全 SE 上提出的问题不久以前。

首先,有一个有用的命令行工具,名为oathtool。您可以使用它使用您的 2fa 密钥生成 2fa 的 6 位代码。步骤概述如下这里

显然,保护 2fa 密钥比保护 2fa 代码本身更重要。您可以将 2fa 密钥存储在密码管理器中,然后编写脚本从中生成 6 位代码。

如果您将密钥存储在机器上,那么您实际上并没有执行 2fa。您只有两个密码。为了解决这个问题,我做了以下事情:

  • 将 2fa 密钥存储在加密文件中,并将该文件存储在闪存驱动器上。
  • 当我插入闪存驱动器时,将包含(可能有很多)2fa 密钥的文件夹安装到我的密码管理器可以看到的文件夹中。我使用经过,所以这很容易做到。目前我是手动完成的,但可以自动化。
  • 您可以自定义界面,但我编写了以下 bash 脚本,称为2fa
pass 2fa/$1 | xargs -d '\n' oathtool -b --totp

这样做的最终结果(使用我的命名系统)是,我可以2fa gitlab在我的终端上写入并获取 6 位数代码。我有另一个脚本将其写入我的剪贴板,并提示我一个名称列表(与我的密码管理器相同的界面)。

当然,如果没有 USB 驱动器,这一切都无法实现,这使得它成为名副其实的“你拥有的东西”解决方案。但是,只有当你能解密 gpg 文件时,它才会起作用,而这需要我的私钥。我目前只在几台受信任的机器上使用 2fa,所以这对我来说没问题。如果我需要它更通用,那么我可能会重新考虑使用手机或 Yubikey。

原帖中有人批评此方案与 Yubikey 相比。我建议你去看看。

答案4

我使用 Firefox 扩展验证器为此,使用工作单点登录 - 事实上,他们推荐那些不能或不会使用移动设备的人使用。这在几台台式机上设置(工作和家庭);在笔记本电脑上,我希望设备安全性不错,因为获取代码有点太容易了。


* Microsoft Authenticator 对 Android 的权限要求等让我无法在个人手机上使用,但我后来找到了一种轻量且合理的替代方案。

相关内容