TOTP 与 HOTP
基于时间的一次性密码
TOTP 与 HOTP 是 CoddyKit 上的免费 Cyber Security Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cyber Security Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cyber Security Academy 课程共包含 4 节课。
一次性密码
一次性密码(OTP)是只对单次登录或短时间窗口有效的代码。
生成这类代码的两种标准算法是:HOTP和TOTP。
共享密钥
这两种算法都从一个共享密钥开始,该密钥只有服务器和您的身份验证器应用知道。
它通常在设置期间以二维码的形式提供,并存储在双方。
HOTP:基于计数器
HOTP(基于 HMAC 的 OTP)使用 HMAC 将共享密钥与计数器组合,然后将结果截短为短数字代码。
每生成一个代码,计数器就递增一。
HOTP = Truncate( HMAC-SHA1(secret, counter) )TOTP:基于时间
TOTP(基于时间的 OTP)是一种 HOTP,其计数器等于当前时间除以固定的时间步长,通常为 30 秒。
由于时间始终向前推进,双方无需跟踪手动计数器也能保持同步。
T = floor( (current_unix_time) / 30 )
TOTP = Truncate( HMAC-SHA1(secret, T) )30 秒窗口
TOTP 代码通常每30 秒更换一次。如此短的有效时长限制了被窃取代码的可用时间。
这就是身份验证器应用会显示倒计时条的原因。
时钟偏差容忍度
设备时钟会略有偏差。为避免拒绝有效代码,服务器会接受当前窗口之前和之后一个时间步长内的代码。
窗口过大会削弱安全性,因此窗口会保持较小。
HOTP 同步
如果生成的代码未被使用,HOTP 可能发生偏移(设备上的计数器前进了,而服务器上的没有前进)。
服务器会允许一个较小的前瞻窗口来重新同步,但较大的偏差需要手动重新同步。
otpauth 统一资源标识符
二维码会编码一个描述密钥和参数的otpauth 统一资源标识符。
otpauth://totp/Example:alice@example.com?secret=JBSWY3DPEHPK3PXP&issuer=Example&period=30TOTP 为何更胜一筹
TOTP 比 HOTP 常见得多,原因包括:
- 不需要处理计数器偏移或重新同步。
- 代码会自然地自行过期。
- 支持离线工作;生成代码不需要网络。
优势与局限
TOTP 比单独使用密码有很大提升,但它仍然容易遭受钓鱼攻击:仿冒网站可以诱骗用户输入当前有效的代码。
硬件密钥(下一课介绍)可以抵御这种攻击。
备份与恢复
如果丢失存储共享密钥的设备,您可能会无法登录。良好的做法包括:
- 保存设置时发放的恢复代码。
- 安全地备份共享密钥,或注册第二个身份验证器。
快速检查
HOTP 与 TOTP 的关键区别是什么?
回顾
您了解了 OTP 算法的工作原理。
- 二者都建立在共享密钥和 HMAC 之上。
- HOTP 使用计数器;TOTP 使用时间。
- TOTP 代码每约 30 秒失效一次,但仍然容易受到网络钓鱼攻击。
- 请妥善保管恢复代码。
接下来,我们将探索推送确认和硬件密钥。
常见问题解答
「TOTP 与 HOTP」课时是免费的吗?
是的 — 「TOTP 与 HOTP」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cyber Security Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cyber Security Academy 课程共包含 4 节课。
「TOTP 与 HOTP」这节课中我会学到什么?
基于时间的一次性密码 你通过在浏览器中直接运行的动手代码来练习 Cyber Security Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cyber Security Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cyber Security Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「TOTP 与 HOTP」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cyber Security Academy 课中编写并运行代码吗?
能。每节 Cyber Security Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。