亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android中新引進(jìn)的Google Authenticator驗(yàn)證系統(tǒng)工作原理淺析

 更新時間:2014年10月15日 09:50:17   投稿:junjie  
這篇文章主要介紹了Android中新引進(jìn)的Google Authenticator驗(yàn)證系統(tǒng)工作原理淺析,需要的朋友可以參考下

為了改進(jìn)Android的安全問題,Google在Android系統(tǒng)中引入了谷歌驗(yàn)證應(yīng)用(Google Authenticator)來保證賬號的安全。谷歌驗(yàn)證應(yīng)用的使用方法是:用戶安裝手機(jī)客戶端,生成臨時身份驗(yàn)證碼,提交到服務(wù)器驗(yàn)證身份,類似的驗(yàn)證系統(tǒng)還有Authy。Robbie在其GitHub頁面發(fā)布了自己用Go語言實(shí)現(xiàn)的版本,并撰寫了一篇博文來解釋其工作原理。

通常來講,身份驗(yàn)證系統(tǒng)都實(shí)現(xiàn)了基于時間的一次性密碼算法,即著名的TOTP(Time-Based One-Time Password)。該算法由三部分組成:

1.一個共享密鑰(一系列二進(jìn)制數(shù)據(jù))
2.一個基于當(dāng)前時間的輸入
3.一個簽名函數(shù)

1、 共享密鑰

用戶在創(chuàng)建手機(jī)端身份驗(yàn)證系統(tǒng)時需要獲取共享密鑰。獲取的方式包括用識別程序掃描給定二維碼或者直接手動輸入。密鑰是三十二位加密,至于為什么不是六十四位,可以參考維基百科給出的解釋。

對于那些手動輸入的用戶,谷歌身份驗(yàn)證系統(tǒng)給出的共享密鑰有如下的格式:

復(fù)制代碼 代碼如下:

xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx

256位數(shù)據(jù),當(dāng)然別的驗(yàn)證系統(tǒng)可能會更短。

而對于掃描的用戶,QR識別以后是類似下面的URL鏈接:

otpauth://totp/Google%3Ayourname@gmail.com?secret=xxxx&issuer=Google

2、 基于當(dāng)前時間的輸入

這個輸入是基于用戶手機(jī)時間產(chǎn)生的,一旦用戶完成第一步的密鑰共享,就和身份驗(yàn)證服務(wù)器沒有關(guān)系了。但是這里比較重要的是用戶手機(jī)時間要準(zhǔn)確,因?yàn)閺乃惴ㄔ韥碇v,身份驗(yàn)證服務(wù)器會基于同樣的時間來重復(fù)進(jìn)行用戶手機(jī)的運(yùn)算。進(jìn)一步來說,服務(wù)器會計(jì)算當(dāng)前時間前后幾分鐘內(nèi)的令牌,跟用戶提交的令牌比較。所以如果時間上相差太多,身份驗(yàn)證過程就會失敗。

3、 簽名函數(shù)

谷歌的簽名函數(shù)使用了HMAC-SHA1。HMAC即基于哈希的消息驗(yàn)證碼,提供了一種算法,可以用比較安全的單向哈希函數(shù)(如SHA1)來產(chǎn)生簽名。這就是驗(yàn)證算法的原理所在:只有共享密鑰擁有者和服務(wù)器才能夠根據(jù)同樣的輸入(基于時間的)得到同樣的輸出簽名。偽代碼如下:

復(fù)制代碼 代碼如下:

hmac = SHA1(secret + SHA1(secret + input))

本文開頭提到的TOTP和HMAC原理類似,只是TOTP強(qiáng)調(diào)輸入一定是當(dāng)前時間相關(guān)。類似的還有HOTP,采用增量式計(jì)數(shù)器的方式,需要不斷和服務(wù)器同步。

算法流程簡介

首先需要用base32解碼密鑰,為了更方便用戶輸入,谷歌采用了空格和小寫的方式表示密鑰。但是base32不能有空格而且必須大寫,處理偽代碼如下:

復(fù)制代碼 代碼如下:

original_secret = xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx
secret = BASE32_DECODE(TO_UPPERCASE(REMOVE_SPACES(original_secret)))

接下來要從當(dāng)前時間獲得輸入,通常采用Unix時間,即當(dāng)前周期開始到現(xiàn)在的秒數(shù)

復(fù)制代碼 代碼如下:

input = CURRENT_UNIX_TIME()

