引用:http://www.cnblogs.com/wangxin201492/p/5030943.htmlhtml
OTP(One-Time Password)
譯爲一次性密碼,也稱動態口令。是使用密碼技術實現的在客戶端和服務器之間經過共享祕密的一種認證技術,是一種強認證技術,是加強目前靜態口令認證的一種很是方便技術手段,是一種重要的雙因素認證技術。算法
動態口令的基本認證原理是在認證雙方共享密鑰,也稱種子密鑰,並使用的同一個種子密鑰對某一個事件計數、或時間值、或者是異步挑戰數進行密碼算法計算,使用的算法有對稱算法
、HASH
、HMAC
,以後比較計算值是否一致進行認證。能夠作到一次一個動態口令,使用後做廢,口令長度一般爲6-8個數字,使用方便,與一般的靜態口令認證方式相似.安全
TOTP
)HOTP
)OCRA
)HOTP(HMAC-base On-Time Password)
譯爲基於HMAC的一次性密碼,也稱事件同步的動態密碼。服務器
$$ HTOP(K,C) = Truncate(HMAC-SHA-1(K,C))$$
客戶端和服務器事先協商好一個密鑰K
,用於一次性密碼的生成過程。此外,客戶端和服務器各有一個計數器C
,而且事先將計數值同步。而Truncate
是爲了得到一個符合HTOP
要求的值。網絡
TOTP(Time-base One-Time Password)
譯爲基於時間的一次性密碼,也稱時間同步的動態密碼.異步
$$TOTP = Truncate(HMAC-SHA-1(K,T))$$TOTP
是HOTP
的一個變種,將HOTP
中的計數器C
替換爲依託時間的參數T
,T是由當前時間(CurrentUnixTime
、初始時間(T0)、步長(X)決定的。即:測試
$$ T = (Current Unix time - T0) / X $$google
CurrentUnixTime
:當前的Unix時間。T0
: 開始計步初始化時間,默認爲0X
: 步長,默認狀況下爲30sint32
,由於它在2038年將超出上限。該算法的安全性和健壯性徹底依賴於其關鍵實現環節HOTP
。code
安全性分析的結果是:在全部的測試中,該算法的結果均勻的、獨立的分佈。這個分析顯示,最好的攻擊和破解TOTP(HOTP)
的方法是暴力破解。而在算法要求環節,要求key必須有足夠的隨機性。htm
在同一個步長內,動態密碼生成的結果是同樣的。當一個驗證系統得到這個動態密碼的時候,它並不知道動態密碼的生產者是在哪一個步長內產生的密碼。因爲網絡的緣由,客戶端生成密碼的時間和服務器接受密碼的時間可能差距會很大,頗有可能使得這2個時間不在同一個步長內。當一個動態密碼產生在一個步長的結尾,服務器收到的密碼頗有可能在下一個步長的開始。
驗證系統應該設置一個策略容許動態密碼的傳輸時延,不該該只驗證當前步長的動態密碼,還應該驗證以前幾個步長的動態密碼。但越大的傳輸時延窗口設置,就會帶來越大的風險被攻擊,咱們推薦最多設置一個時延窗口來兼容傳輸延時。
步長大小的設置,直接影響安全性和可用性:
30s
,這個默認值是在權衡了安全性和可用性的基礎上提出的。