QQ 安全令牌為什麼離線的情況下(手機停機)能用,即安全令牌不需要連接網路就能與伺服器同步?
01-04
比如我手機上安裝了安全令牌,在飛行模式下,為什麼能驗證成功?
首先,要知道什麼是令牌:
令牌是一塊具有一定運算能力和存儲能力的硬體設備,用來產生一次性密碼(也叫動態密碼)。其次,要了解令牌產生動態密碼並進行認證的運作過程:
令牌與伺服器保留一個相同的字元串與一套相同的哈希函數。認證的時候,首先令牌用哈希函數去計算字元串+當前時間,得到隨時間變化的密碼;伺服器接到密碼後,同樣也是利用哈希函數去計算字元串+當前時間,用得到的值去比較接到的密碼,以此來驗證用戶身份的真偽。在整個過程中,字元串與哈希函數均為不可被他人獲得的信息。如果字元串與哈希函數被別人掌握了,那麼系統的安全性將會嚴重降低。
再來說一下TX的安全令牌。為了降低用戶成本,TX將硬體令牌做到了手機上。手機有充足的運算能力與存儲能力,使硬體令牌變成軟體令牌成為可能。
安全性:之前談到了,字元串與哈希函數均為不可被他人獲得的信息。真正的令牌,由於出廠的時候就已經把字元串與哈希函數刻錄到令牌當中了,因此不必關心硬體令牌字元串與哈希函數的安全性。但是由於手機軟體是可以被反編譯,因此TX並不能解決哈希函數的安全性問題。
最後,回答你的問題:TX令牌的字元串是通過手機產生的隨機數與TX伺服器產生的伺服器通過某種演算法生成出來的,黑客不太容易同時拿到這兩個隨機數,那麼保存在手機當中的字元串就是相對安全的。所以也不用每次都要通過網路了,也就可以在非聯網的狀態下使用了。簡單的說就是[時間+演算法]。首次綁定的時候,安全令牌和伺服器約定演算法。登陸的時候,令牌和伺服器按照時間各自計算動態密碼。
我猜。採用的是以時間(或者加上號碼)產生的密碼,手機客戶端與qq伺服器採用同樣的加密函數,出來的密碼是一樣的,所以能夠驗證。
根據大家回答,我覺得是這樣:最一開始時,QQ安全管家 和 QQ號碼 綁定時,生成了一個隨機的複雜的字元串(不是最終的驗證碼),這時候是需要聯網同步的;之後根據時間和生成驗證碼的演算法,手機上的QQ安全管家和 電腦上QQ程序 同時 為每一幾秒鐘的時間段計算出一個這段時間可用的驗證碼(這時手機不需要聯網)。用戶輸入後,經QQ程序比對,相同則允許登錄。
如果這種說法正確的話,手機的時間偏差很大的情況下,手機上生成的驗證碼不能成功通過驗證!——有空實驗一下。——2015年5月26日依靠依賴項以及時間就可以計算了.我想,依賴項應該是令牌的序列號/機器碼我做了個簡單的實現
動態令牌的原理是一次一密,基於靜態種子和動態種子計算出來的幾位隨機數字。動態令牌在初始化的時候,會上傳手機硬體信息等作為靜態種子保存至資料庫。場景進行驗證的時候,令牌應用讀取手機靜態信息加上時間通過Hmac演算法計算出6位隨機數,服務端通過資料庫保存的靜態種子加上時間通過Hmac演算法計算出6位隨機數,只要時間沒有出現漂移就能正常應用。
關鍵是手機與伺服器需要時鐘同步,當然,可以允許一定範圍的時間偏移。
就像註冊機一樣的原理
推薦閱讀:
※信息安全專業的博士以後的出路有哪些?
※提交CVE漏洞是一種怎樣的體驗?
※惡意軟體 FireBall 是如何感染全球 2.5 億台計算機的?可能造成哪些危害?
※零基礎怎麼做黑客?