一次性密码

背景

很多大型网站都提供了一种动态数字密码作为两步认证(2FA)的方案。你只要通过常用的密码管理器(例如 1Password,Authy 等)扫描二维码,就可以获得一个动态数字 token。我们来一起探索一下这门技术。

TOTP

TOTP 即 Time-Based One-Time Password Algorithm。顾名思义这是一种基于时间的 token 算法,从宏观来看就是基于时间和共享的密钥(shared secret key)生成随机数字 token。

与之类似的算法还有HOTP(Event-Based One-Time Password Algorithm)。

Google Authenticator

Google Authenticator 也是一种 TOTP,只不过它的 secret key 必须使用 base32 的[^1]。

Rust Implement

Have A Try

  • 项目中尝试了生成 secret (secret.rs),生成二维码(qr_code.rs)以及生成 token(code.rs)。

Reference

[^1]: Google Authenticator 的特殊性参考这个项目中的说明
[^2]:已提交 pull request