動(dòng)態(tài)令牌-(OTP,HOTP,TOTP)-基本原理_第1頁(yè)
動(dòng)態(tài)令牌-(OTP,HOTP,TOTP)-基本原理_第2頁(yè)
動(dòng)態(tài)令牌-(OTP,HOTP,TOTP)-基本原理_第3頁(yè)
動(dòng)態(tài)令牌-(OTP,HOTP,TOTP)-基本原理_第4頁(yè)
動(dòng)態(tài)令牌-(OTP,HOTP,TOTP)-基本原理_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、OTP(K,C) = Truncate(HMAC-SHA-1(K,C)其中,K 表示秘鑰串;C 是一個(gè)數(shù)字,表示隨機(jī)數(shù);HMAC-SHA-1 表示使用SHA-1 做HMAC;Truncate 是一個(gè)函數(shù),就是怎么截取加密后的串,并取加密后串的哪些字段組成一個(gè)數(shù)字。對(duì) HMAC-SHA-1 方式加密來(lái)說(shuō),Truncate 實(shí)現(xiàn)如下。HMAC-SHA-1 加密后的長(zhǎng)度得到一個(gè) 20 字節(jié)的密串;動(dòng)態(tài)令牌-(OTP,HOTP,TOTP)-基本原理是 One-Time Password 的簡(jiǎn)寫,表示一次性密碼。HOTP 是HMAC-based One-Time Password 的簡(jiǎn)寫,表示基于HMA

2、C 算法加密的一次性密碼。是事件同步,通過(guò)某一特定的事件次序及相同的種子值作為輸入,通過(guò)HASH 算法運(yùn)算出一致的密碼。TOTP 是 Time-based One-Time Password 的簡(jiǎn)寫,表示基于時(shí)間戳算法的一次性密碼。是時(shí)間同步,基于客戶端的動(dòng)態(tài)口令和動(dòng)態(tài)口令驗(yàn)證服務(wù)器的時(shí)間比對(duì),一般每60 秒產(chǎn)生一個(gè)新口令,要求客戶端和服務(wù)器能夠十分精確的保持正確的時(shí)鐘,客戶端和服務(wù)端基于時(shí)間計(jì)算的動(dòng)態(tài)口令 才能一致。原理介紹OTP 基本原理計(jì)算 OTP 串的公式取這個(gè) 20 字節(jié)的密串的最后一個(gè)字節(jié),取這字節(jié)的低 4 位,作為截取加密串的下標(biāo)偏移量;按照下標(biāo)偏移量開始,獲取 4 個(gè)字節(jié),按照

3、大端方式組成一個(gè)整數(shù);截取這個(gè)整數(shù)的后 6 位或者 8 位轉(zhuǎn)成字符串返回。Java 代碼實(shí)現(xiàn)public static String generateOTP(String K,String C,String returnDigits,String crypto) intcodeDigits = Integer.decode(returnDigits).intValue();String result = null;/ K 是密碼/ C 是產(chǎn)生的隨機(jī)數(shù)/ crypto 是加密算法 HMAC-SHA-1 byte hash = hmac_sha(crypto, K, C);/ hash 為 20

4、字節(jié)的字符串/ put selected bytes into result int/ 獲取 hash 最后一個(gè)字節(jié)的低 4 位,作為選擇結(jié)果的開始下標(biāo)偏移int offset = hashhash.length - 1 & 0 xf;/ 獲取 4 個(gè)字節(jié)組成一個(gè)整數(shù),其中第一個(gè)字節(jié)最高位為符號(hào)位,不獲取,使用0 x7fint binary =(hashoffset & 0 x7f) 24) | (hashoffset + 1 & 0 xff) 16) | (hashoffset + 2 & 0 xff) 8) | (hashoffset + 3 & 0 xff);/ 獲取這個(gè)整數(shù)的后 6 位

5、(可以根據(jù)需要取后 8 位)intotp = binary % 1000000;/ 將數(shù)字轉(zhuǎn)成字符串,不夠 6 位前面補(bǔ) 0result = Integer.toString(otp);while (result.length() import base64base64.b32encode(This is my secret key) KRUGS4ZANFZSA3LZEBZWKY3SMV2CA23FPE=secretKey = base64.b32encode(This is my secret key) import pyotptotp = pyotp.TOTP(secretKey)totp

6、.now() 423779程序的簡(jiǎn)單說(shuō)明加載 base64 的模塊,將我的秘鑰做一下 base32 的加密,加載 pyotp 模塊,otp 使用base32 加密后的秘鑰傳作為種子,生成隨機(jī)數(shù)字驗(yàn)證的??梢允褂胮yotp 和 expect 一起實(shí)現(xiàn)基于google authenticator 的自動(dòng)登錄(免去每次雙認(rèn)證,輸入密碼和動(dòng)態(tài)密碼)。pyotp 的 TOTP 的使用說(shuō)明(官網(wǎng))totp = pyotp.TOTP(base32secret3232)totp.now() # = 492039# OTP verified for current time totp.verify(492039

7、) # = True time.sleep(30) totp.verify(492039) # = Falsepyotp 的 HOTP 的使用說(shuō)明(官網(wǎng))hotp = pyotp.HOTP()hotp.at(0) # = 260182 hotp.at(1) # = 55283 hotp.at(1401) # = 316439# OTP verified with a counter hotp.verify(316439, 1401) # = True hotp.verify(316439, 1402) # = False使用場(chǎng)景服務(wù)器登錄動(dòng)態(tài)密碼驗(yàn)證(如阿里云 ECS 登錄,騰訊機(jī)房服務(wù)器登錄

8、等);公司 VPN 登錄雙因素驗(yàn)證;網(wǎng)絡(luò)接入 radius 動(dòng)態(tài)密碼;銀行轉(zhuǎn)賬動(dòng)態(tài)密碼;網(wǎng)銀、網(wǎng)絡(luò)游戲的實(shí)體動(dòng)態(tài)口令牌;等動(dòng)態(tài)密碼驗(yàn)證的應(yīng)用場(chǎng)景。市面上基于 HOTP 的產(chǎn)品寧盾令牌阿里巴巴的 身份寶Google 的 身份驗(yàn)證器(google-authenticator)Google 基于 TOTP 的開源實(shí)現(xiàn)/google/google-authenticator RFC6238 中TOTP 基于java 代碼的實(shí)現(xiàn)。golang 的一個(gè) otp 做的不錯(cuò)的實(shí)現(xiàn)/gitchs/gootpRFC 參考RFC 4226 One-Time Password and HMAC-based One-Time Password. RFC 6238 Time-based One-Time Password.RFC 2104 HMAC Keyed-Hashing for Messag

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論