40

警告: 与第三方共享您的 TOTP 种子打破了多因素身份验证的基本假设,即 TOTP 种子是秘密的。

所以,我知道这方面的文档,在这里找到:Google Authenticator Key URI Format

当我从该页面遵循此示例时:

otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example

我将它“拼接”到 Google Charts URL 中,因此:

https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example

它将显示一个有效的 QR 码,如果我用手机上的 Google Authenticator 应用程序扫描它,它将开始生成有效的 OTP。

但是,在手机上的显示中,对于由 QR 码创建的条目,我得到了 OTP,在它下面,我得到了“Example:alice@google.com”。我想要的是在 OTP上方显示“示例”,在 OTP下方显示“alice@google.com” 。我不禁注意到所有专业制作的应用程序都是这样做的。例如,Google、Wordpress、Amazon 等。公司名称在 OTP上方,用户名显示在 OTP下方。是的,这纯粹是一个表面问题,但我想把它做好。

谁能给我一个线索?

4

5 回答 5

40

从信息安全的角度来看,推荐使用 Google Charts 的响应绝对是糟糕的。这实质上是与第三方公司共享 TOTP机密以及您的用户名 ( alice@google.com) 和发行人 ( Example),而没有法律义务对其保密,并通过GET请求进行此操作!这样做不仅违反了多因素身份验证的每一个假设,而且很可能违反了您组织的信息安全政策。它会使 MFA 增加的任何价值无效,因为在密码泄露的情况下保护您的帐户免遭破坏的唯一因素本身就是被破坏的。

只需使用任何 QR 码生成器,只要它在本地处理您的数据即可。

切勿将在线 QR 生成器用于 MFA 机密

在 Linux 上,我推荐python-qrcode库,它可以在控制台上使用 UTF-8 字符打印您的二维码。

pip install qrcode

然后:

qr "otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example"

在此处输入图像描述

于 2019-06-24T13:18:28.013 回答
33

我使用不同的方式使用本地 qrencode 安装:

qrencode -o- -d 300 -s 10 "otpauth://totp/YOUR_IDENTIFICATION?secret=YOUR_SECRET" | display

通过这种方式,我可以从我的笔记本电脑上重建丢失的身份验证密钥库。

如果您担心 bash 历史记录中出现的秘密,您可以在隐藏模式下阅读秘密并使用它:

read -p "Write your secre here (no output expected): " -s YOUR_SECRET
qrencode -o- -d 300 -s 10 "otpauth://totp/YOUR_IDENTIFICATION?secret=$YOUR_SECRET" | display

这样,当您关闭 bash 会话时,您的秘密就不会出现任何痕迹。

于 2016-08-12T12:46:51.797 回答
2

警告: 与第三方共享您的 TOTP 种子打破了多因素身份验证的基本假设,即 TOTP 种子是秘密的。

刚刚想通了。

事实证明,我需要对“oauth”中的所有特殊字符进行编码,即“$”、“%”、“=”等。

因此,使用与以前相同的 Google Charts URL,但对这些字符进行编码,如下所示:

https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/Example%3Aalice%40google.com%3Fsecret%3DJBSWY3DPEHPK3PXP%26issuer%3DExample

它工作正常。

于 2015-12-30T16:55:47.363 回答
2

只是要注意,Google Authenticator 的较新版本将使用该issuer参数,记录在这里:

https://github.com/google/google-authenticator/wiki/Key-Uri-Format#issuer

例如:

https://chart.googleapis.com/chart?chs=200x200&cht=qr&chl=otpauth%3A//totp/User%2540Realm%3Fsecret%3DKO5DE2YD3Q2ZXEOO%26issuer%3DIssuer%2520Name&choe=UTF-8

于 2017-07-07T00:37:43.183 回答
-3

FTW,使用qrenco。您可以使用 cURL 从命令行执行此操作,或者仅在浏览器中执行此操作。无需安装任何东西。免费无限服务。它的一个示例用法是:

curl -Ls -X GET 'https://qrenco.de/otpauth://totp/stackoverflow:StackOverFlowUSER?secret=U29tZSBrZXkgZnJvbSBzb21lIHdlYnNpdGUK?issuer=stackoverflow'

如果你喜欢使用命令行,你可以在你的 shell 的 rc 文件中把它变成一个函数。

于 2022-01-29T04:03:47.697 回答