步步糕升 发表于 2026-10-15 08:26:22

将军令从不联网,服务器怎么知道 6 位动态密码?TOTP、U 盾、Passkey 身份认证通俗科普

<h2>导语</h2><div class="quote"><blockquote><p><font size="4">&nbsp; &nbsp; &nbsp; 很多老网游玩家都记得将军令:一个小小的硬件令牌,不用 WiFi、不用流量,完全不联网,屏幕每隔几十秒就刷新一组 6 位数字。登录游戏输入这串数字,远在云端的服务器却可以精准校验密码是否正确。</font></p><p><font size="4">&nbsp; &nbsp; &nbsp; 很多人会疑惑:设备没有任何网络通信,服务器究竟是怎么同步这串不断变化的验证码?这套技术就是<strong>TOTP 基于时间的一次性密码</strong>,现在手机上各类二次验证器 App 底层也是这套逻辑。</font></p><p><font size="4">&nbsp; &nbsp; &nbsp; 与之对比,网银 U 盾采用完全不同的非对称加密思路。本文通俗拆解将军令、TOTP、一代 / 二代 U 盾的防护逻辑,同时对比短信验证码的缺陷,以及新一代通行密钥 Passkey 的设计思想,看懂互联网 “证明你是你” 的几种主流技术方案。</font></p></blockquote></div><p><br></p><h2>一、将军令不联网,却能对上验证码:TOTP 时间型一次性密码</h2><p>将军令硬件出厂时,设备内部会烧录一串独一无二的随机密钥,业内称为<strong>种子(共享密钥)</strong>。同时,服务器数据库当中,会对应保存完全一模一样的种子,绑定这个令牌的序列号。</p><blockquote>
<p>关键点:<strong>种子只会在绑定阶段完成同步,日常登录过程中,种子不会在网络上传输,不会通过互联网来回发送</strong>。</p>
</blockquote><p>除了完全一致的种子,客户端硬件与服务器还共享同一个公共参照:<strong>时间</strong>。
算法会把 Unix 纪元时间(1970‑01‑01 起算的总秒数),按固定步长切割成一个个时间格子。常见步长为 30‑60 秒,同一个时间格子之内,计算出来的验证码固定不变;时间跨入下一格,验证码就整体刷新。</p><ol>
<li>将军令本地:种子 + 当前时间格子编号,送入 HMAC 哈希算法运算,输出一大串哈希字节;</li>
<li>按标准规则截取字节,换算之后保留最后 6 位十进制数字,就是屏幕展示的动态密码;</li>
<li>服务器这边,拿着<strong>同一套种子、同一个时间格子编号</strong>,执行完全一样的计算,算出预期 6 位数字,和用户提交的数字比对校验。</li>
</ol><p>两边各自本地独立运算,不需要设备和服务器互相通信,只要种子一致、时间大致同步,输出的 6 位验证码就会完全相同。</p><h3>时钟漂移容错机制</h3><p>硬件令牌内置的石英时钟,长年累月运行会产生走时偏差,也就是时钟漂移。
为了防止时钟轻微偏差导致验证失败,服务器不会只校验当前这一个时间格子,还会额外验算前后 1‑2 个时间窗口。只要其中一组计算结果匹配,就可以完成登录;服务器还会记录该令牌的时间偏移量,后续自动补偿时间误差IETF Datat...。</p><blockquote>
<p>安全弱点:TOTP 整套体系的命门就是<strong>共享种子</strong>。一旦种子被黑客窃取,攻击者就可以独立算出每一组动态验证码。2011 年 RSA 公司发生重大安全事件,用于硬件令牌的大量种子库遭到泄露,直接导致下游多家大型企业被入侵,事后企业只能全部更换硬件令牌。因此服务器侧的种子密钥需要极高等级加密保护。</p>
</blockquote><h3>手机验证器 App 也是 TOTP</h3><p>现在微软验证器、Authenticator 等 App,底层遵循公开标准 RFC6238 TOTP 协议。绑定账号弹出的二维码,并不是加密图片,而是一段<code>otpauth://</code>开头的明文 URL,<code>secret=</code>后面经过 Base32 编码的字符串,就是那一份共享种子。
⚠️重要安全提醒:<strong>不要随便截图分享这个绑定二维码</strong>,别人拿到这张截图,就等同于拿到你的种子,可以完全复刻你的二次验证码。</p><p>另外 TOTP 还有防护规则:</p><ol>
<li>6 位验证码只有一百万种组合,服务器会设置错误次数锁定,防止暴力猜码;</li>
<li>同一个时间窗口内的验证码只能使用一次,用过即作废,抵御重放攻击;</li>
<li>服务器数据库不能简单存储种子的哈希值,因为 TOTP 需要拿原始种子实时参与运算,种子必须高强度加密保存。</li>
</ol><h2>二、网银 U 盾:私钥锁在硬件内部,走数字签名路线</h2><p>U 盾和将军令 TOTP 不是同一套技术。将军令是<strong>两边共享同一把密钥</strong>;U 盾使用非对称加密(公钥、私钥密钥对)。</p><ol>
<li>密钥对在 U 盾硬件芯片内部生成,<strong>私钥永远不能导出、不能读出,锁死在硬件里面</strong>;银行服务器只保存对应的公钥。</li>
<li>转账交易时,交易信息(收款人、金额)传入 U 盾,由内部私钥对交易内容做数字签名;签名结果上传银行。</li>
<li>银行使用公开的公钥校验签名是否合法,以此确认这笔指令确实来自这个 U 盾硬件。</li>
</ol><h3>一代 U 盾与二代 U 盾的关键差异</h3><ul>
<li><strong>一代 U 盾:无屏幕无确认按键</strong>
交易内容电脑软件直接送入 U 盾完成签名。风险在于:如果电脑已经中木马病毒,木马可以偷偷篡改收款人账号、转账金额,U 盾看不到真实交易内容,依旧会照常完成签名,资金会被盗转。</li>
<li><strong>二代 U 盾:增加显示屏 + 物理确认按键,所见即所签</strong>
转账时,U 盾屏幕直接展示本次交易的收款账号、转账金额。<strong>必须人眼确认信息,再手动按下实体确认按键,才会执行私钥签名</strong>。即便电脑已经被木马篡改数据,U 盾屏幕展示被篡改后的内容,用户一眼可以识别异常,拒绝确认签名,以此抵御电脑端木马篡改交易的攻击。</li>
</ul><blockquote>
<p>通俗总结:将军令 TOTP 靠 “两边共同算密码”;U 盾靠 “私钥封死在硬件,人确认内容再签名”。</p>
</blockquote><h2>三、短信验证码的致命短板,以及新一代通行密钥 Passkey</h2><p>很多人习惯的短信验证码,属于很普及的二次验证,但存在固有安全缺陷。验证码是服务器生成,通过运营商短信下发。风险来自<strong>SIM 卡劫持攻击</strong>:黑客通过欺骗运营商补卡,把你的手机号劫持到黑客手机,所有短信验证码都会流向攻击者。历史上就发生过知名人物遭遇 SIM 劫持,社交账号被入侵的真实案例。</p><p>而新一代通行密钥 Passkey(FIDO2),借鉴 U 盾的安全思想,把这套能力内置到手机、电脑安全芯片:</p><ol>
<li>在设备本地生成公私密钥对,私钥保存在手机安全硬件,不对外流出;服务端保存公钥;</li>
<li>登录网站时,网站发出随机挑战;设备通过指纹 / 人脸确认本人身份,使用私钥对挑战做签名传回网站;</li>
<li><strong>签名信息会绑定网站域名</strong>。即便遇到钓鱼虚假网站,域名不匹配,就算拿到签名也无法在真实网站完成登录,抵御钓鱼攻击,这是短信验证码、TOTP 很难做到的能力36氪。</li>
</ol><h2>四、几种身份认证方案优缺点对比</h2>


































