像 Google Authenticator 这样的一次性密码生成器与拥有两个密码有何不同?

信息安全 多因素 谷歌 顶部
2021-09-04 09:38:17

Google Authenticator 使用TOTP 算法生成您的一次性密码 (OTP)。TOTP 的工作原理是这样的:当客户端向服务器注册时,服务器生成一个密钥并与客户端(您)共享。使用共享密钥和当前时间戳,每 30 秒生成一个新密码。

如果有人拥有共享密钥,那么他们可以使用 TOTP 算法自己生成 OTP。这不是类似于密码吗?它不会减少到有两个密码 - 一个是您用于登录的密码,另一个是您和服务器之间的共享密钥?

2个回答

每次使用密码时都会显示密码:如果您有两个密码并将它们输入到欺诈性 Web 表单中,它们都会被盗。

无法从单个 OTP(甚至是一组 OTP)计算共享密钥,因此被盗的 OTP 仅在有限的时间内有效。共享密钥在身份验证期间永远不会被传输,因此窃取它需要不同的攻击向量:在初始化期间访问保存它的设备或复制它(例如它的二维码)。

** 向后计算共享秘密是非常不切实际的,因为它是一种单向算法。此外,最小密钥长度为 128 位,该算法仅产生 6 个数字,即 ~20 位 OTP。这意味着对于每个 OTP 都会有大量潜在的共享秘密,并且只有通过蛮力才能找到一个匹配项,即每 30 秒计算 2^128 个哈希值并排除每个不匹配的 OTP。

OTP 是一种在您要求某人了解某些信息时(例如您了解它),不需要信任某人提供您的密码的一种方式。在大多数实现中,无论如何这都是事情的工作方式。密码不会在网络上传递。加盐哈希密码是。问题是你不一定相信每个人都是这样做事的。诸如谷歌之类的服务只是从您登录的地方迈出这一步并自己做。

所以你是对的。同样的事情发生,没有什么真正改变。唯一的区别是你信任,但这很重要。