整理下來:
- HOTP: An HMAC-Based One-Time Password Algorithm
- TOTP: Time-Based One-Time Password Algorithm
- KeyUriFormat - google-authenticator - The format of URIs containing encoded keys - Two-step verification - Google Project Hosting
有玩過 HMAC 的人,讀這些文件應該不難...
TOTP 在預設的情況下,其實就是 HMAC-SHA-1 後取後面 32bits,然後轉成數字取 100000 的餘數,而 TOTP 文件是架構在 HOTP 的定義上,把時間切齊 (預設 30secs) 變成整數丟進去攪和,然後特地交代要處理 2038 年超過 Int32 的 case XDDD
最後 Google 那份文件是要輸出 QR code 讓手機可以讀的方式,建議不要用網路服務產生 QR code (因為有 secret key 啊),寧可自己抓 library 建一個用...
另外 Google Authenticator 一堆東西都只能用預設值 (Currently, the XXX is ignored by the Google Authenticator implementations.),所以也沒什麼好選的,就拿預設值吧... :o
Server side 的話,至少我在 CPAN 上面看到 Authen-OATH 可以用了,用起來也很簡單 :o
話說 iOS 上有 http://itunes.apple.com/tw/app/oath-token/id364017137?mt=8 可以用 (secret 至少要 8 bytes), android 上有 https://play.google.com/store/apps/details?id=uk.co.bitethebullet.android.token&hl=en 可以用 (secret 至少要 16 bytes) , server side 用 Authen-OATH , 還滿完美的 :D