为什么密码不再够用

即使你使用了强密码,你的账号安全仍然面临威胁。数据泄露、钓鱼攻击、键盘记录器等都可能导致密码被窃取。Google安全团队的研究显示,仅凭密码保护的账号被入侵的概率是启用2FA账号的50倍以上。

两步验证(Two-Factor Authentication,简称2FA)在密码之外增加了第二重验证,即使密码泄露,攻击者也无法轻易进入你的账号。微软的安全报告指出,启用2FA可以阻止99.9%的自动化攻击。

2FA的工作原理

两步验证基于"你知道的"和"你拥有的"两个因素:

  1. 第一因素(知识因素):你的密码
  2. 第二因素(持有因素):手机上的验证码、硬件密钥或生物特征

只有同时满足两个因素,才能完成身份验证。

常见的2FA方式对比

2FA方式安全性便捷性成本离线可用抗钓鱼
硬件安全密钥极高¥200-500
TOTP应用免费
推送通知极高免费部分
短信验证码免费
邮箱验证码免费

TOTP(基于时间的一次性密码)

TOTP是最常用的2FA方式。它的工作流程如下:

  1. 服务端生成一个密钥(Secret),通过二维码分享给你
  2. 你的验证器应用保存这个密钥
  3. 每隔30秒,应用使用密钥和当前时间生成一个6位数验证码
  4. 验证时,服务端用同样的算法生成验证码进行比对
# TOTP算法的简化实现
import hmac
import hashlib
import struct
import time

def generate_totp(secret: bytes, interval: int = 30) -> str:
    """生成TOTP验证码"""
    # 当前时间步长
    time_step = int(time.time()) // interval
    time_bytes = struct.pack(">Q", time_step)

    # HMAC-SHA1
    hmac_hash = hmac.new(secret, time_bytes, hashlib.sha1).digest()

    # 动态截断
    offset = hmac_hash[-1] & 0x0F
    code = struct.unpack(">I", hmac_hash[offset:offset + 4])[0]
    code = (code & 0x7FFFFFFF) % 1000000

    return f"{code:06d}"

推荐的2FA应用

验证器应用

我推荐以下TOTP验证器应用:

  • Aegis Authenticator(Android):开源,支持加密备份
  • Raivo OTP(iOS):开源,iCloud同步
  • Authy:跨平台,云端备份
  • Google Authenticator:简单易用,近期已支持云备份

硬件安全密钥

对于需要最高安全等级的场景,硬件安全密钥是最佳选择:

  • YubiKey 5 NFC:支持多种协议,兼容性最好
  • Google Titan:性价比高
  • Nitrokey:开源硬件

为主要平台启用2FA

Google账号

1. 访问 myaccount.google.com/security
2. 点击"两步验证"
3. 选择验证方式(推荐:安全密钥 > 验证器应用 > 手机提示)
4. 按照提示完成设置
5. 务必保存恢复代码

GitHub

1. 访问 github.com/settings/security
2. 点击 "Enable two-factor authentication"
3. 选择 "Set up using an app"
4. 扫描二维码
5. 输入验证码确认
6. 下载并安全保存恢复代码

SSH服务器

为SSH登录添加TOTP验证:

# 安装Google Authenticator PAM模块
sudo apt install libpam-google-authenticator -y

# 配置PAM
# 在 /etc/pam.d/sshd 添加
auth required pam_google_authenticator.so

# 修改SSH配置 /etc/ssh/sshd_config
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive

# 重启SSH
sudo systemctl restart sshd

# 以目标用户运行初始化
google-authenticator -t -d -f -r 3 -R 30 -w 3

2FA的备份策略

启用2FA后,最大的风险是丢失验证设备。务必做好备份:

  1. 保存恢复代码:每个服务都会提供恢复代码,打印或写在纸上,存放在安全的地方
  2. 备份TOTP密钥:使用Aegis等支持加密导出的应用,定期备份数据库
  3. 注册多个验证方式:如果可能,同时注册验证器应用和硬件密钥
  4. 配合密码管理器:部分密码管理器也支持存储TOTP密钥

企业2FA部署建议

对于企业环境,建议强制所有员工启用2FA,优先使用硬件安全密钥。可以通过配置身份提供商(如Okta、Azure AD)统一管理服务器安全加固中的2FA策略。

常见问题

手机丢了怎么办? 使用之前保存的恢复代码登录账号,然后重新设置2FA。

TOTP验证码总是错误? 检查手机时间是否准确。TOTP依赖精确的时间同步,时间偏差超过30秒就会导致验证失败。

2FA会很麻烦吗? 大多数服务支持"信任此设备"选项,你不需要每次登录都输入验证码。安全与便利的平衡取决于你的风险承受度。

启用2FA是提升账号安全最有效的单一措施。花10分钟时间为你最重要的账号开启这层保护,可能在未来为你避免巨大的损失。