双因素认证是要求用户在登录或访问受保护资源时,提供两类不同性质凭证的身份验证机制,通常是在密码之外再验证一项只有本人掌握或持有的凭证。美国国家标准与技术研究院将其归入多因素认证范畴,把验证因素划分为用户知道的信息、用户持有的物品和用户自身的生物特征三类。相比仅凭密码的单一因素验证,它提高了攻击者冒用身份的门槛,被广泛用于电子邮箱、网上银行、政务系统和企业的远程接入等场景。
定义
双因素认证指一次认证过程必须提交两类来源不同的凭证,二者同属一个类别时不算符合要求。美国国家标准与技术研究院下属的国家网络安全卓越中心把多因素认证描述为要求一个以上不同验证因素才能完成认证的系统,并说明三个基本因素分别是用户知道的内容、用户拥有的物品和用户本身的特征。[1]
双因素认证是多因素认证中因素数量恰为两个的情形,多因素认证则是要求两个或更多因素的上位概念。美国国家标准与技术研究院发布的数字身份指南把因素划分为记忆秘密(密码或个人识别码)、持有物(硬件令牌、智能卡或认证应用)和生物特征(指纹、面部、虹膜)三类;仅用密码的单一因素认证无论密码多么复杂都不属于多因素认证,而两个密码同时使用也因同属「已知信息」一类而不构成多因素认证。[2]
在要求更严格的场景中,认证强度按保证等级划分。数字身份指南规定第 2 级保证等级要求采用两个因素的多因素认证,第 3 级为最高等级,只能通过多因素加密设备,或用记忆秘密配合单因素加密设备这两种方式达到。[3]
原理
认证的核心是让验证方确认对方确实控制着两类不同的凭证。开放 Web 应用安全项目的主动控制文档指出,密码单独使用时防护能力有限,多因素方案要求攻击者必须同时获取一个以上的要素才能通过验证;其中记忆秘密保存在双方一侧,可能被窥视、钓鱼或从服务端泄露,而持有物类因素和生物特征类因素可以降低这类风险。[4]
一次性密码是常见的第二因素实现方式。基于时间的一次性密码算法由互联网工程任务组在 RFC 6238 中定义为基于散列的消息认证码一次性密码算法的扩展,把事件计数器替换为由时间推导出的数值。算法要求生成端与验证端共享同一密钥、使用相同的步长,默认步长为 30 秒;其计算可写作 $T = (\text{当前 Unix 时间} - T0) / X$,再以 $\text{TOTP} = \text{HOTP}(K, T)$ 得出结果。密钥应当随机生成,并宜存放在防篡改设备中加以保护。[5]
验证方一侧需要保存或推导出对应密钥,因此密钥管理与时钟同步是部署中的关键环节。该标准建议所有通信经由安全信道进行,并建议验证系统加密保存密钥,仅在需要校验时解密,校验完毕立即重新加密,以缩短密钥在内存中暴露的时间。[5]
生物特征的使用有特定约束。上述控制文档说明,生物特征在作为单一因素时不被视为可用于数字认证的秘密,因为它可能被远距离获取,或以照片、遗留指纹、高分辨率图像等方式采集,因此应仅作为多因素认证的一环,并与用户持有的物理认证器配合使用。[4]
发展历程
分层验证的思路早于数字计算出现,银行卡配合个人识别码即是「持有物加已知信息」的早期形态,自动取款机自 1967 年投入使用后便要求同时提交卡片与识别码。[6]
硬件令牌在 20 世纪 80 年代进入商用。1986 年,RSA 推出 SecurID 令牌,用户需要输入自己知道的密码并使用自己持有的设备才能获得访问权,这被视为较早的双因素认证商用产品;该令牌也是较早的一次性密码令牌,其原理是设备依据秘密密钥生成看似随机的密码,系统校验通过即可推断用户持有该设备。[7]
标准化工作随后推进。基于散列的消息认证码一次性密码算法在 RFC 4226 中给出,基于时间的一次性密码算法则于 2011 年 5 月成为 RFC 6238;标准制定者认为,共同的算法有助于在互联网上推广双因素认证,使商业实现与开源实现之间可以互操作,其适用范围涵盖虚拟专用网络接入、无线网络登录和面向交易的 Web 应用。[8]
随着智能手机普及,第二因素从专用硬件转向用户已有的设备。短信一次性密码、认证应用生成的限时代码以及推送确认逐步取代了单独发放的令牌,降低了部署成本,也使生物特征作为因素之一变得普遍。[9]
应用
双因素认证被用于需要较高保障的账号与数据访问。美国国家标准与技术研究院面向小型机构的资料把它列为重要的安全增强手段,认为仅凭密码已不足以保护敏感资产,并建议采用由已知信息、持有物和生物特征中任选两项或更多项组合的方式。[10]
在云端和企业环境中,认证策略往往按风险分级。英国国家网络安全中心的建议是,对访问敏感数据的每个用户强制使用强多因素认证,并优先采用企业统一登录和情境感知认证,以便兼顾安全与可用性;具体做法包括在首次登录、换用新设备、检测到异常地点或异常操作、以及执行高风险操作时要求完成认证。
单一登录与多因素认证常被结合使用。微软的技术文档说明,单一登录让用户只验证一次即可访问多个应用,多因素认证则要求在登录时提供两项或更多要素,例如输入密码后再用手机应用、安全密钥或指纹、面部识别确认;在此基础上还提供无密码验证方式,并可要求使用具备抗钓鱼能力的认证方法,使凭证难以被拦截或在异地重放。[11]
局限
相当一部分多因素认证实现仍会面临网络钓鱼的威胁。上述云端身份管理资料指出,许多类型的多因素认证容易被钓鱼手法绕过,因此组织在条件允许时应选用抗钓鱼的方案,例如基于公钥的 FIDO 与 WebAuthn 认证方式,或基于公钥基础设施的多因素认证方式。[9]
一次性密码类方案本身存在若干弱点。相关条目指出,限时代码可以被钓鱼,只是攻击者需要实时转发凭证;未限制尝试次数的实现容易被暴力枚举;窃取共享密钥者可以自行生成有效代码,这在集中式身份数据库被入侵时尤为严重;设备时钟失步会造成校验失败,而实际部署通常保留打印代码、邮件重置等绕过途径,既增加运维负担也带来额外风险。[12]
即便通过认证,会话仍可能被劫持。上述条目说明,包括基于时间的一次性密码和基于事件的一次性密码在内,所有一次性密码方案在用户登录之后都可能遭遇会话被占用的情况。另有研究指出,较为成熟的双因素方法虽可减少身份冒用,仍可能面对中间人攻击与会话劫持这类进阶攻击。[13]
在标准层面,因素数量的判定也存在讨论。有意见书认为,把需要先在设备上完成一次验证才能生成一次性密码的认证器整体称为多因素认证器,容易引起理解偏差,因为验证方在认证时实际只收到一次性密码这一项凭证。[14]
参见
参考资料
- cr-mfa-nist-sp1800-17b-final(PDF) [引用日期2026-10-14]
- multi-factor-authentication-reference [引用日期2026-10-14]
- NIST.IR.8335-draft(PDF) [引用日期2026-10-14]
- C7: Secure Digital Identities [引用日期2026-10-14]
- Internet Engineering Task Force (IETF) D [引用日期2026-10-14]
- 2FA - What is Two-Factor Authentication? [引用日期2026-10-14]
- From James T. Kirk to data security with privacyIDEA [引用日期2026-10-14]
- ietf.org 上的网页 [引用日期2026-10-14]
- cp-15-7763-d8afb-1 [引用日期2026-10-14]
- NIST Small Business Cybersecurity Fact Sheet [引用日期2026-10-14]
- 增強式驗證 [引用日期2026-10-14]
- [科普中国]-TOTP算法 [引用日期2026-10-14]
- ieee.org 上的网页 [引用日期2026-10-14]
- FW: Definition of multi-factor authenticator is problematic [引用日期2026-10-14]