折腾河南省高招二步验证:遇到国密 SM3 算法该如何破解?
今天想跟大家分享一个特别“搞心态”的折腾经历。事情起因是我为了省事,想把各个平台的 2FA(两步验证)动态口令都集中在 Bitwarden 里管理。毕竟谁也不想登录个账号还得在手机上切来切去翻应用。
折腾了半天,各种抓包工具轮番上阵,耗时三个多小时,终于把河南省高招平台(HEEA)那个 TOTP 的密钥种子给扒下来了。当时心里那个美啊,想着马上就能导入 Bitwarden,世界清静了。
抓包结果显示,河南省高招平台使用的 TOTP 算法是 SM3,而非标准的 SHA。
结果一看算法参数——SM3。
那一刻,悬着的心终于死了。😱
SM3 是个什么鬼?
咱们平时接触到的 TOTP 验证码,不管是 Google Authenticator 还是微软的 Authenticator,底层基本都是基于 SHA-1 或者 SHA-256 这类国际标准哈希算法。这是 RFC 标准规定的,各家大厂都遵守,所以通用性极强。
但 SM3 不同,它是咱国家自主研发的商用密码杂凑算法,属于“国密”标准。简单理解,它和 SHA-256 有点像,但计算逻辑完全不一样,是另一套体系。
这就好比你辛辛苦苦配了一把钥匙,结果发现锁芯形状是特制的,你手里的通用钥匙根本插不进去。
为什么 Bitwarden 搞不定?
这其实不是 Bitwarden 的问题,也不是你操作失误。目前市面上绝大多数主流密码管理器和 TOTP 验证器,都只支持标准的 HMAC-SHA1/256/512。对于 SM3 这种“特供”算法,它们根本就没有内置相应的计算模块,所以就算你拿到了完美的 Seed 密钥,导入进去也生成不了正确的 6 位验证码。
遇到这种情况怎么破?
面对 SM3 算法的困扰,博主无奈地使用了“融化脸”表情来表达心情。
虽然主流工具不支持,但作为技术人,总不能就这么认怂。这里给大家梳理几个可行的解决思路:
-
官方客户端为王 最稳妥但也最笨的办法,就是老老实实使用平台提供的官方 APP。既然它用了 SM3,它的 APP 里肯定内置了计算逻辑。这虽然违背了我们“统一管理”的初衷,但在没办法破解算法的情况下,这是唯一保证能登上去的方式。
-
寻找支持国密的工具 目前市面上确实有极少数开源项目或者国产安全工具开始支持国密 SM3 的 TOTP 计算。如果你动手能力强,可以尝试在 GitHub 上搜索“SM3 TOTP”相关的开源项目,有些命令行工具或者小众 APP 可以通过手动输入种子,计算出正确的动态口令。
-
自制计算脚本(极客玩法) 如果你是程序员,且该平台没有额外的硬件设备绑定(如硬件Token),理论上可以自己写一段 Python 代码调用
gmssl库来实现 SM3 的 HMAC 运算。TOTP 的核心公式是公开的,只要把哈希函数换成 SM3,时间戳对齐,你就能在任何终端生成验证码。
写在最后
这次折腾虽然以“失败”告终(没能成功导入 Bitwarden),但也让我看到了国密算法在实际落地中的一些“硬伤”——生态兼容性确实还有待提高。希望未来能有主流密码管理器能重视一下国内的情况,把 SM3 也加进标准支持里去,不然我们这种想统一管理账号的人,还得继续在这个坑里爬半天。
你们平时有没有遇到过类似的“不兼容”坑?评论区聊聊!

评论已关闭