返回主页

双因素认证(2FA)

一般来说,三种不同类型的证据,可以证明一个人的身份(三种因素)。

  • 秘密信息:只有该用户知道、其他人不知道的某种信息,比如密码。
  • 个人物品:该用户的私人物品,比如身份证、钥匙。
  • 生理特征:该用户的遗传特征,比如指纹、相貌、虹膜等等。

常见2FA方法:

  • 安全问题+密码
  • 短信/邮件+密码(不安全)
  • TPOP+密码
  • U2F(Universal 2nd Factor)+密码
  • 推送通知(Google账户)+密码
  • 生物识别+密码

TPOP(Time-based One-time Password)

  1. 服务器生成密钥
  2. 根据密钥生成二维码,手机扫描存储密钥
  3. 手机根据密钥和时间戳生成哈希,有效期(默认为30s)内提交给服务器
  4. 服务器根据当前时间戳和密钥生成哈希,对比

简化版算法:

TC = floor((unixtime(now) − unixtime(T0)) / TS) //T0为约定的起始时间,默认为0,TS为有效期
TC = floor(unixtime(now) / 30) //30秒内,TC值相同
TPOP = HASH(secretKey, TC)

标准版

OTP(secretKey,C) = Truncate(HMAC-SHA-1(secretKey,C))
TOTP = Truncate(HMAC-SHA-1(secretKey,TC)

U2F(TUniversal 2nd Factor)

介绍

U2F(Universal 2nd Factor)是FIDO联盟提出的使用标准公钥密码学技术的身份认证协议。 2个阶段:

  • 注册
    • 设备生成公私钥对,公钥发给服务器保存与用户绑定
  • 鉴权
    • 服务器发起challenge
    • 设备用私钥对challenge加密发回
    • 服务器用公钥验证