新聞中心
在業(yè)務(wù)中,為安全起見(jiàn),常常需要二次驗(yàn)證。其流程一般為,密碼驗(yàn)證之后,需要再次輸入一個(gè)一次性的密碼(一般為位數(shù)較短的數(shù)字),才能完成驗(yàn)證。二次驗(yàn)證一般需要同時(shí)驗(yàn)證設(shè)備的***性。

從驗(yàn)證方式上看,二次驗(yàn)證可以通過(guò)短信驗(yàn)證或 APP 驗(yàn)證(Google Authenticator)。對(duì)于短信驗(yàn)證,優(yōu)點(diǎn)是操作方便,不需安裝額外的 APP;缺點(diǎn)是實(shí)時(shí)性較差,依賴(lài)短信,有被竊聽(tīng)的風(fēng)險(xiǎn)。APP 方式正好相反。
[[122653]]
google authenticator
以此來(lái)看,在業(yè)務(wù)初期,宜使用短信驗(yàn)證方式,減少用戶(hù)輸入的復(fù)雜度。待用戶(hù)量和用戶(hù)黏度上去之后可以考慮換用 APP 驗(yàn)證。畢竟,在已經(jīng)安裝 APP 的情況下,這種方式更加便捷和安全。
OTP(one time password),即一次性驗(yàn)證密碼,也稱(chēng)動(dòng)態(tài)口令。一次性密碼的產(chǎn)生方式,主要是以時(shí)間差做為服務(wù)器與密碼產(chǎn)生器的同步條件。在需要登錄的時(shí)候,就利用密碼產(chǎn)生器產(chǎn)生一次性密碼,OTP 一般分為計(jì)次使用(HOTP)以及計(jì)時(shí)使用(TOTP)兩種,計(jì)次使用的 OTP 產(chǎn)出后,可在不限時(shí)間內(nèi)使用;計(jì)時(shí)使用的 OTP 則可設(shè)定密碼有效時(shí)間,從 30 秒到兩分鐘不等,而 OTP 在進(jìn)行認(rèn)證之后即廢棄不用,下次認(rèn)證必須使用新的密碼,增加了試圖不經(jīng)授權(quán)存取有限制資源的難度1。
Google Authenticator 的二次驗(yàn)證也是使用的 OTP。其核心原理是:服務(wù)器和客戶(hù)端(一般是Google Authenticatorapp)保存同一份密鑰,客戶(hù)端根據(jù)該密鑰和當(dāng)前時(shí)間戳計(jì)算得到 6 位數(shù)字,發(fā)到服務(wù)器,服務(wù)器根據(jù)同樣的算法得到 6 位數(shù)字。做比較之后判斷客戶(hù)端傳來(lái)的數(shù)字是否合法。詳述如下2:
Google Authenticator View
對(duì)于 HOTP,客戶(hù)端和服務(wù)器事先協(xié)商好一個(gè)密鑰 K,用于一次性密碼的生成過(guò)程,此密鑰不被任何第三方所知道。此外,客戶(hù)端和服務(wù)器各有一個(gè)計(jì)數(shù)器 C,并且事先將計(jì)數(shù)值同步。
進(jìn)行驗(yàn)證時(shí),客戶(hù)端對(duì)密鑰和計(jì)數(shù)器的組合(K,C)使用 HMAC(Hash-based Message Authentication Code)算法計(jì)算一次性密碼,公式如下:
HOTP(K,C)=Truncate(HMAC_SHA1(K,C))
經(jīng)過(guò)截?cái)?,得到?OTP 一般是 6 位數(shù),用戶(hù)將得到的 OTP 發(fā)送到服務(wù)器,服務(wù)器端經(jīng)過(guò)同樣的驗(yàn)證,驗(yàn)證成功則計(jì)數(shù)器加 1。
TOTP 將 HOTP 中的計(jì)數(shù)器 C 用當(dāng)前時(shí)間來(lái)替代,于是就得到了隨著時(shí)間變化的一次性密碼。也就是說(shuō),當(dāng)給定密鑰之后,每一時(shí)刻的 OTP 都是固定不變的(假設(shè)間隔時(shí)間固定為 T)。
這里需要稍加注意的地方是間隔時(shí)間的選擇,不能太長(zhǎng),否則安全性不能保證;也不能太短,否則用戶(hù)無(wú)法及時(shí)驗(yàn)證。Google 的選擇是 30 秒。當(dāng)我們使用 Google Authenticator 驗(yàn)證時(shí),因?yàn)?OTP 的獲得沒(méi)有延遲,因此 30 秒是個(gè)比較合理的數(shù)字;如果我們想要通過(guò)短信進(jìn)行驗(yàn)證,考慮到短信推送的延遲和用戶(hù)讀取的延遲,30 秒的時(shí)間可能有點(diǎn)短。通常情況下短信驗(yàn)證的有效時(shí)間在 1 分鐘到 2 分鐘之間,這是一個(gè)比較合理的數(shù)字。
TOTP 還有個(gè)邊界問(wèn)題,如下圖所示。當(dāng)在 OA 時(shí)刻發(fā)起短信驗(yàn)證請(qǐng)求,在理想情況下,我們只有在 OA 時(shí)間段發(fā)起驗(yàn)證,驗(yàn)證才能成功。也就是說(shuō),用戶(hù)的有效輸入時(shí)間在 T(當(dāng)發(fā)起時(shí)刻靠近 O 時(shí))到 0 之間(當(dāng)發(fā)起時(shí)刻靠近 A),也就是說(shuō),用戶(hù)有一定的概率驗(yàn)證幾乎必然失敗(發(fā)起時(shí)刻靠近 A,考慮到 OTP 獲取延遲和用戶(hù)輸入延遲),這顯然是不合理的。
otp verification
可以通過(guò)在驗(yàn)證時(shí)刻驗(yàn)證當(dāng)前時(shí)刻以及前 N 個(gè)時(shí)間片來(lái)解決這個(gè)問(wèn)題。如圖所示,我們驗(yàn)證當(dāng)前時(shí)刻和前一時(shí)刻,當(dāng)在 OA 時(shí)間片發(fā)起驗(yàn)證時(shí),驗(yàn)證區(qū)間是 OB 段,這樣用戶(hù)的有效輸入時(shí)間就是 T~2T,如果我們?nèi)?T 為 1 分鐘,這會(huì)是一個(gè)比較合理的結(jié)果。
真實(shí)情況下還要考慮客戶(hù)端和服務(wù)器的時(shí)鐘偏差,不再贅述。(如果使用短信驗(yàn)證,基本不存在這個(gè)問(wèn)題,因?yàn)榘l(fā)起驗(yàn)證的 OTP 也是由服務(wù)器產(chǎn)生的。)
網(wǎng)站欄目:短信驗(yàn)證的設(shè)計(jì)
分享地址:http://www.5511xx.com/article/cdsodod.html


咨詢(xún)
建站咨詢(xún)
