能否从带时间戳的TOTP码推导共享密钥?攻击者破解可行性分析
TOTP共享密钥推导问题
假设攻击者获取了某用户通过认证器应用生成的TOTP验证码列表,同时掌握了这些验证码生成对应的时间戳:
code timestamp 182038 1671981349726 774903 1671981333299 238982 1671981328102
问题:攻击者是否可利用上述信息推导或推断出共享密钥?或者能否将密钥的可能取值范围缩小至足够小,进而通过暴力破解完成剩余步骤?
分析与结论
TOTP核心逻辑
TOTP的生成依赖共享密钥K、固定时间步长T(标准为30秒),计算HMAC-SHA1(K, floor(timestamp/1000 / T))后,从HMAC结果中截取6位数字作为验证码。时间步转换与数据矛盾
将给定时间戳转换为标准30秒步长的时间步值:- 1671981349726 →
floor(1671981349.726/30) = 55732711 - 1671981333299 →
floor(1671981333.299/30) = 55732711 - 1671981328102 →
floor(1671981328.102/30) = 55732710
前两个验证码对应同一个时间步,却生成了不同结果——这违反TOTP规则,说明数据存在错误(比如时间戳与验证码不匹配、不属于同一密钥),无效数据无法支撑推导。
- 1671981349726 →
假设数据有效(修正矛盾后)的推导可能性
- 每组(时间步,验证码)对应一个约束:HMAC-SHA1结果截取后必须等于给定验证码。一个6位验证码约对应20位信息熵(
2^20≈100万,匹配验证码范围)。 - 3组有效约束可将160位标准SHA1密钥的可能范围从
2^160缩小到2^(160-60)=2^120,这个量级属于天文数字,当前计算能力下暴力破解完全不可行。 - 仅当密钥长度远短于标准(比如80位),3组数据才能将范围缩小到
2^(80-60)=2^20(约百万级),此时暴力破解才具备可行性,但这种情况不符合TOTP规范设计。
- 每组(时间步,验证码)对应一个约束:HMAC-SHA1结果截取后必须等于给定验证码。一个6位验证码约对应20位信息熵(
最终结论
现有矛盾数据无法用于推导共享密钥;即使修正数据,缩小后的密钥范围量级依然过大,无法通过暴力破解获取密钥。
内容的提问来源于stack exchange,提问作者GladstoneKeep
相关产品推荐
相关产品推荐

