动态密码卡TOTP算法
TOTP NET實(shí)現(xiàn):http://googleauthcsharp.codeplex.com/
引用:http://www.cnblogs.com/wangxin201492/p/5030943.html
1. OTP
OTP(One-Time Password)譯為一次性密碼,也稱動(dòng)態(tài)口令。是使用密碼技術(shù)實(shí)現(xiàn)的在客戶端和服務(wù)器之間通過(guò)共享秘密的一種認(rèn)證技術(shù),是一種強(qiáng)認(rèn)證技術(shù),是增強(qiáng)目前靜態(tài)口令認(rèn)證的一種非常方便技術(shù)手段,是一種重要的雙因素認(rèn)證技術(shù)。
1.1 OTP的認(rèn)證原理
動(dòng)態(tài)口令的基本認(rèn)證原理是在認(rèn)證雙方共享密鑰,也稱種子密鑰,并使用的同一個(gè)種子密鑰對(duì)某一個(gè)事件計(jì)數(shù)、或時(shí)間值、或者是異步挑戰(zhàn)數(shù)進(jìn)行密碼算法計(jì)算,使用的算法有對(duì)稱算法、HASH、HMAC,之后比較計(jì)算值是否一致進(jìn)行認(rèn)證。可以做到一次一個(gè)動(dòng)態(tài)口令,使用后作廢,口令長(zhǎng)度通常為6-8個(gè)數(shù)字,使用方便,與通常的靜態(tài)口令認(rèn)證方式類似.
1.3 OTP的實(shí)現(xiàn)方式
2. HOTP
HOTP(HMAC-base On-Time Password)譯為基于HMAC的一次性密碼,也稱事件同步的動(dòng)態(tài)密碼。
2.1 HOTP的工作原理
$$ HTOP(K,C) = Truncate(HMAC-SHA-1(K,C))$$
客戶端和服務(wù)器事先協(xié)商好一個(gè)密鑰K,用于一次性密碼的生成過(guò)程。此外,客戶端和服務(wù)器各有一個(gè)計(jì)數(shù)器C,并且事先將計(jì)數(shù)值同步。而Truncate是為了獲得一個(gè)符合HTOP要求的值。
3 TOTP
TOTP(Time-base One-Time Password)譯為基于時(shí)間的一次性密碼,也稱時(shí)間同步的動(dòng)態(tài)密碼.
3.1 TOTP的工作原理
$$TOTP = Truncate(HMAC-SHA-1(K,T))$$
TOTP是HOTP的一個(gè)變種,將HOTP中的計(jì)數(shù)器C替換為依托時(shí)間的參數(shù)T,T是由當(dāng)前時(shí)間(CurrentUnixTime、初始時(shí)間(T0)、步長(zhǎng)(X)決定的。即:
$$ T = (Current Unix time - T0) / X $$
- CurrentUnixTime:當(dāng)前的Unix時(shí)間。
- T0: 開(kāi)始計(jì)步初始化時(shí)間,默認(rèn)為0
- X?: 步長(zhǎng),默認(rèn)情況下為30s
3.2 TOTP的要求
3.3 安全性考慮
3.3.1 安全性分析
該算法的安全性和健壯性完全依賴于其關(guān)鍵實(shí)現(xiàn)環(huán)節(jié)HOTP。
安全性分析的結(jié)果是:在所有的測(cè)試中,該算法的結(jié)果均勻的、獨(dú)立的分布。這個(gè)分析顯示,最好的攻擊和破解TOTP(HOTP)的方法是暴力破解。而在算法要求環(huán)節(jié),要求key必須有足夠的隨機(jī)性。
3.3.2 時(shí)延兼容
在同一個(gè)步長(zhǎng)內(nèi),動(dòng)態(tài)密碼生成的結(jié)果是一樣的。當(dāng)一個(gè)驗(yàn)證系統(tǒng)獲得這個(gè)動(dòng)態(tài)密碼的時(shí)候,它并不知道動(dòng)態(tài)密碼的生產(chǎn)者是在哪個(gè)步長(zhǎng)內(nèi)產(chǎn)生的密碼。由于網(wǎng)絡(luò)的原因,客戶端生成密碼的時(shí)間和服務(wù)器接受密碼的時(shí)間可能差距會(huì)很大,很有可能使得這2個(gè)時(shí)間不在同一個(gè)步長(zhǎng)內(nèi)。當(dāng)一個(gè)動(dòng)態(tài)密碼產(chǎn)生在一個(gè)步長(zhǎng)的結(jié)尾,服務(wù)器收到的密碼很有可能在下一個(gè)步長(zhǎng)的開(kāi)始。
驗(yàn)證系統(tǒng)應(yīng)該設(shè)置一個(gè)策略允許動(dòng)態(tài)密碼的傳輸時(shí)延,不應(yīng)該只驗(yàn)證當(dāng)前步長(zhǎng)的動(dòng)態(tài)密碼,還應(yīng)該驗(yàn)證之前幾個(gè)步長(zhǎng)的動(dòng)態(tài)密碼。但越大的傳輸時(shí)延窗口設(shè)置,就會(huì)帶來(lái)越大的風(fēng)險(xiǎn)被攻擊,我們推薦最多設(shè)置一個(gè)時(shí)延窗口來(lái)兼容傳輸延時(shí)。
3.3.3 步長(zhǎng)設(shè)置
步長(zhǎng)大小的設(shè)置,直接影響安全性和可用性:
轉(zhuǎn)載于:https://www.cnblogs.com/Horne/p/6945862.html
總結(jié)
以上是生活随笔為你收集整理的动态密码卡TOTP算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MPP 二、Greenplum数据加载
- 下一篇: 《程序猿的呐喊》读书笔记(下)