關(guān)于“將軍令”工作原理與算法思想的研究
(作者未知) 2011/6/23
摘要:“將軍令”是每隔1min產(chǎn)生一個全新的、不能重復(fù)使用的密碼(6位),用來保護網(wǎng)易通行證(游戲賬號)、直銷商賬號的密碼。文章根據(jù)作者的研究,闡述了幾種可行的“將軍令”的工作原理與算法思想。
關(guān)鍵詞:將軍令;動態(tài)密碼;原理;算法
“將軍令”是廣州網(wǎng)易互動娛樂有限公司自主研發(fā)的、具有完全知識產(chǎn)權(quán)的高科技身份認(rèn)證產(chǎn)品,專門用來保護網(wǎng)易通行證(游戲賬號)、直銷商賬號的密碼!皩④娏睢笔敲扛1min(60s)產(chǎn)生一個全新的、不能重復(fù)使用的密碼(6位),俗稱“動態(tài)密碼”。采用“將軍令”后,網(wǎng)易以“賬號+密碼+動態(tài)密碼”的形式對游戲ID進行保護,大大提高了賬號的安全性。對于將軍令的工作原理,很多人提出自己的設(shè)想,筆者也就自己的研究,進行如下闡述。
“將軍令”的實際工作流程很簡單:即用戶端(“將軍令”本身)產(chǎn)生一個動態(tài)密碼,然后將這個動態(tài)密碼和服務(wù)器端進行匹配。由于用戶端在出廠之后,同服務(wù)器端就再沒有物理上直接的聯(lián)系,因而,如何與服務(wù)器端保持邏輯上的同步是最大的問題,即如何保證用戶端產(chǎn)生的動態(tài)密碼與服務(wù)器端驗證的動態(tài)密碼是一個密碼。
1 第一種設(shè)想
在“將軍令”內(nèi)置微型芯片,里面保存大量“以6位數(shù)字為一組”的預(yù)定數(shù)組(6位數(shù)字動態(tài)碼),每60s自動讀取下一組新數(shù)組,數(shù)組的排列順序無規(guī)律并無一相同,但全部已經(jīng)預(yù)先存放好,利用循環(huán)模式,當(dāng)讀完最后一組數(shù)后便從頭再開始讀取第一組數(shù)組。主機服務(wù)器端也同樣預(yù)先存放好同樣的數(shù)組列,啟用“將軍令”時以序列號來識別該取用哪一條數(shù)組列。這種方法是一種最易實現(xiàn)的方法,但這也是一種最易被破解的方法,安全性較低。
2 第二種設(shè)想
這種設(shè)想是利用算法來實現(xiàn)動態(tài)密碼的產(chǎn)生。
算法思想1:用戶端在出廠時就植入一個算法,這個算法同樣會被保存在服務(wù)器端。這個算法不一定要很復(fù)雜,比如f(x)=aX+b,X最好是一些獨特的,各個“將軍令”都不重復(fù)的數(shù)字,比如“將軍令”的序列號等。a可以是一個固定的數(shù)字,而b可以是一個動態(tài)變化的數(shù)字,如第1次產(chǎn)生動態(tài)密碼,b就為“1”;第2次產(chǎn)生動態(tài)密碼,b就為“2”……
算法思想2:用戶端產(chǎn)生的動態(tài)密碼是一個與時間有關(guān)的動態(tài)密碼,即密碼M與時間T之間存在著關(guān)系:M=rand(TX),rand()為隨機函數(shù),TX為隨機函數(shù)的種子,x為另一因素,比如“將軍令”的序列號等。
這里,x是一個服務(wù)器端已知的變量,出廠時就已經(jīng)設(shè)定了,最大的可能是“將軍令”的序列號所對應(yīng)的一個因子,在生產(chǎn)“將軍令”寫入初始數(shù)據(jù)的時候,同時被植入用戶端和服務(wù)器端,由于每個“將軍令”的序列號是唯一的,因而,拿不到“將軍令”就無法知道x,也就無法知道動態(tài)密碼M。
顯然,只有因子X是不夠的,M=rand(x)是可以產(chǎn)生一個密碼M,但這個密碼M顯然無法動態(tài)變化,也就失去了意義,因而時間因子T也同樣不可缺少。但是,引入時間因子T之后,又將產(chǎn)生一個問題:就是用戶端和服務(wù)器端時間同步的問題。
時間同步的同題,筆者認(rèn)為可以這樣解決:服務(wù)器端固定T0,引入因子△t,服務(wù)器端植入△t,△t為用戶端時鐘同服務(wù)器端時鐘之差,即△t=T3-T1這樣,用戶端的密碼M=rand(T3X),服務(wù)器端密碼M=rand((T1+△t)X)。對于成千上萬的用戶端在服務(wù)器端只要記錄了△t就可以了。這個△t,可以在“將軍令”生產(chǎn)的時候植入服務(wù)器端予以記錄。開通“將軍令”后,在提交序列號和動態(tài)密碼的時候,服務(wù)器端動態(tài)的調(diào)整△t,服務(wù)器端計算M=rand[(T2+△t)X],并且在△t的基礎(chǔ)上,計算出……,△t-5*60,△t-4*60,△t-3*60,△t-2*60,△t-1*60,△t,△t+1*60,△t+2*60,△t+3*60,△t+4*60,△t+5*60,……這個數(shù)列。具體數(shù)列長度根據(jù)需要來定,由于是產(chǎn)生隨機6位數(shù)的函數(shù),在這個數(shù)列中是不會出現(xiàn)重復(fù)的M的。這樣,就可以計算出△t附近前后相差n分鐘所產(chǎn)生的密碼M,只需要比對提交的動態(tài)密碼與數(shù)列中的哪個值對應(yīng),就可以動態(tài)的調(diào)整△t。假設(shè),動態(tài)密碼與△t-2*60對應(yīng)的密碼相同,就可以調(diào)整△t=△t-2*60。這樣,解決了用戶端從出廠到開通使用所產(chǎn)生的時間誤差。這個n,根據(jù)實際需要制定。
在使用“將軍令”的時候,采用同樣的方法可以同步。在確定了At后,服務(wù)器端在每次驗證的時候,只要算出M1=rand[(TI+△t-y)x],M=rand[(TI+At)X],M2=rand[(T)+△t+y)x],就可以算出At附近y秒的時間的密碼M,就是允許“將軍令”有y秒的時間誤差。利用上面的算法來實現(xiàn)動態(tài)密碼的產(chǎn)生顯然要比第一種方法的安全性(未完,下一頁)
|