標籤:

將軍令是如何工作的?不知道它隨機產生的密碼怎麼就和系統對上號了?

感覺挺牛逼的啊!

PS 很多人提到了時間參數的作用 很想知道如果採用時間作為一個參數的話 如何解決同步的問題 相對來說將軍令的價格也就一個電子手錶的錢 其精度不可能太高 但又要保證幾年的使用時間 如何解決時間上的誤差


這個東西的學名叫做,one-time password,目前已經發布為RFC標準,有興趣可以看下RFC 6238 - TOTP: Time-Based One-Time Password Algorithm。

裡面有詳細的介紹和demo。

簡單點介紹下原理吧:

1.首先,令牌時間和伺服器時間都採用UTC時間作為標準時間

2.通過獲取當前時間距離1970年1月1日0時0分0秒的時間戳秒數,除以時間步長,即60秒,可以計算出當前開始計數的時間步長,以這個開始的時間步長和令牌的pin生成一個密碼。

3.伺服器上同樣採用此演算法生成密碼。

4.登陸的時候,校驗用戶提交的密碼演算法即可。

5.時鐘誤差如果超過計數的時間步長,同過一個同步功能來修正誤差,因此此種令牌都會提供一個時鐘同步的功能。

具體的你去看下rfc的規範即可。


具體情況不了解,以下純是憑在學校裡面的知識回答的。

我的理解是說應該就是在將軍令裡面集成一個通過 時間+令牌id 離線生成密碼的晶元,伺服器能通過時間戳來驗證這個密碼。所以將軍令會存在偶爾密碼不正確的時候(主要是伺服器時間跟令牌內置時間有一定誤差導致)。


時間遠沒有大家想的那麼不精確,自從石英晶振這玩意兒被發明後,電子計時上升了無數個檔次,其次伺服器端也可以有一定的容錯性,即產生的時間與現在不超過多少分鐘都算有效。

然後在容許誤差內校對後在伺服器端記錄偏移(恐怕用不著這麼複雜)。

沒想的那麼複雜,現在的鐘錶不準更多是因為機械和電池部分的原因,石英晶振的準度非常高。

石英晶振這貨的價格可以自己去搜下。


搜了一下這是什麼東西,參考了一下@吳沛儒 的描述,然後覺得基本上大家的答案綜合一下應該差不多。

首先,如果是6位密碼,那肯定不能算「加密」,只能是哈希,因為6位密碼不可能反推出明文的,只能是客戶端和服務端各自計算hash值,然後比對。

然後樓上有若干提到「密鑰」的,公開的SN號肯定不能拿來當密鑰,不然也太二了。我猜很可能跟密碼卡什麼的一樣,每個客戶端有一個密鑰,伺服器端保存所有客戶端的密鑰。然後客戶端每次做哈希的時候把時間和自己的密鑰連起來,做hash然後輸出即可。

最後如果按網站上的描述,60秒一換密碼,那肯定有晶振在裡面,不然不可能做到的。一般電子手錶一個月能差10秒左右,那麼即使一個將軍令用一年,最多也就偏幾分鐘,伺服器端在當前時間前後多做幾次哈希,也就能對上號了。

