谷歌验证 (Google Authenticator) 的实现原理是什么?
生活随笔
收集整理的這篇文章主要介紹了
谷歌验证 (Google Authenticator) 的实现原理是什么?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
著作權歸作者所有。
商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
作者:徐小花
鏈接:http://www.zhihu.com/question/20462696/answer/18731073
來源:知乎
開啟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』,下圖:
<img src="https://pic1.zhimg.com/d37d311d9464d4c24a37e70d541364bc_b.jpg" data-rawwidth="200" data-rawheight="200" class="content_image" width="200">
3.客戶端掃描二維碼,把密鑰『DPI45HKISEXU6HG7』保存在客戶端。
二、用戶需要登陸時
1.客戶端每30秒使用密鑰『DPI45HKISEXU6HG7』和時間戳通過一種『算法』生成一個6位數字的一次性密碼,如『684060』。如下圖android版界面:
<img src="https://pic1.zhimg.com/c2056261a0b106af19517697887c0b38_b.jpg" data-rawwidth="281" data-rawheight="398" class="content_image" width="281">
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.現實生活中,網銀、網絡游戲的實體動態口令牌其實原理也差不多,大家可以自行腦補下,謝謝。
<img src="https://pic2.zhimg.com/fc0617ba6b2062bec68c87eb481d25c1_b.jpg" data-rawwidth="302" data-rawheight="144" class="content_image" width="302">
商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
作者:徐小花
鏈接:http://www.zhihu.com/question/20462696/answer/18731073
來源:知乎
開啟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』,下圖:
<img src="https://pic1.zhimg.com/d37d311d9464d4c24a37e70d541364bc_b.jpg" data-rawwidth="200" data-rawheight="200" class="content_image" width="200">
3.客戶端掃描二維碼,把密鑰『DPI45HKISEXU6HG7』保存在客戶端。
二、用戶需要登陸時
1.客戶端每30秒使用密鑰『DPI45HKISEXU6HG7』和時間戳通過一種『算法』生成一個6位數字的一次性密碼,如『684060』。如下圖android版界面:
<img src="https://pic1.zhimg.com/c2056261a0b106af19517697887c0b38_b.jpg" data-rawwidth="281" data-rawheight="398" class="content_image" width="281">
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.現實生活中,網銀、網絡游戲的實體動態口令牌其實原理也差不多,大家可以自行腦補下,謝謝。
<img src="https://pic2.zhimg.com/fc0617ba6b2062bec68c87eb481d25c1_b.jpg" data-rawwidth="302" data-rawheight="144" class="content_image" width="302">
總結
以上是生活随笔為你收集整理的谷歌验证 (Google Authenticator) 的实现原理是什么?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软今天发布了.NET 8 的首个预览版
- 下一篇: 索尼仍反对微软收购动视暴雪,尚未与其达成