Jan 2, 2012

使用 TOTP 與 Google Authenticator 實作 Two-Factor authentication

在食衣住行育樂都需要的網路的時候,現代人擁有許多網路帳號,但能記憶的帳號密碼通常只有少數組合,當遇到密碼外洩(e.g.資料庫外洩、病毒側錄密碼),相對的也影響了使用共同帳密的網路服務,對今日資安事件逐漸從惡作劇變往金融犯罪的趨勢,帳號有操作功能,個資,身份(實名化),對盜竊者來說帳號密碼可以產生許多價值。

帳號盜用除了個人影響外,間接牽連的還有親友與網路服務提供者,對網路服務提供者而言,帳號盜用是會提高營運成本與降低使用者信賴度的麻煩事,因此面對使用者規模與服務品質,強化帳號安全逐漸成為不可忽視的事情,Google 於去年底開始提供 2-step verification 做多層次的帳號驗證,別於以往硬體 OTP 的方式,透過 Smartphone 使用軟體(i.e Google Authenticator) 來規模化佈署。

目前得知使用類似軟體驗證機制的服務提供者有


在 Server 端的實作驗證流程不難,未來可能會變成一種常見的帳號驗證方法。

以下參考國外部落格文章與 Google Authenticator Android原始碼 實作 Two-Factor authentication 驗證流程,並釋出伺服器端原始碼




操作流程


1. SmartPhone 安裝 Google Authenticator

2. 伺服器環境安裝

3. 進入網站(demo: http://totp-authentication-demo.heroku.com)

4. 建立個人帳號




帳號成功建立後伺服器端會產生一組對應帳號的 secret key,這組 secret key 會在之後用於驗證 TOTP ,詳細規格請參考RFC6238


這裡經由 QRCode 來簡化 secret key 匯入 Google Authenticator  的流程與避免輸入錯誤,在QRCode 裡內嵌的資料為 Google Authenticator 自訂的內容規格
e.g.
otpauth://totp/Brandon@brandonc.me?secret=GUK6JNO7TEERYTNC
5. 使用 Google Authenticator 保存secret key 與產生 TOTP




Google Authenticator 每 30 秒會產生 6 個數字的做為security token

6. 使用帳號密碼 + OTP 驗證

由於裝置與伺服器端會有時間誤差,因此預設設定為接受正負90秒內產生的 OTP


Update 20120829

dropbox 支援 SMS 與 Google Authenticator 的 Two-step verification
https://forums.dropbox.com/topic.php?id=66910

No comments: