s.k Asked: 2023-03-24 04:24:01 +0800 CST2023-03-24 04:24:01 +0800 CST 2023-03-24 04:24:01 +0800 CST 直接从计算机(无移动设备)为 2FA 生成 TOTP 772 在 Ubuntu 22.04.2 上,我很高兴听到有关生成TOTP代码以用于任何需要 2FA 的给定应用程序的本机和安全方法。 您知道直接在 Ubuntu 计算机上执行此操作的开源方法吗? 我能找到的所有教程都是基于“移动应用程序”方式(例如使用 Google Authenticator),我不能使用它,因为除了笔记本电脑我没有任何其他移动设备。 22.04 4 个回答 Voted Best Answer user68186 2023-03-24T04:52:38+08:002023-03-24T04:52:38+08:00 Keepass XC 这是 Ubuntu 存储库中提供的 Linux 本机开源密码管理器。如果你想要最新的,还有一个 PPA。 从 Ubuntu 商店或终端安装 keepassXC。打开终端并输入: sudo apt install keepassxc 安装后,您必须创建一个数据库来保存密码。 然后您必须使用用户名和密码创建一个新条目。它不允许在这一步创建 TOPT。 最后,一旦您选择了新创建的条目(用户名和密码),您就可以使用顶部的菜单并选择条目> TOTP... > 设置 TOTP。 安全 KeepassXC 数据库默认受密码保护。也就是说,要使用存储在数据库中的密码(和 TOTP),您必须打开 KeepassXC 应用程序并输入密码才能打开数据库。除了密码之外,您还可以选择使用一个文件(存储在 USB 驱动器中)来提高安全性。也就是说,如果特定文件不在 USB 驱动器中或特定 USB 驱动器未插入,则没有人可以打开 KeepassXC 数据库并访问 TOTP 或密码。 警告 您可能需要在提供此类 2FA 的网页上重新开始设置 TOTP。例如,您可能需要暂时禁用 Google 帐户中的 2FA,然后重新设置以获取新的二维码。设置 2FA 后,大多数网页不会显示密钥或相应的二维码。如果您当前在手机上使用身份验证应用程序,则当您再次在网页中进行 2FA 设置时,该应用程序生成的 TOTP 号码将会过时。 从好的方面来说, KeeppassXC 可以在设置后为每个 TOTP 生成二维码。也就是说,您可以使用手机的身份验证应用程序扫描 KeepassXC 生成的二维码进行更新。 浏览器扩展 您可能希望为 KeepassXC 使用 Chrome 或 Firefox 扩展。这使您可以通过单击几下来复制和粘贴用户 ID、密码和 TOTP(如果可用)。 授权 Authy 是另一个适用于手机、平板电脑和台式机的身份验证应用程序。甚至还有它的Snap 版本。 与 KeeppassXC 不同,Authy 不管理密码。它仅用于生成 TOTP。从好的方面来说,如果您在手机或平板电脑上使用 Authy,您可以使 TOTP 在包括台式机在内的所有设备之间保持同步。您必须创建一个 Authy 帐户才能使每台设备中的 Authy 应用保持同步。 希望这可以帮助 Vertganti 2023-03-24T18:02:04+08:002023-03-24T18:02:04+08:00 如果您只需要生成代码而不需要管理它们(例如,您不介意将 TOTP 秘密存储在别处并在每次需要生成代码时提供它),您可以使用oathtoolwhich is the part of the oath-toolkit package。要从 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:基于时间的一次性密码算法 preferred_anon 2023-03-24T20:25:38+08:002023-03-24T20:25:38+08:00 这和我前段时间在security SE上问的一个问题有关。 首先,有一个有用的命令行工具,叫做oathtool. 您可以使用它使用您的 2fa 密码为 2fa 生成 6 位代码。此处概述了这些步骤。 显然,您的 2fa 秘密比 2fa 代码本身更重要。您可以将 2fa 密钥存储在密码管理器中,并编写脚本以从中生成 6 位代码。 如果您将密钥存储在您的机器上,那么您并不是真正的 2fa。你只有两个密码。为了解决这个问题,我做了以下事情: 将 2fa 密钥存储在加密文件中,并将该文件存储在闪存驱动器上。 当我插入我的闪存驱动器时,将包含(可能很多)2fa 密钥的文件夹安装到我的密码管理器可以看到的文件夹中。我使用pass,所以这很容易做到。目前我手动执行此操作,但它可以自动执行。 该界面是您可以自定义的,但我编写了以下 bash 脚本,名为2fa: pass 2fa/$1 | xargs -d '\n' oathtool -b --totp 这(使用我的命名系统)的最终结果是我可以2fa gitlab在我的终端上编写和获取 6 位代码。我有另一个脚本将它写入我的剪贴板,并提示我一个名称列表(与我的密码管理器相同的界面)。 当然,如果没有 USB 驱动器,这一切都无法正常工作,这使其成为真正的“您拥有的东西”解决方案。但是,它只有在您可以解密 gpg 文件时才有效,这需要我的私钥。目前我只在几台受信任的机器上使用 2fa,所以这对我来说没问题。如果我需要它更通用,那么我可能会重新考虑使用电话或 Yubikey。 与原始帖子中的 Yubikey 相比,此方案受到批评。我建议检查一下。 Chris H 2023-03-24T20:09:54+08:002023-03-24T20:09:54+08:00 我为此使用了 Firefox 扩展Authenticator ,以及工作的 SSO - 他们实际上推荐它给那些不能或不会*使用移动设备的人。这是在几台台式机(工作和家庭)上设置的;在笔记本电脑上,我想要良好的设备安全性,因为获取代码有点太容易了。 * Android 的 Microsoft Authenticator 权限要求等排除了我在个人手机上使用它的可能性,但我已经找到了一个轻量级且合理的替代方案。
Keepass XC
这是 Ubuntu 存储库中提供的 Linux 本机开源密码管理器。如果你想要最新的,还有一个 PPA。
从 Ubuntu 商店或终端安装 keepassXC。打开终端并输入:
安全
KeepassXC 数据库默认受密码保护。也就是说,要使用存储在数据库中的密码(和 TOTP),您必须打开 KeepassXC 应用程序并输入密码才能打开数据库。除了密码之外,您还可以选择使用一个文件(存储在 USB 驱动器中)来提高安全性。也就是说,如果特定文件不在 USB 驱动器中或特定 USB 驱动器未插入,则没有人可以打开 KeepassXC 数据库并访问 TOTP 或密码。
警告
您可能需要在提供此类 2FA 的网页上重新开始设置 TOTP。例如,您可能需要暂时禁用 Google 帐户中的 2FA,然后重新设置以获取新的二维码。设置 2FA 后,大多数网页不会显示密钥或相应的二维码。如果您当前在手机上使用身份验证应用程序,则当您再次在网页中进行 2FA 设置时,该应用程序生成的 TOTP 号码将会过时。
从好的方面来说, KeeppassXC 可以在设置后为每个 TOTP 生成二维码。也就是说,您可以使用手机的身份验证应用程序扫描 KeepassXC 生成的二维码进行更新。
浏览器扩展
您可能希望为 KeepassXC 使用 Chrome 或 Firefox 扩展。这使您可以通过单击几下来复制和粘贴用户 ID、密码和 TOTP(如果可用)。
授权
Authy 是另一个适用于手机、平板电脑和台式机的身份验证应用程序。甚至还有它的Snap 版本。
与 KeeppassXC 不同,Authy 不管理密码。它仅用于生成 TOTP。从好的方面来说,如果您在手机或平板电脑上使用 Authy,您可以使 TOTP 在包括台式机在内的所有设备之间保持同步。您必须创建一个 Authy 帐户才能使每台设备中的 Authy 应用保持同步。
希望这可以帮助
如果您只需要生成代码而不需要管理它们(例如,您不介意将 TOTP 秘密存储在别处并在每次需要生成代码时提供它),您可以使用
oathtool
which is the part of theoath-toolkit
package。要从 base32 编码的秘密生成 6 位代码,您可以使用以下命令:默认时间步长为 30 秒,默认开始时间为 1970-01-01 00:00:00 UTC。有关更多使用信息,请参阅联机帮助页。有关来源,请参阅debain 存储库和Jammy 来源。
如果您不想使用外部包或工具,生成 TOTP 所需的算法在相关的 RFC 中有描述,您可以使用它来编写自己的 shell 脚本:
这和我前段时间在security SE上问的一个问题有关。
首先,有一个有用的命令行工具,叫做
oathtool
. 您可以使用它使用您的 2fa 密码为 2fa 生成 6 位代码。此处概述了这些步骤。显然,您的 2fa 秘密比 2fa 代码本身更重要。您可以将 2fa 密钥存储在密码管理器中,并编写脚本以从中生成 6 位代码。
如果您将密钥存储在您的机器上,那么您并不是真正的 2fa。你只有两个密码。为了解决这个问题,我做了以下事情:
2fa
:这(使用我的命名系统)的最终结果是我可以
2fa gitlab
在我的终端上编写和获取 6 位代码。我有另一个脚本将它写入我的剪贴板,并提示我一个名称列表(与我的密码管理器相同的界面)。当然,如果没有 USB 驱动器,这一切都无法正常工作,这使其成为真正的“您拥有的东西”解决方案。但是,它只有在您可以解密 gpg 文件时才有效,这需要我的私钥。目前我只在几台受信任的机器上使用 2fa,所以这对我来说没问题。如果我需要它更通用,那么我可能会重新考虑使用电话或 Yubikey。
与原始帖子中的 Yubikey 相比,此方案受到批评。我建议检查一下。
我为此使用了 Firefox 扩展Authenticator ,以及工作的 SSO - 他们实际上推荐它给那些不能或不会*使用移动设备的人。这是在几台台式机(工作和家庭)上设置的;在笔记本电脑上,我想要良好的设备安全性,因为获取代码有点太容易了。
* Android 的 Microsoft Authenticator 权限要求等排除了我在个人手机上使用它的可能性,但我已经找到了一个轻量级且合理的替代方案。