TOTP 是 Time-based One Time Password 的缩写,可以翻译为基于时间的一次性密码,由于其算法过程简单,安全性高,实施成本低,在各种系统的身份认证中,经常用来辅助认证,这种认证方式通常被叫做两步验证 或2FA 或 MFA ,严格地讲,TOTP是MFA(多因子认证)的一种实现。
在一些对安全性要求较高的网站,通常会提供2FA验证选项,登录时除了需要输入密码,还需要验证动态密码,这样即使密码泄露,还有一道防线保障账户安全。比如阿里云,腾讯云均支持开启MFA验证。
动态密码的生成,需要双方基于相同的授时系统,系统生成的密钥,双方都需要保存,密码算法是公开的,验证时不需要传递密钥,只需要传递密码。
开启两步验证可以使用Authy,Google Authenticator,Microsoft Authenticator 等软件,密钥需要妥善保存,密码变化默认频率是30秒,这个步长参数可以根据业务特性修改,由于双方时间往往会有些许差异,所以密码产生通常有一个倒计时,如果密码发送前已经发生变化,可能出现验证失败,服务端考虑到时延,也会有一定的容错机制。
如果使用Linux系统,也有很多现成类库可供使用,例如开源项目pyotp
https://github.com/pyauth/pyotp
执行 pip3 install pyotp 后,使用下面的代码就可以生成密码。
import pyotp print(pyotp.TOTP('密钥').now())
TOTP算法文档收录在rfc6238