這里有一點(diǎn)需要說明,驗(yàn)證碼有一個時效,大概是30秒。這種設(shè)計(jì)是出于方便用戶輸入的考慮,每秒鐘變化的驗(yàn)證碼很難讓用戶迅速準(zhǔn)確輸入。為了實(shí)現(xiàn)這種時效性,可以通過整除30的方式來實(shí)現(xiàn),即:
復(fù)制代碼 代碼如下:

input = CURRENT_UNIX_TIME() / 30

最后一步是簽名函數(shù),HMAC-SHA1,全部偽代碼如下:
復(fù)制代碼 代碼如下:

original_secret = xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx
secret = BASE32_DECODE(TO_UPPERCASE(REMOVE_SPACES(original_secret)))
input = CURRENT_UNIX_TIME() / 30
hmac = SHA1(secret + SHA1(secret + input))

完成這些代碼,基本就已經(jīng)實(shí)現(xiàn)了兩次驗(yàn)證的功能。由于HMAC是個標(biāo)準(zhǔn)長度的SHA1數(shù)值,有四十個字符的長度,用戶很難一次性正確輸入,因此還需要做一些格式上的處理??蓞⒖枷旅娴膫未a:
復(fù)制代碼 代碼如下:

four_bytes = hmac[LAST_BYTE(hmac):LAST_BYTE(hmac) + 4]
large_integer = INT(four_bytes)
small_integer = large_integer % 1,000,000

相關(guān)文章

  • 設(shè)置Android系統(tǒng)永不鎖屏永不休眠的方法

    設(shè)置Android系統(tǒng)永不鎖屏永不休眠的方法

    在進(jìn)行Android系統(tǒng)開發(fā)的時候,有些特定的情況需要設(shè)置系統(tǒng)永不鎖屏,永不休眠。本篇文章給大家介紹Android 永不鎖屏,開機(jī)不鎖屏,刪除設(shè)置中休眠時間選項(xiàng),需要的朋友一起學(xué)習(xí)吧
    2016-03-03
  • android 獲取視頻,圖片縮略圖的具體實(shí)現(xiàn)

    android 獲取視頻,圖片縮略圖的具體實(shí)現(xiàn)

    android 獲取視頻,圖片縮略圖的具體實(shí)現(xiàn),需要的朋友可以參考一下
    2013-06-06
  • Android 多個Activity之間的傳值

    Android 多個Activity之間的傳值

    本篇文章將用一個實(shí)例,詳細(xì)的為大家講解怎么注冊并激活一個新的Activity,以及多個Activity之間如何傳值
    2013-11-11
  • Kotlin線程同步的幾種實(shí)現(xiàn)方法

    Kotlin線程同步的幾種實(shí)現(xiàn)方法

    面試的時候經(jīng)常會被問及多線程同步的問題,在 Kotlin 中我們有多種實(shí)現(xiàn)方式,本文將所有這些方式做了整理,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Android數(shù)據(jù)加密之Des加密

    Android數(shù)據(jù)加密之Des加密

    這篇文章主要為大家詳細(xì)介紹了Android數(shù)據(jù)加密之Des加密,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Android webview轉(zhuǎn)PDF的方法示例

    Android webview轉(zhuǎn)PDF的方法示例

    本篇文章主要介紹了Android webview轉(zhuǎn)PDF的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Android ListView實(shí)現(xiàn)ImageLoader圖片加載的方法

    Android ListView實(shí)現(xiàn)ImageLoader圖片加載的方法

    這篇文章主要介紹了Android ListView實(shí)現(xiàn)ImageLoader圖片加載的方法,結(jié)合實(shí)例形式簡單分析了開源框架Imageloader的功能、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-07-07
  • Android中l(wèi)ayout屬性大全

    Android中l(wèi)ayout屬性大全

    這篇文章主要介紹了Android中l(wèi)ayout屬性含義及用法,較為詳細(xì)的總結(jié)分析了layout屬性相關(guān)用法,需要的朋友可以參考下
    2015-05-05
  • Android子線程與更新UI問題的深入講解

    Android子線程與更新UI問題的深入講解

    首先和其他許多的GUI庫一樣,Android的UI線程是不安全的。所以下面這篇文章主要給大家介紹了關(guān)于Android子線程與更新UI問題的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Android this與Activity.this的區(qū)別

    Android this與Activity.this的區(qū)別

    這篇文章主要介紹了 Android this與Activity.this的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2016-09-09

最新評論