谷歌身份验证器(或其他类型的双因素身份验证器)如何工作?
谷歌身份验证器是一种基于软件的身份验证器,可实现两步验证服务(2FA)。下图提供了详细信息。
图片
其中涉及两个阶段:
- 阶段 1 - 用户启用 Google 两步验证
- 阶段 2 - 用户使用验证器登录
第一阶段
- 步骤 1 和 2:Bob 打开网页以启用两步验证。前端请求一个密钥。验证服务会为 Bob 生成密钥,并将其存储在数据库中。
- 步骤 3:验证服务向前端返回一个 URI。URI 由密钥发放者、用户名和秘钥组成。URI 以二维码的形式显示在网页上。
- 步骤 4:Bob 使用谷歌身份验证器扫描生成的 QR 码。密钥存储在验证器中。
第二阶段
- 步骤 1 和 2:Bob 想通过 Google 两步验证登录一个网站。为此,他需要密码。每隔 30 秒,谷歌身份验证器会使用 TOTP(基于时间的一次性密码)算法生成一个 6 位数的密码。Bob 使用密码进入网站。
- 步骤 3 和 4:前台将 Bob 输入的密码发送到后台进行身份验证。验证服务从数据库中读取密钥,并使用与客户端相同的 TOTP 算法生成一个 6 位数的密码。
- 步骤 5:身份验证服务比较客户端和服务器生成的两个密码,并将比较结果返回前端。只有当两个密码匹配时,Bob 才能继续登录。
问题1: 这种身份验证机制是安全的吗?别人能否获取密钥?
我们需要确保使用 HTTPS 传输密钥。身份验证器客户端和数据库会存储密钥,我们需要确保密钥经过加密。
问题2: 6 位数密码会被黑客猜到吗?
不会。密码有 6 位数字,因此生成的密码有 100 万种可能的组合。此外,密码每 30 秒更改一次。如果黑客想在 30 秒内猜出密码,他们每秒需要输入 30,000 个密码组合。