[閒聊] Steam Guard 手機驗證器驗證原理

作者: k70709 (嘎肉)   2015-12-04 14:02:57
Steam所用代碼驗證器是使用非標準的TOTP
詳細可以查查Google Authenticator的原理
但是Steam上因為相容舊有的驗證系統(信箱)
簡單解釋一下 基本原理
當Steam Apps登錄後,雙方會自動取得共享金鑰並儲存下來
雙方利用此共享金鑰加上時間(可能用30-60秒間隔)來做計算
用戶→金鑰+時間→計算當前的驗證碼→Steam伺服器端
伺服器端的驗證方式我不確定,不過基本上就下面二種
1.Steam 伺服器端→收到驗證碼→驗證碼+時間→反推金鑰→驗證金鑰是否正確
2.Steam 伺服器端→收到驗證碼→(共享金鑰+時間)算出驗證碼→比對驗證碼是否正確
我認為第二種可能性比較高
時差部份沒問題,只要計算時用雙方統一使用UTC+0的時區即可同步
手機app無網路也沒關係,你已經有共享金鑰+時間,只要注意時間是否有校正至標準時間
當你手機時間有誤差太大時,所計算出來的驗證碼就會跟Steam端的驗證碼不符合
即使你手上的金鑰是正確的,也會因為時間的關係產生出錯誤的驗證碼
另外提醒一下有用APP驗證的版友們,備用代碼≠救援代碼
備用代碼是你臨時忘了帶手機,要登入STEAM時用的一次性代碼用完就會註銷
而救援代碼是你手機遺失時,要移除掉App驗證時用的
救援代碼取得方式
Steam Mobile的Steam Guard裡取得並保存好
┌────────────┐
│≡ Steam Guard │
├────────────┤
│ S T E A M │
│□□███████□□ │
│ Steam Account │
├────────────┤
╞════════════╡
│設定 │
│Steam 行動驗證器 │
├────────────┤
│My Recovery Code │
├────────────┤
│幫助 │
├────────────┤
│ │
│ │
│ │
│ │
│ │
│ │
└────────────┘
救援代碼的格式為R+上五個數字
例:R12345
如果手機掉了,還能用救援代碼去取消手機App驗證
備用代碼取得方式
請使用Steam用戶端或是網頁進入下面取得
https://store.steampowered.com/twofactor/manage
作者: oas (GTr)   2015-12-04 14:12:00
推~~~ 有趣~
作者: KeyFSN ( ~☼☽✩☁~ )   2015-12-04 14:25:00
hash function 通常是單向的
作者: howar31 (Howar31)   2015-12-04 15:27:00
之前刷手機忘記備份 二十幾個驗證器直接失效lol最後只好一家一家慢慢打電話請求解除lol
作者: abult (...)   2015-12-04 16:00:00
所以我後來用第三方的驗證程式,可以直接備份不用怕重灌比較討厭這種一定要綁自己的驗證器
作者: howar31 (Howar31)   2015-12-04 16:26:00
刷機不管第幾方都全洗掉呀 如果你是說自動備份到網路帳號那種 那乾脆不要用驗證器 跟沒用一樣lol
作者: abult (...)   2015-12-04 16:32:00
用1password可以僅記錄在本地 也可以用dropbox同步 看需求沒有一定的方式好拉 雲端方便但是有可能被破 本地不小心洗掉就哭哭
作者: reader2714 (無毀的湖光)   2015-12-04 16:48:00
BZ很早就在用這東西了
作者: t77133562003 (我是一隻山羊)   2015-12-04 19:25:00
MS 早就有自己的三方驗證了 但是STEAM不能用
作者: Kenqr (function(){})()   2015-12-04 20:28:00
作者: march55237 (永遠的御三家)   2015-12-04 20:44:00
救援其實在有備份碼後就不用了 等進Steam把驗證換回來即可

Links booklink

Contact Us: admin [ a t ] ucptt.com