基本介紹
網站簡介,發展歷程,使用情況,開源情況,技術說明,
網站簡介
Google身份驗證器給予用戶一個六位到八位的一次性密碼用於進行登錄Google或其他站點時的附加驗證。其同樣可以給第三方套用生成口令,例如密碼管家程式或網路硬碟。先前版本的Google身份驗證器開放原始碼,但之後的版本以專有軟體的形式公開。
發展歷程
2023年4月,Google Authenticator身份驗證器套用獲得了人們多年來一直要求的一項功能:雲同步備份。在面向Android 和iOS推出的最新4.0版本中,谷歌添加了此功能,使其更加安全和方便。
使用情況
為了使身份驗證器正常工作,安裝運行之前網站必須向用戶提供一組共享密鑰。這組密鑰將會用於未來的所有登入請求。
在兩步驗證的保護之下,僅僅擁有用戶名密碼已不足以黑入賬戶。攻擊者需要這組共享密鑰或者拿到進行兩步驗證的移動設備。另一種方法是進行中間人攻擊;若用戶的電腦被木馬侵入,則用戶名、密碼及一次性密碼都將被木馬所捕獲,隨後攻擊者即可利用木馬進行登錄、監聽或修改用戶與網站的通信。
開源情況
“此開源計畫包含了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