两步验证系统的工作原理

两步验证系统的工作原理

MFA客户端

MFA全称是Multi-Factor Authentication,市面上有很多的客户端都支持二步验证。

  • Authy 功能丰富 专为两步验证码
  • Google Authenticator 简单易用,但不支持密钥导出备份
  • Microsoft Authenticator 使用微软全家桶的推荐
  • 1Password 强大安全的密码管理付费应用

个人不太推荐Google推出的MFA程序,因为无法云端备份,卸载后等于失去所有MFA钥匙。

服务端和手机端进行匹配

  • 在服务端(支持两步验证的网站)申请开启两步验证。
  • 此时服务端会生成一个类似于[DPI45HKISEXU6HG7]的密钥Key,同时生成一个二维码,将密钥Key通过二维码展示。
  • 使用客户端扫描二维码,获取密钥Key,并保存在客户端。

此时密钥Key只有服务端和手机端知道,其它任何第三方都不清楚,这也是MFA加密的关键,相当于在这个密钥Key就是你的第二把钥匙。

MFA校验码生成

客户端对密钥Key和当前时间Time的组合(Key,Time)使用HOTP(HMAC-Based One-Time Password)算法计算MFA校验码S,公式如下:

S = Truncate(HMAC-SHA-1(Key,Time))

由于HOTP算法生成的密码位数较长,不方便用户输入,因此只截取一部分数字作为密码,例如前6位数字。

当时间不同时,生成的MFA校验码也不一样。所以能够做到MFA校验码在多少秒后进行更新,并且不同。

服务端检验MFA校验码

服务端使用相同的算法,拥有相同的密钥Key,在经过计算后,可以知道客户端上传的MFA校验码S是否正确。