簡(jiǎn)述TOTP算法

你使用過(guò)U盾嗎?U盾最大的特點(diǎn)就是在進(jìn)行轉(zhuǎn)賬和支付時(shí),需要輸入密碼以及U盾中的動(dòng)態(tài)密碼。這個(gè)動(dòng)態(tài)密碼可不是隨便給出的幾個(gè)數(shù)字,它需要使用相應(yīng)的加密算法來(lái)保障其安全性,而TOTP算法就是常用的動(dòng)態(tài)密碼算法。

TOTP算法簡(jiǎn)介

TOTP全稱為“Time-based One-time Password algorithm”(基于時(shí)間的一次性密碼算法),它是一種從共享密鑰和當(dāng)前時(shí)間計(jì)算一次性密碼的算法,是OATH(開放身份驗(yàn)證計(jì)劃)的基石,并被用于許多雙因素身份驗(yàn)證系統(tǒng)。

TOTP

TOTP算法的原理

TOTP算法是基于散列的消息認(rèn)證碼(HMAC)的示例,它使用加密哈希函數(shù)將密鑰與當(dāng)前時(shí)間戳組合在一起以生成一次性密碼。 由于網(wǎng)絡(luò)延遲和不同步時(shí)鐘可能導(dǎo)致密碼接收者必須嘗試一系列可能的時(shí)間來(lái)進(jìn)行身份驗(yàn)證,因此時(shí)間戳通常以30秒的間隔增加,從而減少了潛在的搜索空間。

TOTP算法的流程

TOTP基于具有時(shí)間戳計(jì)數(shù)器的OTP(一次性密碼),其算法公式為TOTP=HMAC-SHA-1(K, (T - T0)/X),其中K為共享密鑰,T為當(dāng)前時(shí)間戳,T0為開始的時(shí)間戳,X為時(shí)間步長(zhǎng)。

  1. 密鑰生成:在為帳戶設(shè)置TOTP時(shí),將生成一個(gè)唯一的密鑰。該密鑰在用戶設(shè)備和認(rèn)證服務(wù)器之間共享。
  2. 時(shí)間同步:用戶設(shè)備和認(rèn)證服務(wù)器需要同步到相同的時(shí)間源。TOTP算法依賴于當(dāng)前時(shí)間來(lái)生成一次性密碼。
  3. OTP生成:TOTP算法將密鑰和當(dāng)前時(shí)間結(jié)合起來(lái),應(yīng)用Hash函數(shù)生成一次性密碼。此密碼通常包含6-8位數(shù)字,并具有有限的有效期,例如30或60秒。
  4. OTP驗(yàn)證:當(dāng)用戶嘗試登錄時(shí),輸入常規(guī)密碼以及由TOTP應(yīng)用程序或設(shè)備生成的一次性密碼。然后,認(rèn)證服務(wù)器根據(jù)共享密鑰和當(dāng)前時(shí)間獨(dú)立生成預(yù)期的OTP。如果用戶輸入的OTP與服務(wù)器生成的OTP匹配,則授權(quán)訪問(wèn)。

通過(guò)客戶端和服務(wù)器持有相同的密鑰并基于時(shí)間基數(shù),服務(wù)端和客戶端采用相同的Hash算法,計(jì)算出長(zhǎng)度為六位的校驗(yàn)碼。當(dāng)客戶端和服務(wù)端計(jì)算出的校驗(yàn)碼相同時(shí),則驗(yàn)證通過(guò)。

TOTP

TOTP算法的優(yōu)缺點(diǎn)

  • 優(yōu)點(diǎn):TOTP是“基于時(shí)間的一次性密碼”,因此在不斷變化,這意味著,即使攻擊者可以偷看當(dāng)前令牌,幾秒鐘之后,它將被新的令牌代替。
  • 缺點(diǎn):TOTP需要令牌生成器和認(rèn)證服務(wù)器將其時(shí)鐘設(shè)置為大致相同的時(shí)間,如若令牌生成器丟失或時(shí)間不一致,則會(huì)帶來(lái)很大的麻煩。

免責(zé)聲明:素材源于網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系刪稿。