標籤:

谷歌驗證 (Google Authenticator) 的實現原理是什麼?


開啟Google的登陸二步驗證(即Google Authenticator服務)後用戶登陸時需要輸入額外由手機客戶端生成的一次性密碼。

實現Google Authenticator功能需要伺服器端和客戶端的支持。伺服器端負責密鑰的生成、驗證一次性密碼是否正確。客戶端記錄密鑰後生成一次性密碼。

目前客戶端有:

android版: Google 身份驗證器

iOS版:https://itunes.apple.com/cn/app/google-authenticator/id388497605

實現原理:

一、用戶需要開啟Google Authenticator服務時,

1.伺服器隨機生成一個類似於『DPI45HKISEXU6HG7』的密鑰,並且把這個密鑰保存在資料庫中。

2.在頁面上顯示一個二維碼,內容是一個URI地址(otpauth://totp/賬號?secret=密鑰),如『otpauth://totp/kisexu@gmail.com?secret=DPI45HCEBCJK6HG7』,下圖:

otpauth://totp/kisexu@gmail.com?secret=DPI45HCEBCJK6HG7 (二維碼自動識別)

3.客戶端掃描二維碼,把密鑰『DPI45HKISEXU6HG7』保存在客戶端。

二、用戶需要登陸時

1.客戶端每30秒使用密鑰『DPI45HKISEXU6HG7』和時間戳通過一種『演算法』生成一個6位數字的一次性密碼,如『684060』。如下圖android版界面:

2.用戶登陸時輸入一次性密碼『684060』。

3.伺服器端使用保存在資料庫中的密鑰『DPI45HKISEXU6HG7』和時間戳通過同一種『演算法』生成一個6位數字的一次性密碼。大家都懂控制變數法,如果演算法相同、密鑰相同,又是同一個時間(時間戳相同),那麼客戶端和伺服器計算出的一次性密碼是一樣的。伺服器驗證時如果一樣,就登錄成功了。

Tips:

1.這種『演算法』是公開的,所以伺服器端也有很多開源的實現,比如php版的:https://github.com/PHPGangsta/GoogleAuthenticator 。上github搜索『Google Authenticator』可以找到更多語言版的Google Authenticator。

2.所以,你在自己的項目可以輕鬆加入對Google Authenticator的支持,在一個客戶端上顯示多個賬戶的效果可以看上面android版界面的截圖。目前dropbox、lastpass、wordpress,甚至vps等第三方應用都支持Google Authenticator登陸,請自行搜索。

3.現實生活中,網銀、網路遊戲的實體動態口令牌其實原理也差不多,大家可以自行腦補下,謝謝。


原理可以參考這篇文章(SEETEE ? Google賬戶兩步驗證的工作原理)

客戶端和伺服器事先協商好一個密鑰K,用於一次性密碼的生成過程,此密鑰不被任何第三方所知道。此外,客戶端和伺服器各有一個計數器C,並且事先將計數值同步。

進行驗證時,客戶端對密鑰和計數器的組合(K,C)使用HMAC(Hash-based Message Authentication Code)演算法計算一次性密碼,公式如下:

HOTP(K,C) = Truncate(HMAC-SHA-1(K,C))

上面採用了HMAC-SHA-1,當然也可以使用HMAC-MD5等。HMAC演算法得出的值位數比較多,不方便用戶輸入,因此需要截斷(Truncate)成為一組不太長十進位數(例如6位)。計算完成之後客戶端計數器C計數值加1。用戶將這一組十進位數輸入並且提交之後,伺服器端同樣的計算,並且與用戶提交的數值比較,如果相同,則驗證通過,伺服器端將計數值C增加1。如果不相同,則驗證失敗。


這不是什麼新奇的技術,國內都使用了N多年了,比如說銀行用的動態令牌

本質上是基於共享密鑰的身份認證,當你從銀行領取一個動態令牌時,已經做過了密鑰分發,Google Authenticator的二維碼綁定過程其實就是密鑰分發的過程而已。

實現方式主要分為兩種:HOTP,TOTP,國內主要使用TOTP,因為時間同步並不是太難的事。

原理請參看RFC4226 http://www.ietf.org/rfc/rfc4226.txt,一點都不難。

這是國內某賣key公司2014年OTP動態令牌銷量:

2014年竟然賣出了2000多萬支,相比上年大漲500%多

OTP用於二次認證可以有效的保護賬號安全,即使網站被脫褲, 也不用擔心別人用你的用戶名口令登陸你的京東下單,在這個網站被頻發脫褲的年代,二次認證還是蠻需要的,國內已有廠商在嘗試建立二次認證雲服務了,是誰?過段時間大家就知道了。

想到哪 ,寫到哪!


首先,作為數字貨幣交易所從業人員,安全是第一重要的事情。在現有的互聯網賬號體系中,其實你的賬號、密碼都是非常不安全,大量的掃號器、盜號木馬等,讓你的賬戶很多時候是暴露在很多「社工」面前的。

為了讓用戶用上更好的「google 二次驗證碼」,減少被盜號的風險。我們特意開發了「微信小程序版」 的」二次驗證碼」,這個軟體完美地使用了小程序的特性:二維碼掃描、本地存儲、低頻率使用,不佔本地磁碟。

好吧,算我是打廣告了,我們初衷真的是為了大家賬戶安全而進行的這個開發。打開微信搜索「二次驗證碼」,或者掃描二維碼。

希望大家在了解「Google二次驗證」的原理之後,儘可能啟用二次驗證碼。


How does Google Authenticator work? 先翻牆,然後可以搜索 how otp works


推薦閱讀:

TAG:互聯網 |