RSA SecurID 動態令牌的原理是什麼?

這種動態令牌的原理是什麼?伺服器如何精確的和令牌同步的?


RFC 6238 - TOTP: Time-Based One-Time Password Algorithm


原理這東西我也說不清楚,目前在學習中......
同步的話應該就是在靠這個電池了......


關於精準校準時間同步,伺服器當然不會僅計算當前時間點的token,它會計算當前時間點前後的若干個token,匹配到令牌上的token所對應的時間點就是令牌上的時間點,這樣就完成了一次時間校準。
至於說太久沒用的令牌,那也只能多計算一些附近時間點的token看能不能對上了。考慮到令牌的使用時間一般是兩年左右,時差是有一個極限的,如果真的對不上token了,那也只能認為令牌報廢了。
就醬


用最簡單的一句話來說就是使用時間同步,伺服器時間與令牌內置時鐘的同步,並且伺服器會記錄每個令牌的時鐘偏移值來防止個別令牌時鐘偏差的情況。
演算法是使用經過修改的Hash演算法,用函數可以表示為:
TokenCode = H(Seed + SN + Time)
Seed - 種子值
SN - 令牌序列號
Time - 時間

至於演算法,RSA公司的演算法有兩個版本,老版本在2003年被人用逆向工程破解,現已不再使用。目前正在使用的是一種基於AES的私有Hash演算法。


每個令牌出廠的時候都會把本令牌的種子文件在存在後台,而這個動態密碼 =hash(種子+時間) ,這樣只要這東西的本地時鐘不錯亂,就會和服務端產生相同的密碼。
當然用久了時間有可能會偏差,所以伺服器會在每次驗證成功後都調整該令牌的時間偏移。


應該是有一個種子文件,這個種子文件內置在令牌里,同樣服務端也會存儲著這個種子文件,服務端會根據用戶所綁定令牌的序列號找到對應的種子文件,,根據種子文件算出是否正確。。。應該是這樣的。


推薦閱讀:

純粹只是一道C++題目,求錯誤分析
有哪些「上帝演算法」?
是否存在某種成熟的方法用較少的字元表示大量的信息?
500px的照片分數是怎麼算的?
小生境(Niche)機制是否可以用於處理SNS中的用戶群體相似性高的問題?

TAG:演算法 | 驗證碼 | 密碼 | 易安信EMC |