用户登录时提交了当前30秒时间步生成的TOTP验证码,服务器验证成功。攻击者在该时间步结束前截获并再次提交完全相同的验证码。安全的验证系统应()。
TOTP的移动因子来自时间步,同一密钥在同一时间步会生成相同值。允许有限前后窗口是为了兼顾网络延迟和时钟漂移,但同一用户某个时间步的口令一旦成功使用,验证端不应再次接受,否则仍存在重放机会。
选项分析
错误。时间有效不等于允许重复成功,截获者可在窗口内重放。
正确。按用户记录已成功验证的时间步,可拒绝同一口令二次使用。
错误。窗口越大,攻击者可利用的时间越长。
错误。每个证明者应使用独立密钥,公共密钥会放大泄露影响。
本题为什么容易错
不少同学只背‘验证码30秒变化一次’,于是默认30秒内都合法。真正的安全判断还要多问一句:这个时间步是否已经成功消费过。
简短答案
30秒内同一个TOTP验证码被提交两次,服务器都应该接受吗,正确答案是 B(记录该用户已成功使用的时间步,拒绝同一验证码在成功验证后的再次使用)。TOTP的移动因子来自时间步,同一密钥在同一时间步会生成相同值。允许有限前后窗口是为了兼顾网络延迟和时钟漂移,但同一用户某个时间步的口令一旦成功使用,验证端不应再次接受,否则仍存在重放机会。
易混淆概念对比表
| 概念 | 本题判断 | 区别要点 | 记忆提示 |
|---|---|---|---|
| 只要仍在30秒内就无限次接受 | 本题干扰项 | 错误。时间有效不等于允许重复成功,截获者可在窗口内重放。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 记录该用户已成功使用的时间步,拒绝同一验证码在成功验证后的再次使用 | 本题正确答案 | 正确。按用户记录已成功验证的时间步,可拒绝同一口令二次使用。 | 看到题干核心场景时优先联想到它 |
| 把30秒窗口扩大到24小时,减少登录失败 | 本题干扰项 | 错误。窗口越大,攻击者可利用的时间越长。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 把所有用户配置为同一个TOTP共享密钥 | 本题干扰项 | 错误。每个证明者应使用独立密钥,公共密钥会放大泄露影响。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
本题易混淆选项怎么区分
- 只要仍在30秒内就无限次接受:错误。时间有效不等于允许重复成功,截获者可在窗口内重放。
- 把30秒窗口扩大到24小时,减少登录失败:错误。窗口越大,攻击者可利用的时间越长。
- 把所有用户配置为同一个TOTP共享密钥:错误。每个证明者应使用独立密钥,公共密钥会放大泄露影响。
知识点详解
TOTP以共享密钥和时间步作为HMAC输入,常见时间步为30秒。验证端可检查当前及少量相邻时间步来容忍延迟,但窗口越宽,暴力猜测和截获利用机会越大。
备考速记
时间窗口允许迟到,不允许一张票进场两次。
TOTP 在多因素认证场景中的作用
验证成功后可记录用户最近接受的时间步,后续提交若不大于该值则拒绝;同时保护种子、限制尝试次数,并使用TLS减少中途窃取。
同类题怎么考
- 判断同一TOTP在有效窗口内能否重复使用。
- 分析扩大校验窗口对安全性和可用性的影响。
TOTP 在信息安全工程师软考中的考法
看到时间同步问题,考虑有限容差;看到同码二次提交,优先考虑成功消费记录和拒绝重放。
解题思路
题目刻意强调‘同一时间步内第二次提交’。验证码尚未过时,不代表仍可复用;一次性口令的关键就在成功后作废,因此选B。
考点定位
可接受时间窗口解决时钟偏差,一次性使用记录解决同窗口重放;两者目标不同,不能用扩大窗口代替防重放。
易错提醒
- 为兼容手机时间不准而接受过多前后时间步。
- TOTP种子以明文写入日志或备份。
- 只限制验证码错误次数,却不限制账号和来源的尝试频率。
备考提示
- 把生成时间步、允许偏差、成功后防重放画成三段。
- 若要连续练认证题,可在书木兰软考题库 https://www.shumulan.com/ 把TOTP、短信验证码、WebAuthn和会话题分组刷,错因更容易看清。
你可能还想了解
- TOTP验证码30秒内能用两次吗?
- TOTP怎样防止重放攻击?
- 验证码校验窗口越大越好吗?
本文小结
TOTP可容忍有限时钟偏差,但同一用户某时间步的验证码成功使用后必须拒绝再次提交,防止窗口内重放。