设置 2 因素身份验证时显示的“秘密”有什么用?

信息安全 验证 多因素 谷歌 一次性密码
2021-08-25 01:06:48

当您拍摄二维码照片以在非 Google 网站上设置 2 Factor Authentication 时显示的“秘密”的目的是什么?

你为什么需要它?

如果您保存它,这是否会破坏 2 Factor Auth 的全部目的,因为任何拥有密码的人都可以获得登录码?

4个回答

Google Authenticator 支持TOTPHOTP算法。

在这两种算法中,都需要在服务器和客户端之间共享一个秘密才能成功生成一次性密码。我建议您阅读算法的相应 RFC(或我的答案以更好地理解它。

是的,如果攻击者设法获得共享秘密,算法就会失败。但是,这不是很实用。设置算法时,秘密仅以 QR 码的形式显示一次。据推测,当这种情况发生时,您会坐在屏幕前,如果有人可疑走上前并开始用手机扫描二维码,您会注意到这一点。如果是这种情况,您可以采取很多物理措施。

一旦秘密被共享,它就会存储在服务器和客户端(在这种情况下是你的手机)上。至少在 Android 的情况下,秘密未加密地存储在 SQLi 数据库文件中。但是,除非您的设备已植根,否则该文件只能由 Authenticator 应用程序访问,因此您不太容易拿到它。在 iOS 设备上它应该同样困难,如果不是更难的话。如果攻击者设法破坏服务器,您会有更大的担忧。

所以是的,如果秘密泄露,算法就会失败。但秘密泄露并不是一件容易的事情。无论如何,这是因素身份验证。你还有其他因素可以保护你。

秘密(或种子)是一次性密码 OTP 所依据的值。您(或者更确切地说,您的密码生成器,在您的情况下是您的 Google 身份验证器)知道该秘密值是必不可少的。您和服务器都必须知道该值。

您正在扫描的 QR 码秘密值,只是以您的相机可以理解的方式进行编码,以便您更轻松地将其输入到手机中。如果您的手机没有摄像头,或者无法扫描二维码,则必须手动输入密码值。这就是他们向您展示价值的原因。他们给你看,当他们给你看时,你应该确保周围没有人。

Quibble:您实际上并没有在这里设置双因素身份验证,而是设置了一个身份验证因素,即“您拥有什么”类型的身份验证因素。这意味着与密码相结合,密码是“你知道的”身份验证因素,为您提供双重身份验证。

“你所拥有的”旨在成为移动设备。用户被认证为拥有该移动设备的方式是请求用户输入该设备显示的代码。为了让此代码对设备进行身份验证,它必须依赖于仅存在于设备、身份验证服务器(它是共享机密)上的某个秘密值,而其他任何地方都没有。

秘密值在服务器上生成,需要传输到移动设备。QR 码包含该秘密值。

仅当您设置此基于设备的身份验证时才会显示机密值。您应该在安全的环境中执行此操作,例如在家中,没有人可以肩负冲浪和获取秘密。任何拥有秘密的人都可以获得登录代码,但只有合法用户才应该拥有秘密。

TOTP 身份验证(类似于 Google Authenticator 使用的身份验证)通过使用仅存在于您的手机和身份验证服务器上的预共享密钥将时间戳转换为 6 位数字来工作。简单地表达这一点,f(timestamp, secret) = 6-digit code. 如果第 3 方知道该秘密,是的,2 因素身份验证的目的就失败了,但从便携式电话中获取此秘密并非易事。