<p>表格</p><table><thead><tr><th>方案</th><th>核心原理</th><th>主要优势</th><th>明显短板</th></tr></thead><tbody><tr><td>将军令 / TOTP</td><td>两边共享种子 + 时间哈希运算</td><td>硬件无需联网,部署简单</td><td>种子泄露全盘失守,无法防御钓鱼网站</td></tr><tr><td>二代网银 U 盾</td><td>硬件内部私钥,所见即所签签名</td><td>防木马篡改交易</td><td>硬件随身携带,使用相对繁琐</td></tr><tr><td>短信验证码</td><td>运营商下发一次性短信</td><td>开箱即用无需额外 App</td><td>SIM 劫持、短信劫持风险,容易被钓鱼利用</td></tr><tr><td>Passkey 通行密钥</td><td>设备安全芯片非对称签名</td><td>防 SIM 劫持、抵御钓鱼攻击</td><td>部分老网站尚未支持</td></tr></tbody></table><h2>五、普通用户实操安全提示</h2><ol>
<li>TOTP 绑定二维码不要截图转发、不要随意上传云盘,泄露等价泄露安全种子;更换手机优先导出恢复码,不要只依赖截图二维码。</li>
<li>网银尽量使用带屏幕按键的二代 U 盾;电脑有中毒风险时,不要盲目插入 U 盾。</li>
<li>能使用 Passkey 通行密钥的平台,优先开启通行密钥,安全性高于短信验证码。</li>
<li>短信验证码不要作为唯一的账号防护手段,高价值账号优先搭配 TOTP 硬件 / 软件二次验证。</li>
</ol><h2>六、常见认知误区澄清</h2><ol>
<li><strong>误区:将军令会偷偷后台联网同步密码。</strong>
纠正:硬件完全不联网,依靠本地种子 + 时间独立计算验证码,没有任何网络交互。</li>
<li><strong>误区:拿到某一次 6 位动态验证码,就可以推算下一组验证码。</strong>
纠正:只凭输出的 6 位结果,无法反向推导出种子,算不出后续验证码;前提是种子没有泄露。</li>
<li><strong>误区:U 盾可以被软件把私钥读出来复制。</strong>
纠正:正规 U 盾硬件设计,私钥生成之后禁止导出;一代 U 盾风险来自木马篡改交易内容,不是私钥泄露。</li>
<li><strong>误区:TOTP 可以防御钓鱼网站。</strong>
纠正:不能。钓鱼网站可以诱导你输入当前有效的 6 位验证码,直接完成登录。</li>
<li><strong>误区:短信验证码足够安全。</strong>
纠正:存在 SIM 卡劫持风险,高价值账号不建议只依靠短信做二次验证。</li>
</ol><h2>文末总结</h2><p>将军令不用联网却可以生成可校验的动态密码,背后是 TOTP 基于时间的一次性密码算法,依靠设备与服务器两份完全相同的种子,加上统一的时间,两边独立哈希运算得到验证码。</p><p>网银 U 盾则走上非对称数字签名路线,把私钥锁死在硬件当中;二代 U 盾靠屏幕加实体按键,解决电脑木马篡改交易的隐患。
短信验证码存在 SIM 劫持风险;而 Passkey 通行密钥继承 U 盾的安全思想,把安全能力内置进手机设备,同时抵御钓鱼网站攻击。</p><p>各种各样技术本质都在解决同一个古老问题:互联网上,如何可靠证明 “你就是你本人”。</p><p></p>
页: [1]
查看完整版本: 将军令从不联网,服务器怎么知道 6 位动态密码?TOTP、U 盾、Passkey 身份认证通俗科普