什么是TOTP(Time-base One-Time Password)?
Time-base One-Time Password
翻譯過來是基于時間的一次性密碼。這里以QQ令牌為例,解釋下TOTP。文章來源:http://www.zghlxwxcb.cn/news/detail-686294.html
- 首先,當用戶首次使用QQ令牌時,服務器會向用戶的手機APP上頒發(fā)一個證書/秘鑰(這里理解為一個長的字符串,設為變量:
secret
,頒發(fā)時間[unix時間戳]記為:createTimestamp
),單個臨時密碼的有效期為30s。 - 手機APP生成臨時密碼,記當前手機unix時間戳為:
appCurrTimestamp
,生成規(guī)則為:
//當前步數,30秒為一步
var userId = xx;
var step = (appCurrTimestamp - createTimestamp)/(30*1000);
//生成一個六位密碼(這里生成密碼的方法大家自己定義,保證安全性就行,核心邏輯是上一步計算步數,保證相同步數生成的密碼相同即可)
var tempPass = substr(sha256(userId + secret + step),6);
- 手機APP將密碼發(fā)送到服務端驗證,記服務端當前時間為:
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端生成的是否相同即可。
邊界情況如何處理?
服務器和手機的時間可能存在時間差(還有網絡延遲造成的時間差),為了彌補時間差造成的步數不一致的問題,一般會向前和向后多算一步,只要這三步有一步是符合條件的,則符合條件。文章來源地址http://www.zghlxwxcb.cn/news/detail-686294.html
到了這里,關于【TOTP】TOTP算法(基于時間的一次性動態(tài)密碼)原理介紹 & 簡要邏輯實現(xiàn)說明的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!