如果像我猜的一樣,密鑰(其實如果是用來算哈希的,一般就不叫密鑰了,叫salt: http://zh.wikipedia.org/wiki/%E7%9B%90_%28%E5%AF%86%E7%A0%81%E5%AD%A6%29)是保存在伺服器端而不是根據SN號計算出來的話,那麼這個晶元是很難被偽造的,但是可以被複制。沒有完全明白這個東西是幹什麼的,因此不知道可複製的晶元對這個系統的安全性有什麼影響。保存


剛好最近在研究這個~回答試試看 ^_^

以下都只是猜測,畢竟公布了的話,將軍令就不能保證帳號安全了。

====================================================================

已知:

1. 每分鐘產生一個6位密碼

2·不發射信號,也就是說它離場之後不與伺服器聯繫。

3·唯一被記錄的是SN號。

4·不同的將軍令同時按出的動態密碼是不同的。

5·不允許換電池,應該是為了保證與伺服器時間同步。

推理得:

以時間(或以時間經過演算法運算後得出的結果)為明文,SN號(或以SN號經過演算法運算後得出的結果)為密鑰,經過一個統一的函數演算法後得出的密文,就是將軍令顯示出的那6個數字。

也就是說 6個數字=函數(時間,SN碼,其他)

其中:「其他」可能有也可能沒有,也許還與綁定帳號的信息有關,這就不得而知了。

而那個等式中的函數可能是各種不同的加密演算法,DES,RSA,IDEA,DSA什麼什麼的。都是最近用的比較多的演算法。

====================================================================

我密碼編碼學只學了半年·····說的不知道對不對·····我已經儘力了~~~~·囧rz~~~

``````````修改·····&>_&<

以防有人看不懂啊~科普一下~~~

密碼演算法可以看作是一個複雜的函數變換:C =函數(M, Key )

C代表密文,即加密後得到的字元序列(上面說的6位密碼),M代表明文即待加密的字元序列(也就是上面的時間);Key表示密鑰(也就是上面說的SN碼),是秘密選定的一個字元序列。密碼學的一個原則是「一切秘密寓於密鑰之中」,演算法可以公開。當加密完成後,可以將密文通過不安全渠道送給收信人,只有擁有解密密鑰的收信人可以對密文進行解密即反變換得到明文,密鑰的傳遞必須通過安全渠道。

寫到這裡又有個猜想

既然說「一切秘密寓於密鑰之中」,那麼SN可能是密鑰,這樣將軍令的演算法絕對不能泄漏了,不然知道SN碼,再時間同步一下就能知道密碼。

或者SN不是密鑰,而是SN經過一個演算法得出的結果作為密鑰。

或者的或者將軍令的晶元和SN碼對應,以晶元編號為密鑰。

啊~~~真是越想越繞啊~~~~半年的水平果然還是很低~~啊哈哈。

僅供參考,希望能拋磚引玉喲~!


其實這就是RSA動態口令的一種

動態口令分類大體分為同步口令跟非同步口令

同步又分時間同步與事件同步

將軍令60S一換密碼也就是說它是基於時間同步的,晶振肯定是有的,而且其精度要求極為嚴格,但是對於非在線設備時間偏移是肯定的,怎麼處理這個問題呢,在你進行的每次認證時,伺服器端將會檢測令牌的時鐘偏移量,相應不斷的微調自己的時間記錄,對於失去時間同步的令牌,可以通過增大偏移量的技術±10分鐘來遠程同步,但對於超出20分鐘的時間同步令牌,將無法繼續使用或進行遠程同步,就得返廠了。


我覺得和時間沒有必然的關係,將軍令本身晶元處理能力應該比較低的,要與伺服器保證一致感覺不實際,即使是現在的手機,貌似時鐘也同步也是需要聯網才能解決的。所以我覺得時間並不是將軍令的參數。

然後是演算法,演算法應該不能作為保密的東西,如果一個加密演算法保密的話,這個演算法本身就是不安全的。

SN應該也不是密鑰,密鑰是保密的東西,所以不可能是任何人都可以獲取的。

既然這樣,貌似就找不到密鑰了。

所以可以考慮是不是用的hash的方法

在服務端和客戶端應該同時有一個使用的計數器,同步時間很難,但是記錄次數是很容易的。

設上一次的結果為On,那麼本次的輸入可能是(On|Times)那麼,不管伺服器端還是客戶端所得出的結果都是合理的。當然可能不是這麼簡單的,不過感覺應該是這個原理。


推薦閱讀:

QQ密碼資料庫真的泄露了么?
一道古典密碼題到底怎麼解?多表?
密碼太多記不住怎麼辦?全弄成一樣又不安全。?
1Password 的安全性有多高?
ZIP加密壓縮破解方法Known plaintext attack通過Key推出密碼的原理是什麼?

TAG:網易 | 密碼 |