什么是两步验证 - 仅靠密码无法保护账户的原因

密码依赖于"知识"这一单一要素。无论设置多么复杂的密码,一旦被钓鱼攻击窃取,就会瞬间被突破。两步验证 (2FA) 在密码之外加入"持有物"或"生物特征"等不同要素,即使密码泄露也能防止未授权访问。

认证的三大要素如下:

  • 知识要素:密码、PIN、安全问题等"你知道的东西"
  • 持有要素:智能手机、安全密钥、IC 卡等"你拥有的东西"
  • 生物要素:指纹、面部识别、虹膜等"你的身体特征"

两步验证将其中两种以上要素组合使用。严格来说,"双因素认证 (2FA)"和"两步验证"是不同的概念,但在日常使用中几乎被当作同义词。详情请参阅双因素认证详解

短信验证 - 便捷但存在漏洞的方式

短信验证是在登录时向手机号码发送 6 位左右的一次性验证码,要求用户输入该验证码的方式。由于无需额外安装应用,部署简单,因此被许多服务采用。

然而,短信验证存在严重的安全漏洞。

  • SIM 卡劫持:攻击者欺骗运营商,将受害者的手机号码转移到另一张 SIM 卡上。详情请参阅 SIM 卡劫持详解
  • SS7 协议漏洞:电话网络的基础协议 SS7 存在设计缺陷,技术上可以拦截短信
  • 钓鱼实时中继:攻击者在伪造网站上让受害者输入验证码,并实时转发到正规网站 (Adversary-in-the-Middle)
  • 恶意软件读取短信:Android 设备上的恶意软件利用短信读取权限窃取验证码

NIST(美国国家标准与技术研究院)在 2016 年的 SP 800-63B 中将短信验证定位为"受限"的认证手段,建议迁移到更安全的方式。短信验证"聊胜于无",但对于需要高安全性的账户来说是不够的。

认证应用 - TOTP 的工作原理与推荐应用

认证应用基于 TOTP(基于时间的一次性密码)算法,每 30 秒生成一个新的 6 位验证码。服务器和应用共享同一个密钥(种子),通过当前时间和密钥计算 HMAC-SHA1 哈希值来生成验证码。

TOTP 的技术流程如下:

  1. 注册服务时,服务器生成密钥并以二维码形式显示
  2. 认证应用扫描二维码,将密钥保存在本地
  3. 登录时,应用使用"密钥 + 当前 UNIX 时间戳(30 秒为单位)"计算 HMAC-SHA1
  4. 从哈希值中截取一部分并转换为 6 位数字(Dynamic Truncation)
  5. 服务器端执行相同的计算,如果匹配则认证成功

主要认证应用的对比:

应用 云同步 导出方式 开源
Google Authenticator有(Google 账户)二维码传输
Microsoft Authenticator有(Microsoft 账户)云备份
Authy有(加密)多设备同步
Aegis (Android)加密备份

云同步在设备丢失时便于恢复,但如果同步目标账户被入侵,所有 TOTP 种子都会泄露。如果安全性是首要考虑,建议选择仅本地存储的应用,并另外保管加密备份。

安全密钥 - 基于 FIDO2/WebAuthn 的最强认证

安全密钥(如 YubiKey、Google Titan Key 等)是基于 FIDO2/WebAuthn 协议的硬件认证设备。它使用公钥加密技术,私钥被封存在设备内部,因此从原理上对钓鱼攻击和中间人攻击具有抵抗力。

WebAuthn 的认证流程如下:

  1. 注册时:安全密钥生成公钥和私钥对,将公钥发送给服务器。私钥保存在密钥内部,无法被提取
  2. 认证时:服务器发送一个随机挑战值(nonce)
  3. 安全密钥用私钥对挑战值进行签名,并将签名返回给服务器
  4. 服务器用公钥验证签名,匹配则认证成功

它能有效防御钓鱼攻击的原因在于,WebAuthn 将来源(域名)纳入了认证过程。如果伪造网站的域名与正规网站不同,安全密钥会拒绝签名。短信验证和 TOTP 没有这种机制,因此存在在钓鱼网站上输入验证码的风险。

通行密钥(Passkey)是 FIDO2 的进化形态,它允许使用智能手机的生物识别来替代安全密钥。Apple、Google、Microsoft 正在推进支持,预计将成为未来的主流方式。

主要服务的设置步骤

两步验证的设置方法因服务而异,但基本流程是相同的。建议与密码强化一起进行设置。

Google 账户

  1. 访问 myaccount.google.com 并选择"安全性"
  2. 点击"两步验证",注册手机号码(仅首次需要)
  3. 选择"身份验证器应用",用认证应用扫描二维码
  4. 如需添加安全密钥,从"添加安全密钥"注册 USB 密钥

Apple ID

  1. iPhone 的"设置"→ 点击你的名字 →"登录与安全性"→"双重认证"
  2. 注册受信任的电话号码(通过短信或语音通话接收验证码)
  3. iOS 16.3 及以上版本还支持注册安全密钥

Amazon

  1. "账户服务"→"登录和安全"→"两步验证设置"
  2. 扫描认证应用的二维码,输入显示的验证码进行确认
  3. 注册电话号码作为备用方式

无论哪个服务,设置时显示的恢复代码(备用代码)务必保存在安全的地方。如果设备丢失且没有恢复代码,将无法访问账户。

启用两步验证时需要注意的要点

两步验证是强大的防御手段,但在启用时存在一些陷阱。

  • 恢复代码的保管:打印在纸上离线保管,或保存在密码管理器的加密存储中。仅靠手机截图在设备故障时无法恢复
  • 确保备用方式:使用认证应用时,提前确认更换设备时迁移种子的步骤
  • 从短信验证迁移:尽可能迁移到认证应用或安全密钥。即使保留短信验证,也不要将其作为主要认证方式
  • 覆盖所有账户:为邮箱、云存储、社交媒体、金融服务等所有重要账户设置两步验证

在设置两步验证的同时,建议养成在查IP上检查浏览器指纹和连接来源信息的习惯,确认是否存在异常访问。

想要系统学习安全防护知识的读者,网络安全相关书籍也是很好的参考资料。

本文相关术语

双因素认证 (2FA) 结合两种不同认证要素进行身份验证的安全方法。 钓鱼攻击 通过伪造网站或邮件骗取认证信息的攻击手法。两步验证可以减轻其危害。 密码 基于知识要素的认证手段。单独使用较为脆弱,建议与两步验证配合使用。