本文摘要:其實很早以前就看過一篇關于將軍令工作原理的文章,說實話,當時那篇文章我只看懂了一部分,大部分都沒看懂,但是我根據看懂的那一部分,和后來自己的思考,下面小編推薦關于將軍令工作原理的一篇電子論文。 【摘 要】將軍令是每隔1min產生一個全新的、不能
其實很早以前就看過一篇關于將軍令工作原理的文章,說實話,當時那篇文章我只看懂了一部分,大部分都沒看懂,但是我根據看懂的那一部分,和后來自己的思考,下面小編推薦關于“將軍令”工作原理的一篇電子論文。
【摘 要】“將軍令”是每隔1min產生一個全新的、不能重復使用的密碼(6位),用來保護網易通行證(游戲賬號)、直銷商賬號的密碼。文章根據作者的研究,闡述了幾種可行的“將軍令”的工作原理與算法思想。
【關鍵詞】將軍令;動態密碼;原理;算法
“將軍令”是廣州網易互動娛樂有限公司自主研發的、具有完全知識產權的高科技身份認證產品,專門用來保護網易通行證(游戲賬號)、直銷商賬號的密碼。“將軍令”是每隔1min(60s)產生一個全新的、不能重復使用的密碼(6位),俗稱“動態密碼”。采用“將軍令”后,網易以“賬號+密碼+動態密碼”的形式對游戲ID進行保護,大大提高了賬號的安全性。對于將軍令的工作原理,很多人提出自己的設想,筆者也就自己的研究,進行如下闡述。
“將軍令”的實際工作流程很簡單:即用戶端(“將軍令”本身)產生一個動態密碼,然后將這個動態密碼和服務器端進行匹配。由于用戶端在出廠之后,同服務器端就再沒有物理上直接的聯系,因而,如何與服務器端保持邏輯上的同步是最大的問題,即如何保證用戶端產生的動態密碼與服務器端驗證的動態密碼是一個密碼。
1 第一種設想
在“將軍令”內置微型芯片,里面保存大量“以6位數字為一組”的預定數組(6位數字動態碼),每60s自動讀取下一組新數組,數組的排列順序無規律并無一相同,但全部已經預先存放好,利用循環模式,當讀完最后一組數后便從頭再開始讀取第一組數組。主機服務器端也同樣預先存放好同樣的數組列,啟用“將軍令”時以序列號來識別該取用哪一條數組列。這種方法是一種最易實現的方法,但這也是一種最易被破解的方法,安全性較低。
2 第二種設想
這種設想是利用算法來實現動態密碼的產生。
算法思想1:用戶端在出廠時就植入一個算法,這個算法同樣會被保存在服務器端。這個算法不一定要很復雜,比如f(x)=aX+b,X最好是一些獨特的,各個“將軍令”都不重復的數字,比如“將軍令”的序列號等。a可以是一個固定的數字,而b可以是一個動態變化的數字,如第1次產生動態密碼,b就為“1”;第2次產生動態密碼,b就為“2”……
算法思想2:用戶端產生的動態密碼是一個與時間有關的動態密碼,即密碼M與時間T之間存在著關系:M=rand(TX),rand()為隨機函數,TX為隨機函數的種子,x為另一因素,比如“將軍令”的序列號等。
這里,x是一個服務器端已知的變量,出廠時就已經設定了,最大的可能是“將軍令”的序列號所對應的一個因子,在生產“將軍令”寫入初始數據的時候,同時被植入用戶端和服務器端,由于每個“將軍令”的序列號是唯一的,因而,拿不到“將軍令”就無法知道x,也就無法知道動態密碼M。
顯然,只有因子X是不夠的,M=rand(x)是可以產生一個密碼M,但這個密碼M顯然無法動態變化,也就失去了意義,因而時間因子T也同樣不可缺少。但是,引入時間因子T之后,又將產生一個問題:就是用戶端和服務器端時間同步的問題。
時間同步的同題,筆者認為可以這樣解決:服務器端固定T0,引入因子△t,服務器端植入△t,△t為用戶端時鐘同服務器端時鐘之差,即△t=T3-T1這樣,用戶端的密碼M=rand(T3X),服務器端密碼M=rand((T1+△t)X)。對于成千上萬的用戶端在服務器端只要記錄了△t就可以了。這個△t,可以在“將軍令”生產的時候植入服務器端予以記錄。開通“將軍令”后,在提交序列號和動態密碼的時候,服務器端動態的調整△t,服務器端計算M=rand[(T2+△t)X],并且在△t的基礎上,計算出……,△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,……這個數列。具體數列長度根據需要來定,由于是產生隨機6位數的函數,在這個數列中是不會出現重復的M的。這樣,就可以計算出△t附近前后相差n分鐘所產生的密碼M,只需要比對提交的動態密碼與數列中的哪個值對應,就可以動態的調整△t。假設,動態密碼與△t-2*60對應的密碼相同,就可以調整△t=△t-2*60。這樣,解決了用戶端從出廠到開通使用所產生的時間誤差。這個n,根據實際需要制定。
在使用“將軍令”的時候,采用同樣的方法可以同步。在確定了At后,服務器端在每次驗證的時候,只要算出M1=rand[(TI+△t-y)x],M=rand[(TI+At)X],M2=rand[(T)+△t+y)x],就可以算出At附近y秒的時間的密碼M,就是允許“將軍令”有y秒的時間誤差。利用上面的算法來實現動態密碼的產生顯然要比第一種方法的安全性要高很多。
3 第三種設想
這種設想利用一個相對復雜的映射來實現動態密碼的產生。
它可能是根據:年,月,日,時,分,秒。這樣的話,可以把“將軍令”看成是一個計算器,計算出用戶所需要的數字,然后與服務器通過同樣方法對計算出來的數字進行比對。
假設:“將軍令”出現的6位數字,我們分別設為a,b,c,d,e,f,將軍令的序列號為x。
a=年*x
b=月*2X
c=日*3X
d=時*4X
e=分*5X
f=秒*6X
但是,如果通過這個映射來計算出動態密碼的話,同樣也會有時間同步的問題需要解決,這就可以參照上面的算法思想進行處理。
4 結束語
以上3種方案就是筆者認為比較可行的方案,但通過研究“將軍令”內部結構可以發現,將軍令是不允許更換電池的,一般使用時間在30個月左右。不允許更換電池。可能就是為了在最大程度上保持時間的同步。因此,綜合來看,筆者認為設想二的第二個算法思想是最切實可行的一種方案。
小編推薦優秀電子期刊 《鐵路計算機應用》
《鐵路計算機應用》(月刊)創刊于1992年,由中華人民共和國鐵道部主管,中國鐵道科學研究院、中國鐵道學會計算機委員會主辦,中國鐵道科學研究院電子計算技術研究所承辦。是鐵路系統可以在國內外公開發行的行業計算機與信息技術專業技術性期刊。期刊致力于全面、迅速、準確地刊登反映國內外鐵路計算機應用的最新科技成果、計算機技術在鐵路各專業領域的學術與理論探索
轉載請注明來自發表學術論文網:http://www.zpfmc.com/dzlw/4085.html