概念
TOTP算法(Time-based One-time Password algorithm)是一种从共享密钥和当前时间计算一次性密码的算法。 它已被采纳为Internet工程任务组标准RFC 6238,是Initiative for Open Authentication(OATH)的基石,并被用于许多双因素身份验证系统。
TOTP是基于散列的消息认证码(HMAC)的示例。 它使用加密哈希函数将密钥与当前时间戳组合在一起以生成一次性密码。 由于网络延迟和不同步时钟可能导致密码接收者必须尝试一系列可能的时间来进行身份验证,因此时间戳通常以30秒的间隔增加,从而减少了潜在的搜索空间。
算法描述
OTP基于具有时间戳计数器的OTP。
通过定义纪元(T0)的开始并以时间间隔(TI)为单位计数,将当前时间戳变为整数时间计数器(TC)。 例如:
- TC = floor,
- TOTP = HOTP(SecretKey,TC),
- TOTP-Value = TOTP mod 10d,其中d是一次性密码的所需位数。
像google auth的二步认证使用了这种方式。
totp二步认证的过程我总结了一下
- 生成二维码,带有otpauth链接的google地址
- 生成公用密钥
- 返回给app,同时
用户户和服务名
也会返回,这时密钥是被base32加密过的,app存储,以后用这个密钥来生成6位校验码 - 服务端同时存储这个密钥和用户名,你可以把用户名当key,把密钥当