两步验证

两步验证, 对应的英文是 Two-factor Authentication(2FA).

典型两步验证URI

otpauth://totp/TEST:[email protected]?secret=IBED6ZJDF4UWST3YKM3DK2ZQHFUDQZZSIRFD6L2FMF3FEN2DINZQ&issuer=Google

其中: totp 表示使用的算法是 TOTP (Time-based One-time Password), 它是基于时间的一次性密码生成算法. TEST:[email protected] 是账户信息, 会显示在两步验证App上, 方便用户辨识是哪个账号. secret 是密钥信息, base32 编码, 会在服务商服务端及两步验证App分别保存. issuer 是服务商, 会显示在两步验证App上, 方便用户辨识对应编码来源服务商.

常见问题

验证码是否可以重复使用?

可以.

验证码每30秒刷新一次, 此验证码 30秒内都有效.

两步验证App(如Google Authenticator)验证码生成是否需要联网?

不需要.

验证码计算是在本地根据密钥和时间生成, 无需与远端服务交互.

两步验证安全风险

服务端需要保存密钥, 服务端代码或数据库泄露, 密钥可能被他人拿到; 客户端需要保存密钥, 使用非正规客户端或越狱(ROOT)有可能被其他App获取到密钥;

云同步客户端会不会导致密钥泄露?

不会.

具体可以参见 Authy 的文档: How Authy 2FA Backups Work.

备用验证码原理

为用户生成随机验证码, 当无法使用客户端生成验证码时(如手机丢失), 可以用备用验证码.

恢复码

当手机丢失时恢复码可以用来关闭账号的两步验证.

推荐的客户端App

不推荐 Google Authenticator, 因为其不支持云端同步.

参考资料