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 是硬件方案,密钥在物理层面与外界隔离。 这是本质的区别。