深色模式
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 │
│ │ 相同 = 验证通过│ │
└─────────────────┘ └─────────────────┘- 你和服务器共享一个密钥(在你首次设置时通过扫描二维码传递)
- 把密钥和当前时间(精确到 30 秒区间)放在一起
- 通过哈希运算(通常是 HMAC-SHA1)生成一串数据
- 从中截取 6 位数字作为验证码
因为你和服务器拥有同一个密钥、同一个时间,所以会生成相同的验证码。服务器只需要对比两个验证码是否一致,就能确认你的身份。
为什么每 30 秒变一次
时间被分成了 30 秒一段的"时间窗口"。在同一个 30 秒窗口内,生成的验证码相同;窗口切换后,验证码就变了。服务器通常会同时接受前后各一个窗口的验证码,容忍几十秒的时钟误差。
HOTP:基于计数器的动态口令
HOTP(HMAC-based One-Time Password,基于 HMAC 的一次性密码)是 TOTP 的前身。它不依赖时间,而是依赖一个计数器。
每次你按下按钮生成一个新密码时,计数器加 1。服务器端也维护同一个计数器。只要计数器同步,验证就能通过。
第 1 次按键:密钥 + 计数器(1) → 384721
第 2 次按键:密钥 + 计数器(2) → 519034
第 3 次按键:密钥 + 计数器(3) → 847263HOTP 的优势是不需要时间同步——设备不需要知道当前的准确时间。但缺点是如果你多按了几次却没有在服务器上验证,计数器可能会不同步,需要重新对齐。
| 对比 | TOTP | HOTP |
|---|---|---|
| 触发方式 | 自动,每 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 App | YuerKey |
|---|---|---|
| 设备依赖 | 依赖手机 | 独立硬件设备 |
| 密钥存储 | 手机存储(可能被恶意软件读取) | 硬件加密存储(无法提取) |
| 离线使用 | 可以 | 可以 |
| 手机丢失影响 | 所有 OTP 丢失 | 不受影响 |
| 物理确认 | 无(打开 App 即可看到) | 需要物理按键确认 |
| 跨设备使用 | 绑定单台手机 | 插入任何电脑即可使用 |
| 备份恢复 | 依赖云备份(部分 App 不支持) | 设备级加密备份 |
总结一句话:手机 App 是软件方案,安全性取决于手机的安全性;YuerKey 是硬件方案,密钥在物理层面与外界隔离。 这是本质的区别。