【问题标题】:How to generate a QR Code for Google Authenticator that correctly shows Issuer displayed above the OTP?如何为 Google Authenticator 生成正确显示在 OTP 上方显示的 Issuer 的 QR 码?
【发布时间】:2015-12-29 23:47:47
【问题描述】:

警告:与第三方共享您的 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

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

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

谁能给我一个线索?

【问题讨论】:

  • 我认为使用在线生成器来进行这种思考是不明智的。毕竟,您将所有登录信息和密码发布到网络上。因此,找到此信息(例如在日志文件中)的每个人都可以登录您的帐户。
  • @Ber,不知道这里有什么问题。即使 Google 记录了您提交到日志文件的所有内容,该日志文件将包含的所有内容都是 SECRET。好的,但不知道什么服务器、什么用户名、什么密码、帐户类型等......哪里有安全威胁?
  • 威胁是您将密钥发布给第三方,这违反了十几个安全最佳实践,使密钥是“秘密”的假设无效,并且很可能违反了您组织的安全策略.在身份验证中,所有剩余信息都可以被猜测或从其他来源获得——例如在 Google 的情况下为 Referrer 标头——这正是为什么秘密应该是秘密的原因。
  • 是的,您还可以方便地共享用户名 (Example:alice@google.com)

标签: qr-code google-authenticator


【解决方案1】:

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

只要是在本地处理您的数据,就可以使用任何二维码生成器。

切勿将在线二维码生成器用于 MFA 机密

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

pip install qrcode

然后:

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

【讨论】:

【解决方案2】:

我使用不同的方式使用本地 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 会话时,您的秘密就不会出现任何痕迹。

【讨论】:

  • 请注意 David Thomas 在下面的回答(这里确实应该是评论)包括 issuergist.github.com/ragusa87/f9d82ca631df0d4d32a0 这个脚本。
  • 这比使用在线生成器安全得多。
  • 除非此方法通过终端中的命令history 以纯文本形式显示。
  • @DanielHallgren 你是对的。避免这种情况的一种简单方法是使用空格开始命令。
【解决方案3】:
【解决方案4】:

警告:与第三方共享您的 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

而且它工作正常。

【讨论】:

  • 投了反对票,因为虽然这可能会解决问题,但这违反了添加额外安全层然后与未知方共享您的秘密的全部要点。没有人应该这样做。
猜你喜欢
  • 2020-06-30
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
  • 2021-07-23
  • 2021-03-02
  • 2012-04-30
  • 2016-02-07
  • 2019-04-18
相关资源
最近更新 更多