Skip to content

OTP 动态口令

你可能用过手机上的 Google Authenticator 或 Microsoft Authenticator——每隔 30 秒刷新一次的 6 位验证码。这就是 OTP(One-Time Password,一次性密码)。YuerKey 可以替代手机 App 来管理这些验证码,而且更安全、更可靠。

什么是 OTP

OTP(One-Time Password,一次性密码),顾名思义,是一种只能使用一次的密码。每次生成的密码都不同,用过就失效。

OTP 解决了一个根本问题:重放攻击。如果有人在你输入密码时偷偷记录下来,他可以在之后用这个密码登录你的账户。但 OTP 是一次性的——即使被窃听,过了那一刻就失效了,攻击者拿到的只是一串没用的数字。

OTP 有两种主要类型:基于时间的 TOTP 和基于计数器的 HOTP。

TOTP:基于时间的动态口令

TOTP(Time-based One-Time Password,基于时间的一次性密码)是目前最常见的 OTP 类型。你在手机 Authenticator App 上看到的那些每 30 秒刷新一次的 6 位数字,就是 TOTP。

工作原理

TOTP 的原理其实很简单:

     你的设备(YuerKey)                    服务器(如 Google)
     ┌─────────────────┐                  ┌─────────────────┐
     │                 │                  │                 │
     │ 共享密钥: ABC123 │                  │ 共享密钥: ABC123 │
     │ 当前时间: 12:00  │                  │ 当前时间: 12:00  │
     │                 │                  │                 │
     │ ABC123 + 12:00  │                  │ ABC123 + 12:00  │
     │      ↓          │                  │      ↓          │
     │  哈希运算        │                  │  哈希运算        │
     │      ↓          │                  │      ↓          │
     │  截取 6 位       │                  │  截取 6 位       │
     │      ↓          │                  │      ↓          │
     │   482916        │  ──── 对比 ────  │   482916        │
     │                 │     相同 = 验证通过│                 │
     └─────────────────┘                  └─────────────────┘
  1. 你和服务器共享一个密钥(在你首次设置时通过扫描二维码传递)
  2. 把密钥和当前时间(精确到 30 秒区间)放在一起
  3. 通过哈希运算(通常是 HMAC-SHA1)生成一串数据
  4. 从中截取 6 位数字作为验证码

因为你和服务器拥有同一个密钥、同一个时间,所以会生成相同的验证码。服务器只需要对比两个验证码是否一致,就能确认你的身份。

为什么每 30 秒变一次

时间被分成了 30 秒一段的"时间窗口"。在同一个 30 秒窗口内,生成的验证码相同;窗口切换后,验证码就变了。服务器通常会同时接受前后各一个窗口的验证码,容忍几十秒的时钟误差。

HOTP:基于计数器的动态口令

HOTP(HMAC-based One-Time Password,基于 HMAC 的一次性密码)是 TOTP 的前身。它不依赖时间,而是依赖一个计数器

每次你按下按钮生成一个新密码时,计数器加 1。服务器端也维护同一个计数器。只要计数器同步,验证就能通过。

第 1 次按键:密钥 + 计数器(1) → 384721
第 2 次按键:密钥 + 计数器(2) → 519034
第 3 次按键:密钥 + 计数器(3) → 847263

HOTP 的优势是不需要时间同步——设备不需要知道当前的准确时间。但缺点是如果你多按了几次却没有在服务器上验证,计数器可能会不同步,需要重新对齐。

对比TOTPHOTP
触发方式自动,每 30 秒更新手动,按一次生成一个
需要时钟同步
验证码有效期30 秒直到下一次生成
同步风险时钟偏差计数器偏移
常见程度非常广泛较少使用

其他 OTP 变体

除了标准的 TOTP 和 HOTP,一些服务使用了自己的 OTP 变体。YuerKey 全部支持:

Steam Guard

Valve 的 Steam 游戏平台使用一种定制的 OTP 方案。与标准 TOTP 的 6 位纯数字不同,Steam Guard 生成 5 个字母数字字符(如 V8K3R)。底层原理相似,只是最终的编码方式不同。

mOTP(Mobile OTP)

一种较早期的移动端 OTP 方案。特点是需要输入一个短 PIN 码参与运算——验证码由密钥、当前时间和你的 PIN 三者共同生成。即使有人拿到了你的设备,不知道 PIN 也无法生成有效的验证码。

Yandex OTP

俄罗斯互联网巨头 Yandex 使用的自定义 TOTP 变体。与标准 TOTP 的主要区别是使用 SHA-256 哈希算法(而非 SHA-1),并且验证码格式略有不同(8 位数字)。

使用场景

替代手机 Authenticator App

你现在可能在手机上的 Google Authenticator 或 Microsoft Authenticator 中存储了几十个服务的 OTP 密钥。把它们迁移到 YuerKey 上有几个好处:

  • 不怕手机丢失:手机丢了,App 里的验证码也没了。YuerKey 是独立设备,不受影响
  • 不怕手机故障:手机系统升级出问题、App 闪退——这些都不会影响 YuerKey
  • 不怕手机被黑:手机恶意软件可以截取 Authenticator App 的屏幕。硬件设备中的密钥无法被远程读取
  • 换手机无烦恼:换新手机时不用担心转移 Authenticator 数据的问题

离线也能用

TOTP 验证码的生成完全在本地完成,不需要网络连接(前提是服务器的时间和 YuerKey 的时间基本一致)。在没有手机信号、没有 WiFi 的环境下(比如地下室机房),YuerKey 照样能生成有效的验证码。

多账户集中管理

一个 YuerKey 可以存储多个服务的 OTP 密钥。通过设备屏幕选择对应的服务,查看当前的验证码——不需要在手机上翻找 App、滑动列表。

为什么用 YuerKey 管理 OTP

特性手机 Authenticator AppYuerKey
设备依赖依赖手机独立硬件设备
密钥存储手机存储(可能被恶意软件读取)硬件加密存储(无法提取)
离线使用可以可以
手机丢失影响所有 OTP 丢失不受影响
物理确认无(打开 App 即可看到)需要物理按键确认
跨设备使用绑定单台手机插入任何电脑即可使用
备份恢复依赖云备份(部分 App 不支持)设备级加密备份

总结一句话:手机 App 是软件方案,安全性取决于手机的安全性;YuerKey 是硬件方案,密钥在物理层面与外界隔离。 这是本质的区别。