同一台笔记本上的 TOTP 真的是第二因素吗?
VPN 笔记本上的验证码生成器是落在同一入侵边界内的持有因素。先追踪种子和会话。
登录一个先要密码、再要六位验证码的 VPN 客户端时,两个提示看起来像两道彼此独立的闸门。按因素类型算,它们确实是:密码是你知道的东西,验证码是你持有的东西。可按一台被入侵的笔记本究竟暴露了什么来算,两者可能塌缩成同一条边界,因为你持有的那个东西,就是你正在输入的这台机器上的一个文件。这两种算法之间的差距,正是本篇要谈的问题。
追踪一次从密码输入框到验证码输入框的登录过程
看流程,而不是看标签。客户端发出密码,服务端回复需要第二重证明,客户端随即打开一个六位或八位的输入框。那个框背后是一个生成器应用,它持有一份共享密钥和一只时钟。它用密钥和当前时间步算出数值,服务端则用自己的密钥副本重算出同一个数值。
双方持有完全相同的密钥材料。人们把验证码说成秘密时,恰恰漏掉了这层对称性:服务提供方同样能生成你的验证码,这也是种子比任何单次输出都更值钱的原因。一个泄露的验证码是一次性数值;生成它的种子则是长期凭证,在被替换之前会一直产出有效数值。
激活流程是另一半。用设备 PIN、生物识别提示或加密容器解锁的生成器,给出的是持有证明加上另一样东西。不加密运行、靠操作系统会话解锁的那种,只给出一个文件。同一个应用可以按注册方式提供这两种安排,所以部署决定落在注册这一步,而不在应用的营销页上。
判断这段验证码到底证明了什么
标准文本在这里格外清楚,值得直接去读。NIST 的认证器指南把基于软件的 OTP 生成器列为认证器,区分单因素 OTP 与带激活因素的多因素 OTP,并明确指出 OTP 认证无法抵御钓鱼。这三条各自都会改变你对这个提示能主张什么。
无法抵御钓鱼是最锋利的那道边。输入到某个框里的验证码,可以被人在实时通话中被说服后,输入到别人的框里。窗口很短,这减少了有效尝试的次数,却没有关闭这种手法。如果你的要求包含抵御这一点,那么无论生成器跑在哪里,OTP 都是错误的基础件。
单因素与多因素之分是第二层区别。没有激活步骤就出现的验证码,只证明你持有一个文件,别的什么也证明不了;而这个文件的强度,取决于能读取它的那个账户。加上激活因素,主张会更强,但它描述的仍是登录时出示的证明,而不是生成它的机器是否被隔离。
看看一台被入侵的笔记本能够到什么
在工作站上取得代码执行权的攻击者,并不限于读取你正在输入的框。成功登录后建立的会话通常是一个令牌或 Cookie,而令牌可以从另一台机器上使用,完全不需要任何验证码。如果你防的正是这种能力,那么在登录处再加一道提示,改变的是攻击的步骤数量,而不是结果。
| Arrangement | What it adds at login | What it leaves inside the laptop boundary |
|---|---|---|
| Password plus TOTP app on the same machine | A possession proof the password alone does not supply | The seed, the unlock step and the authenticated session |
| TOTP app on a separate phone | Seed storage outside the workstation | Session cookies, the typed password and any prompt that can be proxied |
| Hardware key with a signed challenge | A per-login signature bound to the origin | Whatever the browser and the workstation are already trusted to do |
把第三列读成诚实的那一列。上面的每种安排都会在工作站的信任边界内留下点什么,因为会话正是在那里被使用的。变化在于:长期秘密是跟着这条边界走,还是留在边界之外;以及证明是否绑定到特定来源,好让仿冒页面无法把它转交出去。
两个更小的细节属于同一幅图。验证码在其接受窗口内一直有效,常见是三十秒加上对时钟漂移的容差,因此被截获的数值可以在那个窗口内重放,除非校验方拒绝重复使用。而安装新的生成器并不会终止已经通过认证的会话,于是一个过期会话会活得比那次本该控制住事件的凭证变更更久。
只有在分离确实有用时,才把生成器移走
把验证码生成器放到手机上,对一种具体故障是真正的改进:被偷走的笔记本不再同时带着两重证明。但它对笔记本上的会话劫持毫无作用,对把验证码输入钓鱼页面的用户毫无作用,对那串只打印过一次、又被拍进笔记应用的恢复码同样毫无作用。
所以先写清需求,再选工具。如果目标是多一重抵御密码泄露的证明,就直说,同设备上的应用已经提供了它。如果目标是承受 VPN 工作站被入侵,就点明那种攻击者能力,并选择为其评估过的安排,把钓鱼方面的要求单独写明,而不是默认它成立。
然后再处理运营那一半,它决定这些里有哪些能在与事件接触后存活。设备丢失需要有条可查的补发路径,凭证轮换需要吊销活跃会话,注册材料需要和种子同级的保护,因为一份未受保护的注册副本会以更短的路径把同样的未来验证码交给攻击者。把这四项逐一列出,比争论同设备令牌是好是坏更有用。