TOTP算法

algorithm

​TOTP 是 Time-based One Time Password 的缩写,可以翻译为基于时间的一次性密码,由于其算法过程简单,安全性高,实施成本低,在各种系统的身份认证中,经常用来辅助认证,这种认证方式通常被叫做两步验证 或2FA 或 MFA ,严格地讲,TOTP是MFA(多因子认证)的一种实现。

在一些对安全性要求较高的网站,通常会提供2FA验证选项,登录时除了需要输入密码,还需要验证动态密码,这样即使密码泄露,还有一道防线保障账户安全。比如阿里云,腾讯云均支持开启MFA验证。

动态密码的生成,需要双方基于相同的授时系统,系统生成的密钥,双方都需要保存,密码算法是公开的,验证时不需要传递密钥,只需要传递密码。

开启两步验证可以使用AuthyGoogle AuthenticatorMicrosoft Authenticator 等软件,密钥需要妥善保存,密码变化默认频率是30秒,这个步长参数可以根据业务特性修改,由于双方时间往往会有些许差异,所以密码产生通常有一个倒计时,如果密码发送前已经发生变化,可能出现验证失败,服务端考虑到时延,也会有一定的容错机制。

如果使用Linux系统,也有很多现成类库可供使用,例如开源项目pyotp

https://github.com/pyauth/pyotp

执行 pip3 install pyotp 后,使用下面的代码就可以生成密码。

import pyotp
print(pyotp.TOTP('密钥').now())

TOTP算法文档收录在rfc6238

https://tools.ietf.org/html/rfc6238

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注