关于 2FA/MFA

关于 2FA/MFA

December 31, 2023

2FA/MFA:双重、多重(因素)验证

指出于安全原因,登陆账户或进行敏感操作等情况时除了用户名(Username)和密码(Password)外,额外使用其他一种或多种方式进行身份验证。

常用的附加验证方式有:

  • 一次性密码、动态密码(OTP)
    • 短信验证码(SMS OTP)
    • 身份验证器(Authenticator OTP)
  • 通行密钥(Passkey)
  • 移动端 APP(Mobile APP)*

*即用已登陆账户的设备给其他设备授权,具体授权方法不确定。

下图就是 Github 的 2FA 设置界面。

image

OTP

OTP 常见算法有

  • HOTP:基于散列消息验证码的一次性密码
  • TOTP:基于时间的一次性密码,基于HOTP,广泛应用

其具体形式有

  • SMS OTP:短信验证码
  • Mail OTP:邮箱验证码
  • APP OTP:已登陆的设备接收的验证码
    这种一般作为短信/邮件验证码的(廉价)替代。
  • Authenticator OTP:常见的一种形式是有效期为 30s 的 6 位验证码,某些人所说 TOTP 专指这种验证码。
    Authenticator,身份验证器,“软件令牌”,很多 Authenticator 会与密码管理器组合到一起。
  • 硬件令牌,银行等行业中经常使用

Passkey

具体参见:

严格来说,我觉得用 Passkey 验证不是 MFA,因为仅通过这一种方式你可以直接完成认证,不需要用其他方式。

Mobile APP

即用已登陆账户的设备给其他设备授权,具体授权方法不确定。

  • 有些会像前面提到的,向已登陆的设备发送验证码(OTP),Telegram、微博等会使用。

Telegram 登陆手机版时只需要短信验证码 / 旧设备验证码,所以这个 OTP 不是 2FA。但是其开启 2FA 后需要 验证码 + 密码,这时 OTP 就是 2FA 中的一种方式。

  • 有些验证时需要在 APP 中输入相应的数字,图中的 Github Mobile、Android 上的 Google Service 等就是。
  • 有些会内置一个仅用于其账户的 Authenticator 组件,如 Steam 的令牌功能。
  • 还有就是扫码验证(不是直接扫码登陆),我们经常使用的微信/ QQ 经常使用这种方法验证新的设备。

直接扫码登陆一般用于“高权重”的设备(手机)给“更低权重”的设备(PC、网页版等)“授权”,而不能用于同等级设备。