哈希算法在TOTP中做什么
TOTP以HOTP为基础,把共享密钥和时间计数值交给HMAC计算,再从结果中截取数字验证码。SHA-1、SHA-256和SHA-512指的是HMAC内部使用的哈希函数。
它们不会改变验证码是否按时间刷新,但会改变每个时间窗口的计算结果。相同密钥和时间使用不同算法,得到的验证码完全不同。
为什么SHA-1仍常见
许多人把一般哈希碰撞讨论直接套用到HMAC-SHA-1上,但TOTP使用的是带密钥的HMAC,并不是用SHA-1给文件做无密钥摘要。风险判断不能只看算法名称。
主流服务长期以HMAC-SHA-1作为兼容默认值。RFC 6238同时给出了SHA-1、SHA-256和SHA-512测试向量。
用户应该如何选择
用户不应自行猜测或升级算法,应严格使用服务端提供的二维码或otpauth配置。只有服务和验证器都支持同一参数时,选择才有意义。
如果手动录入后一直错误,先检查算法、验证码位数和周期是否与服务设置一致。
服务开发者的迁移原则
- 新配置必须通过二维码或标准URI明确传递算法参数。
- 迁移前验证常见身份验证器是否真正支持目标算法。
- 不要在用户不知情时直接改变已有密钥的算法。
- 保留恢复路径,并对验证码尝试次数和重放进行限制。
算法不是唯一安全因素
TOTP整体安全还依赖密钥随机性、密钥存储、TLS、重试限制、服务器验证窗口和账户恢复流程。再长的哈希输出也无法弥补密钥被公开。
对高风险账户,优先采用抗钓鱼的Passkey或硬件安全密钥,通常比只调整TOTP哈希算法更有实际价值。
常见问题
可以把SHA-1手动改成SHA-256吗?
不能单方面修改。验证器与服务器必须使用相同算法,否则生成的验证码不会匹配。
算法越长,6位验证码就越安全吗?
验证码仍只有有限组合,实际安全性很大程度取决于重试限制、有效窗口和密钥保护,不能只看哈希名称。