如何为 Google Authenticator 生成 QR Code 以正确显示 OTP 上方显示的 Issuer?

How to generate a QR Code for Google Authenticator that correctly shows Issuer displayed above the OTP?

Warning: sharing your TOTP seed with third-parties breaks the very basic assumption of multi-factor authentication that the TOTP seed is secret.

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

当我按照该页面中的示例操作时:

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

而我'splice'把它变成了Google排行榜URL,因此:

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

它会显示一个有效的二维码,如果我在 phone 上用我的 Google 身份验证器应用扫描它,它就会开始生成有效的一次性密码。

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

谁能给我线索?

Warning: sharing your TOTP seed with third-parties breaks the very basic assumption of multi-factor authentication that the TOTP seed is secret.

刚刚弄明白了。

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

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

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

它工作正常。

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

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

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

如果您担心 SECRET 出现在 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 会话时,您的秘密就不会出现了。

请注意,Google 身份验证器的较新版本将使用 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

建议使用 Google 图表的回复从信息安全的角度来看绝对糟糕。这实质上是与没有法律义务的 third-party 公司共享 TOTP secret 以及您的用户名 (alice@google.com) 和发行人 (Example)保守秘密,并通过 GET 请求做到这一点!这样做不仅违反了 multi-factor 身份验证的每一个假设,而且很可能违反了您组织的信息安全政策。它使 MFA 增加的任何价值无效,因为在密码泄露的情况下保护您免于破坏您的帐户的唯一因素本身就被破坏了。

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

切勿使用在线 QR 生成器获取 MFA 机密

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

pip install qrcode

然后:

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