日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

动态密码卡TOTP算法

發(fā)布時(shí)間:2024/6/21 编程问答 75 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态密码卡TOTP算法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)方式

  • 時(shí)間同步(TOTP)
  • 事件同步(HOTP)
  • 挑戰(zhàn)/應(yīng)答(OCRA)
  • 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的要求

  • 客戶端和服務(wù)器必須能夠彼此知道或者推算出對(duì)方的Unix Time
  • 客戶端和服務(wù)器端必須共享一個(gè)密鑰
  • 算法必須使用HOTP作為其關(guān)鍵實(shí)現(xiàn)環(huán)節(jié)
  • 客戶端和服務(wù)器端必須使用相同的步長(zhǎng)X
  • 每一個(gè)客戶端必須擁有不同的密鑰
  • 密鑰的生成必須足夠隨機(jī)
  • 密鑰必須儲(chǔ)存在防篡改的設(shè)備上,而且不能在不安全的情況下被訪問(wèn)或使用。
  • 對(duì)該算法中T的實(shí)現(xiàn)必須大于int32,因?yàn)樗?038年將超出上限。
  • T0和X的協(xié)商必須在之前的步驟中就已經(jīng)做好了。
  • 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è)置,直接影響安全性和可用性:

  • 一個(gè)越大的步長(zhǎng),就會(huì)導(dǎo)致一個(gè)越大的窗口被攻擊。當(dāng)一個(gè)動(dòng)態(tài)密碼被生成而且在其有效期內(nèi)暴露在第三方環(huán)境下,那么第三方系統(tǒng)就可以在該動(dòng)態(tài)密碼無(wú)效前使用這個(gè)密碼。
  • 我們推薦默認(rèn)的步長(zhǎng)時(shí)間是30s,這個(gè)默認(rèn)值是在權(quán)衡了安全性和可用性的基礎(chǔ)上提出的。
  • 下一個(gè)動(dòng)態(tài)密碼肯定會(huì)在下一個(gè)步長(zhǎng)生成,用戶必須等待當(dāng)前步長(zhǎng)的結(jié)束。這個(gè)等待時(shí)間的理想值會(huì)隨著步長(zhǎng)的設(shè)置而增大。一個(gè)太長(zhǎng)的窗口設(shè)置不使用網(wǎng)絡(luò)用戶登錄這種場(chǎng)景,用戶可能等不了一個(gè)步長(zhǎng)的時(shí)間,就放棄登錄
  • 轉(zhuǎn)載于:https://www.cnblogs.com/Horne/p/6945862.html

    總結(jié)

    以上是生活随笔為你收集整理的动态密码卡TOTP算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。