Google身份驗證器

Google身份驗證器

Google身份驗證器Google Authenticator是谷歌推出的基於時間的一次性密碼(Time-based One-time Password,簡稱TOTP),只需要在手機上安裝該APP,就可以生成一個隨著時間變化的一次性密碼,用於帳戶驗證。

基本介紹

  • 套用名稱:Google身份驗證器
  • 套用平台:mobile
  • 套用版本:2.44
  • 性質驗證軟體令牌
  • 用途:用於Google的認證服務
  • 領域:網路安全
簡介,典型使用情況,Android上的開源情況,技術說明,生成一次性密碼的偽代碼,生成事件性或計數性的一次性密碼偽代碼,

簡介

Google身份驗證器是一款基於時間與哈希的一次性密碼算法的兩步驗證軟體令牌,此軟體用於Google的認證服務。此項服務所使用的算法已列於RFC 6238和RFC 4226中。
Google身份驗證器給予用戶一個六位到八位的一次性密碼用於進行登錄Google或其他站點時的附加驗證。其同樣可以給第三方套用生成口令,例如密碼管家程式或網路硬碟。先前版本的Google身份驗證器開放原始碼,但之後的版本以專有軟體的形式公開。

典型使用情況

通常,用戶安裝身份驗證程式在智慧型手機上。為了登錄到使用兩步驗證的網站或服務上,用戶提供用戶名和密碼後運行身份驗證器進行額外驗證。該應用程式會生成六位數的一次性密碼,而不同網站可能會生成同一密碼。
為了使身份驗證器正常工作,安裝運行之前網站必須向用戶提供一組共享密鑰。這組密鑰將會用於未來的所有登入請求。
在兩步驗證的保護之下,僅僅擁有用戶名密碼已不足以黑入賬戶。攻擊者需要這組共享密鑰或者拿到進行兩步驗證的移動設備。另一種方法是進行中間人攻擊;若用戶的電腦被木馬侵入,則用戶名、密碼及一次性密碼都將被木馬所捕獲,隨後攻擊者即可利用木馬進行登錄、監聽或修改用戶與網站的通信。

Android上的開源情況

Google身份驗證器在Google Play商店上目前(2017年9月16日)以私有著作權協定發布。Google在GitHub上開放了其身份驗證器原始碼,並陳述如下:
“此開源計畫包含了2.21版本的原始碼。隨後的版本中包含了Google特有的工作流程,與此項目無關。”
Android版本的獨立分支之一為FreeOTP,其基於Google在GitHub上所開源的最新版本。另外一個並非很火的分支OTP Authenticator也在Google Play上可供下載。

技術說明

服務提供商為每個用戶生成80位的密鑰(然而RFC 4226 §4要求使用128位並建議使用160位密鑰)。它以16位、26位或者32位base32的字元串亦或是二維碼的方式提供出來。客戶端使用此密鑰生成HMAC-SHA1。經過HMAC處理過的信息可能為:
  • UNIX時間(TOTP)起始之後所經過的30秒周期數
  • 隨著每個新密碼所增加的計數(HOTP)
一段哈希值被提取出來並轉換為6位數密碼。

生成一次性密碼的偽代碼

 function GoogleAuthenticatorCode(string secret)      key := base32decode(secret)      message := floor(current Unix time / 30)      hash := HMAC-SHA1(key, message)      offset := last nibble of hash      truncatedHash := hash[offset..offset+3]  //4 bytes starting at the offset      Set the first bit of truncatedHash to zero  //remove the most significant bit      code := truncatedHash mod 1000000      pad code with 0 until length of code is 6      return code

生成事件性或計數性的一次性密碼偽代碼

  function GoogleAuthenticatorCode(string secret)      key := base32decode(secret)      message := counter encoded on 8 bytes      hash := HMAC-SHA1(key, message)      offset := last nibble of hash      truncatedHash := hash[offset..offset+3]  //4 bytes starting at the offset      Set the first bit of truncatedHash to zero  //remove the most significant bit      code := truncatedHash mod 1000000      pad code with 0 until length of code is 6      return code

相關詞條

熱門詞條

聯絡我們