最近在讨论一套认证流程时,发现一个很容易混在一起的问题。
流程本身不算少见:用户先完成账号密码验证,再验证短信 OTP;如果风险较高,继续做人脸;人脸失败后,再考虑 NFC、远程视频之类的替代路径。单看每一步,好像都能说出理由,但放在一起讨论时,密码、短信 OTP、人脸、设备指纹、上行短信、NFC 又很容易被统一叫成“核身手段”,然后开始比较谁更安全、谁更强。
这类讨论里还有一个容易混用的词:核身和认证。严格说,它们不是一回事。核身更容易让人想到开户、实名、证件核验这类首次确认身份的动作;这里讨论的,主要是用户已经注册或开户之后,系统如何在登录、找回密码、高风险操作时,再次确认当前操作者是不是可信主体。业务上有时会把它们都叫核身,实际上这些都是认证。
这个区别不只是术语问题。因为每种方式证明的事实不同。如果不先弄清楚“它证明了什么”,流程设计很容易变成不断往后面加验证手段。
认证三因子是底层框架
先回到最基础的三类认证因子:你所知道的、你所拥有的、你本身的特征。
密码、PIN、密保答案,大体属于“知道什么”,即你所知道的。
手机、令牌、UKey、银行卡、存有密钥的设备,更接近“拥有什么”,即你所拥有的。
人脸、指纹、虹膜,则是“是什么”,也就是你本身的特征。
这套分类不是为了背概念,而是为了避免把不同层次的东西混在一起。密码、短信 OTP、人脸、NFC 看起来都在做验证,但它们并不是在证明同一件事。设备指纹、地理位置、行为轨迹也有价值,不过更适合作为风险信号,不能直接和密码、人脸并列。
所以这篇先不做大而全的认证手段列表,只回答几个最常见的问题:密码、短信 OTP、人脸和 NFC,分别证明了什么。
密码证明的是:你知道某个秘密
密码最容易理解。它证明的是当前操作者知道某个秘密。
这个秘密可能是登录密码,也可能是 PIN、支付密码或某种密保答案。只要攻击者不知道这个秘密,就很难直接完成对应操作。所以在最基本的登录场景里,密码仍然是一个很重要的门槛。
但密码的边界也很明显。它防不了密码已经泄露的情况,也防不了钓鱼页面诱导用户自己输入密码。更麻烦的是,在远程诈骗里,用户可能是在攻击者指导下亲自输入密码。系统看到的是密码正确,但这一步只说明秘密被正确输入了。
这就是密码能证明的东西:知道秘密。至于这个秘密是本人输入、被钓鱼页面收集后输入,还是在别人指导下输入,密码本身分不出来。
短信 OTP 证明的是:验证码被带回了认证流程
短信 OTP 证明的不是“本人”,而是当前流程取得了绑定号码收到的验证码,并把验证码带回认证流程。
常见下行短信 OTP 是系统把验证码发到绑定手机号,用户再把验证码填回页面。这个动作通常说明当前操作者能够接收或取得这条短信,并把短信里的内容带回当前会话。相比只输密码,它多了一层绑定号码和短信验证码的要求。
所以在密码泄露时,追加短信 OTP 有价值。攻击者只知道密码还不够,还要拿到验证码。
但短信 OTP 也不是万能的。如果攻击者能完成 SIM 换卡,或者手机已经被木马控制,绑定号码这一层就会变弱。更常见的情况是验证码被套取:诈骗分子不一定要拦截短信,只要让用户把验证码念出来,或者指导用户填进去,就可能继续往下走。
上行短信可以放在这里看。它要求用户用绑定号码,主动向指定号码发送指定内容。它的价值不是简单地“比短信 OTP 更安全”,而是改变操作链路:用户可能需要离开当前页面,进入短信应用,编辑并发送内容;攻击者也不能只让用户读出一串验证码,而要进一步指导用户完成发送动作。
这个变化可能提高远程指导的成本,但不提供绝对安全。诈骗分子仍然可以继续指导用户发送短信;恶意软件、无障碍服务或远程控制工具也可能带来新问题;如果号码控制权已经丢失,上行短信同样不能证明本人身份。
所以短信 OTP 这一类手段,核心证明的是验证码从绑定号码相关通道回到了认证流程。它适合补密码的短板,但遇到验证码套取、号码控制权丢失或终端被控制时,证明力会明显下降。
人脸证明的是:采集结果达到了匹配标准
人脸属于“你本身的特征”。更准确地说,它证明的是在当前采集链路、活体检测和阈值条件下,提交的人脸特征达到了系统的匹配标准。
在人脸能力正常、活体检测和比对链路可信的前提下,它能提高冒用成本。攻击者只知道密码、拿到验证码,还不一定能通过人脸。这也是很多高风险操作会追加人脸的原因。
但人脸通过,不等于系统理解了用户的操作意图。屏幕共享或电话指导场景里,用户可能是在攻击者诱导下自己完成人脸。系统看到的是采集和比对通过,但它看不到用户为什么要做这个动作。
人脸失败也不能直接等同于欺诈。光线不好、摄像头问题、姿态变化、用户状态、设备性能,都可能导致失败。把所有失败用户都拒绝,会带来明显体验损失;直接放行,又会留下风险。
所以人脸的边界不只是“像不像本人”,还包括采集链路是否可信、阈值如何设置、活体检测是否有效,以及用户是否在被诱导的情况下配合完成验证。
NFC 证明的是:某个实体介质在场
NFC 更容易被说得含糊,好像只要加了 NFC,认证就更强。这个说法太粗。
NFC 本身只是近场通信技术。它能提供什么认证价值,取决于读取的是什么。如果读取银行卡,它提供的是实体银行卡在场的证据;如果读取带芯片证件,它提供的是实体证件在场,以及芯片数据真实性方面的证据。
这里还要看读取方式。只是读取卡号、证件号这类静态数据,和通过芯片做动态校验,证明力并不一样。前者更像是拿到了某些可读信息,后者更接近证明实体芯片参与了本次验证。具体能做到哪一步,要看介质、手机、系统能力和业务实现,不能只用“NFC”两个字概括。
这类证据在某些场景里很有用。比如攻击者掌握了姓名、身份证号、手机号等泄露信息,单纯问密保问题或发送短信 OTP 的防护就比较有限;如果要求读取实体证件或银行卡,攻击者还需要拿到对应介质。
但实体介质在场,不等于当前操作者一定是账户本人。银行卡、证件、手机同时落入攻击者手中时,NFC 的保护作用会下降。不同手机、操作系统、证件和银行卡的支持能力,也会影响实际体验。
所以 NFC 证明的是某个实体介质在场,并且证据强度取决于读取对象和校验方式。它更适合和密码、人脸、短信 OTP、历史设备等信号组合使用,也适合作为人脸失败后的替代验证路径之一。这里的“替代”不是简单降低安全要求,而是换一种风险结构不同的证据。
设备、位置和行为更像风险信号
讨论认证流程时,设备指纹、地理位置、行为轨迹也经常被拉进来。
这些信息当然有用。一个用户突然从陌生设备、异地 IP、异常时间登录,确实值得警惕。打字节奏、鼠标移动、触屏手势和历史习惯差很多,也可能提示风险。
但它们更适合叫风险信号,而不是认证因子。陌生设备不等于一定不是本人,常用设备也不等于当前操作人一定是本人。地理位置可能被 VPN、代理、GPS 模拟影响,也可能因为出差、漫游、运营商出口变化而误判。
基于风险的认证,是再上一层的编排机制。它根据这些信号决定要不要追加验证,以及追加哪一种验证。它不是又一种具体认证方式。
这个区分很重要。否则很容易把“风险评分高”误解成“已经完成了认证”,或者把“设备熟悉”误解成“可以确认本人”。
真正的问题是攻击者控制了什么
把这些东西分开后,再回到流程设计,问题会清楚很多。
不要先问哪种方式最强,而是先问攻击者已经控制了什么:是否知道密码,是否取得绑定号码收到的验证码,是否能看到屏幕,是否能诱导用户本人操作,是否拿到了实体银行卡或证件。
如果攻击者只知道密码,短信 OTP 很有用。如果攻击者能套取验证码,继续追加一次短信 OTP 未必解决问题。如果攻击者能诱导用户本人人脸,单纯增加人脸也可能不够。如果攻击者拿不到实体介质,NFC 可能提高远程攻击成本。
同一个验证方式,放在不同攻击路径里,价值会完全不同。多加一步认证也不一定更安全。有时它切断了攻击链路,有时只是让用户多点一次,甚至让用户更习惯机械确认。
认证流程不是把“强手段”一层层叠上去,而是在攻击者控制能力不断变化的情况下,补充仍然缺失的证据。
以后再设计或评审认证流程时,我会先把每一步写成三个问题:它证明什么,防什么,防不了什么。然后再决定是追加验证、切换到另一条路径、限制使用,还是直接拒绝。