找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4874

积分

0

好友

666

主题
发表于 1 小时前 | 查看: 2| 回复: 0

Google Authenticator双因素认证(2FA)工作原理流程图

Google Authenticator 大概是开发者最常接触的双因素认证(2FA)工具之一了。每次登录账号时,除了密码,还要在手机上打开这个应用,输入一个不断跳动的6位数字,而这个数字的有效期只有短短30秒。

很多人都在用,但你是否想过,这看似简单的6个数字,背后是怎么运转的?它的安全性究竟如何保障?

两个核心阶段

整个流程可以清晰地分为两个主要阶段:

  1. 开启双因素认证:完成服务端与客户端的密钥同步。
  2. 使用认证器登录:利用同步的密钥进行动态密码验证。

阶段一:如何启用双因素认证?

假设用户 Bob 想要为一个网站启用两步验证,过程是这样的:

  1. Bob 在网站设置中点击“启用Google Authenticator”。
  2. 网站前端向认证服务发起请求,申请一个用于绑定的密钥。
  3. 认证服务生成一个唯一的、高强度的密钥(Secret Key),并将其加密后存储到数据库中。
  4. 服务端返回一个特殊的 URI(统一资源标识符)给前端。这个 URI 包含了三个关键信息:
    • Issuer(服务商):例如“MyWebsite”
    • User(用户名):例如“Bob”
    • Secret Key(密钥):例如“X5CTBOMEYE3TXIIS”
  5. 前端将这个 URI 编码成一个二维码,展示在网页上。
  6. Bob 打开手机上的 Google Authenticator App(或浏览器插件),扫描这个二维码。App 会解析出 URI 中的信息,并将密钥安全地存储在本地。

这里的安全关键点

  • 传输安全:整个请求-响应过程通过 HTTPS 加密通道进行,防止密钥在传输中被窃听。
  • 存储安全:密钥在服务端的数据库和用户的客户端设备上,都是以加密形式存储的。

阶段二:登录时如何验证?

当 Bob 再次登录该网站时,验证流程启动:

  1. Bob 首先输入用户名和静态密码。
  2. 与此同时,他手机上的 Authenticator 应用,正在后台以30秒为周期,使用 TOTP算法(基于时间的一次性密码算法),结合本地存储的密钥和当前时间戳,动态计算出一个6位数字密码(例如“032511”)。
  3. 网站提示输入动态码,Bob 将 Authenticator 上显示的这6位数字输入网页。
  4. 前端将 Bob 输入的动态密码发送到后端的认证服务。
  5. 认证服务从数据库中取出 Bob 账户对应的密钥,使用完全相同的TOTP算法,结合当前服务器时间,也生成一个6位数字密码。
  6. 服务端将自己计算出的密码与 Bob 输入的密码进行比对。如果两者一致,则验证通过,允许登录。

安全性分析:它真的安全吗?

密钥会不会在传输或存储中被盗?

  • 如前所述,密钥的传输依赖 HTTPS 加密,能有效抵御中间人攻击。
  • 密钥在服务端数据库和客户端设备上都进行了加密存储,即使数据被非法访问,也很难直接获取明文密钥。

只有6位数字,会不会被暴力猜解?

我们来算一笔账:

  • 6位数字的组合有 10^6 = 1,000,000 种可能。
  • 每个动态码的有效期只有 30秒
  • 假设黑客想在单个有效期内暴力破解,他需要每秒尝试 1,000,000 / 30 ≈ 33,334 次。
  • 在实际的在线认证场景中,服务端会对频繁的错误尝试进行限制(如锁定、验证码等),使得这种高速率的猜解几乎不可能成功。因此,这6位动态码在时效和策略的双重保护下,安全性非常高。

TOTP 算法:背后的核心引擎

TOTP,全称 Time-based One-Time Password(基于时间的一次性密码),是整个机制的基石。

其核心思想非常简单却非常有效:

  1. 共享密钥:服务端和客户端预先共享同一个密钥(在阶段一完成)。
  2. 时间同步:双方都拥有一个同步的、大致准确的时间源(通常使用 Unix 时间戳,以30秒或60秒为一个时间步长)。
  3. 相同算法:双方使用相同的算法(通常是 HMAC-SHA1),将“密钥”和“当前时间步长值”进行计算。
  4. 输出一致:只要密钥相同、时间步长一致,算法就会产生完全相同的输出结果,再经过截断处理得到我们看到的6位数字。

正是因为时间在流逝,密码才不断变化;也因为算法是确定的,双方才能独立地算出同一个密码。

总结

Google Authenticator 的工作原理,本质上是在密码学层面建立了一个基于时间的、同步的“密码本”。通过安全的密钥分发(阶段一)和可靠的 TOTP算法(阶段二),它在“你知道的”(密码)之外,增加了一个“你拥有的”(手机及动态码)验证维度,从而显著提升了账户的安全性。

理解了这套机制,你不仅能更放心地使用2FA,在需要为自家系统实现类似功能时,也能抓住关键。在 云栈社区 的安全板块,你可以找到更多关于认证协议、加密技术和实战案例的深度讨论。




上一篇:前端AI工具实践:10分钟快速构建WebAssembly图片背景移除网页
下一篇:知识管理平台360doc个人图书馆宣布关停,坚守数据安全底线成绝唱
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-11 07:20 , Processed in 0.805437 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表