什么是TOTP(Time-base One-Time Password)?
Time-base One-Time Password
翻译过来是基于时间的一次性密码。这里以QQ令牌为例,解释下TOTP。文章来源:https://www.toymoban.com/news/detail-686294.html
- 首先,当用户首次使用QQ令牌时,服务器会向用户的手机APP上颁发一个证书/秘钥(这里理解为一个长的字符串,设为变量:
secret
,颁发时间[unix时间戳]记为:createTimestamp
),单个临时密码的有效期为30s。 - 手机APP生成临时密码,记当前手机unix时间戳为:
appCurrTimestamp
,生成规则为:
//当前步数,30秒为一步
var userId = xx;
var step = (appCurrTimestamp - createTimestamp)/(30*1000);
//生成一个六位密码(这里生成密码的方法大家自己定义,保证安全性就行,核心逻辑是上一步计算步数,保证相同步数生成的密码相同即可)
var tempPass = substr(sha256(userId + secret + step),6);
- 手机APP将密码发送到服务端验证,记服务端当前时间为:
serverCurrTimestamp
//当前用户ID
var currUserId = xx;
//根据当前用户ID查询用户秘钥
var currUserSecret = querySecretByUserId(currUserId);
var step = (serverCurrTimestamp - createTimestamp)/(30*1000);
//生成密码(这里生成密码的方法大家自己定义,保证安全性就行,核心逻辑是上一步计算步数,保证相同步数生成的密码相同)
var serverTempPass = substr(sha256(currUserId + currUserSecret + step),6);
- 最后验证手机端的生成的临时密码和server端生成的是否相同即可。
边界情况如何处理?
服务器和手机的时间可能存在时间差(还有网络延迟造成的时间差),为了弥补时间差造成的步数不一致的问题,一般会向前和向后多算一步,只要这三步有一步是符合条件的,则符合条件。文章来源地址https://www.toymoban.com/news/detail-686294.html
到了这里,关于【TOTP】TOTP算法(基于时间的一次性动态密码)原理介绍 & 简要逻辑实现说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!