網(wǎng)絡(luò)游戲安全性的數(shù)據(jù)文件加密方案

為了避免日趨泛濫的非法外掛程序?qū)V大游戲運(yùn)營(yíng)商和玩家利益的損害,我們給出了一種基于DES和RSA加密算法的網(wǎng)絡(luò)游戲數(shù)據(jù)文件加密方案。采用這種加密方案,能保證游戲數(shù)據(jù)信息不被攻擊者破譯,從而有效保障網(wǎng)絡(luò)游戲的正常運(yùn)行與數(shù)據(jù)安全。

一、妨礙游戲公平性和危害網(wǎng)絡(luò)安全的“外掛”

所謂“游戲非法外掛”,是指“由合法網(wǎng)游公司和玩家以外的、未經(jīng)著作權(quán)人許可而由第三方提供的、妨礙游戲公平性或直接攻擊游戲本身的一種游戲外掛程序”。目前,國(guó)內(nèi)網(wǎng)絡(luò)游戲“非法外掛”日趨專(zhuān)業(yè)化、市場(chǎng)化。一款網(wǎng)絡(luò)游戲的正常盈利時(shí)間1.5至3年,但一旦有玩家使用“非法外掛”,就將使游戲盈利周期大大縮短,而造成商家利潤(rùn)和國(guó)家利益很大損失。

眾所周知,Internet客戶(hù)/服務(wù)器模式的通訊通常采用TCP/IP通信協(xié)議,數(shù)據(jù)交換是通過(guò)IP數(shù)據(jù)包的傳輸來(lái)實(shí)現(xiàn)的。一般來(lái)說(shuō),客戶(hù)端向服務(wù)器發(fā)出某些請(qǐng)求,都是采用數(shù)據(jù)包的形式和服務(wù)器交換數(shù)據(jù)。服務(wù)器收到客戶(hù)端發(fā)送的消息后,會(huì)按照既定的程序把有關(guān)的信息反饋給客戶(hù)端?!胺欠ㄍ鈷臁背绦驎?huì)產(chǎn)生一種欺騙性很強(qiáng)的數(shù)據(jù)包,當(dāng)游戲數(shù)據(jù)包發(fā)送到游戲服務(wù)器或客戶(hù)端時(shí),那些欺騙性虛假信息程序就修改原來(lái)的游戲數(shù)據(jù),然后模擬客戶(hù)端發(fā)送給服務(wù)器,或者模擬服務(wù)器發(fā)送給客戶(hù)端,達(dá)到攻擊游戲數(shù)據(jù)的目的。篡改和重放,是攻擊網(wǎng)絡(luò)游戲數(shù)據(jù)的主要形式。篡改,是指將截取的數(shù)據(jù)包作部分修改后而及時(shí)再送往目的地,使游戲程序被已篡改的虛假信息所欺騙;重放,是指將截取的數(shù)據(jù)包雖不作修改但經(jīng)延時(shí)后再送往目的地,使游戲程序誤以為某次事件再次發(fā)生。

如果“非法外掛”制作者已經(jīng)掌握了數(shù)據(jù)包的結(jié)構(gòu)、內(nèi)容以及加密算法的足夠信息,就很容易進(jìn)一步制作出對(duì)數(shù)據(jù)包進(jìn)行攻擊的“非法外掛”程序了。數(shù)據(jù)包的結(jié)構(gòu)和內(nèi)容都是公開(kāi)的,因此要阻止攻擊者破譯數(shù)據(jù)包格式,唯一的辦法就是采用一種足夠健壯的加密算法,使得攻擊者很難破譯數(shù)據(jù)包的信息。

現(xiàn)在市面上的網(wǎng)絡(luò)游戲,傳輸?shù)臄?shù)據(jù)包基本上都已經(jīng)進(jìn)行了自定義算法的加密,以阻止攻擊者破譯其數(shù)據(jù)包。它僅在攻擊者不知道游戲開(kāi)發(fā)商自定義加密算法時(shí),方可使所傳輸?shù)臄?shù)據(jù)包相對(duì)安全,故當(dāng)加密算法泄密或攻破時(shí),所傳輸?shù)臄?shù)據(jù)包也就無(wú)安全性可言。一種較為理想的數(shù)據(jù)加密方案應(yīng)是采用保密或公開(kāi)的健壯加密算法,從而使信息傳輸?shù)陌踩圆槐匾蕾?lài)于算法的安全性,而依賴(lài)于有適當(dāng)生命周期的密鑰的安全性。顯然,DES和RSA加密算法正好符合以上特征。

二、DES和RSA加密算法

1、DES加密算法

DES屬于對(duì)稱(chēng)加密體制,具有信息傳輸?shù)陌踩愿摺⒂?jì)算開(kāi)銷(xiāo)時(shí)間少、處理速度快(每秒加密4.3萬(wàn)次)的特點(diǎn),尤其適合對(duì)大量數(shù)據(jù)和大文件加密保護(hù)。DES加密算法的基本原理,如圖1所示。

網(wǎng)絡(luò)游戲安全性的數(shù)據(jù)健壯加密方案

DES是將64位的明文加密成64位的密文的分組加密算法,其密鑰長(zhǎng)度為64位。它在一個(gè)56位密鑰的控制下,將按64位分組的明文信息加密。通常,人們用c= DESk(m)表示利用密鑰k對(duì)明文m加密得到密文c的過(guò)程;用m= DESk(c)表示利用密鑰k對(duì)密文c解密得到明文m的過(guò)程。

DES加密算法的加密過(guò)程由16個(gè)獨(dú)立的加密循環(huán)組成,每個(gè)循環(huán)各使用一個(gè)從主密鑰中生成的自有密鑰K(1),…,K(16)和加密函數(shù)。對(duì)于DES加密算法的每一次循環(huán),已知密鑰的加密實(shí)際只需一次48比特的運(yùn)算,而不知密鑰的攻擊者卻需要作出248次嘗試,因此總的嘗試次數(shù)高達(dá)2768,其攻擊將會(huì)是得不償失的。

2、RSA加密算法

RSA加密算法的安全性是基于大整數(shù)素因子分解的困難性。1976年Diffie和Hellman提出了非對(duì)稱(chēng)加密系統(tǒng)的思想,1977年由Rivest、Shamir和Adleman首次實(shí)現(xiàn)了著名的RSA加密系統(tǒng),它至今仍是使用最廣泛的非對(duì)稱(chēng)加密算法。

RSA加密算法的基本流程如下:

(1)隨機(jī)地選擇兩個(gè)秘密的大素?cái)?shù)p和q;

(2)計(jì)算公開(kāi)的模數(shù)r=p×q和歐拉指標(biāo)函數(shù)φ(r)=(p -1)(q-1);

(3)選擇一個(gè)與φ(r)互素,即滿(mǎn)足gcd(e,φ(r))=1的量e,作為公鑰;

(4)用歐幾里得(Eu,clid)算法計(jì)算模數(shù)為φ(r)時(shí)e的乘法逆元,即求滿(mǎn)足de≡1(modφ(r))的d;

(5)將明文m(0<m<r-1)按模r自乘d次冪以完成加密操作,記為c=RSA(m)=mdmodr,將密文c按模r自乘e次冪以完成解密操作,記為m= RSA-1(c)=cemodr。

RSA加密算法的特點(diǎn)是,選擇固定的較小加密密鑰來(lái)提高運(yùn)算速度,并不降低整個(gè)系統(tǒng)的安全性。因此,可考慮使用一些較小的素?cái)?shù)(例如65537)作為公開(kāi)密鑰,而其解密密鑰的獲得則可通過(guò)Euclid算法求得。

三、網(wǎng)絡(luò)游戲數(shù)據(jù)文件加密方案

由于信息傳輸?shù)陌踩允腔诿荑€的安全性,故只要選擇一個(gè)長(zhǎng)度適中的密鑰生命周期,通過(guò)使用DES和RSA加密算法,對(duì)在網(wǎng)絡(luò)中傳輸?shù)挠螒驍?shù)據(jù)文件進(jìn)行加密,就可以保證在此周期內(nèi)密鑰難于被攻破。

此外,為了防止“攻擊者將游戲數(shù)據(jù)包攔截后對(duì)服務(wù)器進(jìn)行延遲再發(fā)”的重放攻擊,還應(yīng)在封包內(nèi)加入必要的時(shí)間戳TS(time starnp),進(jìn)行時(shí)間核查過(guò)濾實(shí)時(shí)監(jiān)控——“在服務(wù)器端和客戶(hù)端分別設(shè)置一個(gè)寬度合適的時(shí)間窗口,只要超過(guò)時(shí)間窗口的數(shù)據(jù)包將會(huì)被自動(dòng)丟棄”,就能有效抵御重放攻擊。

基于以上的思路,網(wǎng)絡(luò)游戲數(shù)據(jù)的文件加密方案可按如圖2所示的加密傳輸流程圖進(jìn)行:

網(wǎng)絡(luò)游戲安全性的數(shù)據(jù)文件加密方案

(1)客戶(hù)端向服務(wù)器端發(fā)送明文的CONN信息,請(qǐng)求建立連接。服務(wù)器端收到該信息后,隨機(jī)產(chǎn)生一個(gè)DES對(duì)稱(chēng)密鑰key,使用服務(wù)器端保密的RSA私鑰d加密數(shù)據(jù)key得到密文KEY。

(2)服務(wù)器端將經(jīng)過(guò)加密的數(shù)據(jù)KEY發(fā)送到已經(jīng)建立了連接的客戶(hù)端,客戶(hù)端用RSA公鑰e解密該數(shù)據(jù),得到DES密鑰key。

(3)客戶(hù)端將需要發(fā)送到服務(wù)器端的明文數(shù)據(jù)m1,加上時(shí)間戳TSi后,使用密鑰key經(jīng)過(guò)DES算法加密后得到密文c2,將c2發(fā)送到服務(wù)器端。服務(wù)器端接收到密文c1后,使用密鑰key經(jīng)過(guò)DES加密算法解密后,即可檢驗(yàn)時(shí)間戳TS,,如果在時(shí)間窗口內(nèi),就處理數(shù)據(jù)m1。

(4)服務(wù)器端將需要反饋到客戶(hù)端的明文數(shù)據(jù)m2,加上時(shí)間戳TS2后,使用密鑰key經(jīng)過(guò)DES加密算法加密后得到密文C2,將C2發(fā)送到客戶(hù)端??蛻?hù)端接收到密文C2后,使用密鑰key經(jīng)過(guò)DES算法解密后,即可檢驗(yàn)時(shí)間戳TS,,如果在時(shí)間窗口內(nèi),就處理數(shù)據(jù)m2。

(5)反復(fù)進(jìn)行以上操作。

(6)客戶(hù)端將斷開(kāi)連接的信息disconn,加上時(shí)間戳TS。后,使用密鑰key經(jīng)過(guò)DES加密算法加密得到密文DISCONN,將DISCONN發(fā)送到服務(wù)器端。在確認(rèn)連接已斷開(kāi)后,銷(xiāo)毀密鑰key。

(7)服務(wù)器端接收到密文DISCONN后,使用密鑰key經(jīng)過(guò)DES算法解密后,檢驗(yàn)時(shí)間戳TS。,如果在時(shí)間窗口內(nèi),就斷開(kāi)與客戶(hù)端的連接。在確認(rèn)連接已斷開(kāi)后,銷(xiāo)毀密鑰key。

四、網(wǎng)絡(luò)游戲安全性的數(shù)據(jù)文件加密方案的意義

首先,DES加密算法和RSA加密算法本身都是健壯性很強(qiáng)的加密算法,故要在加密算法上尋找陷門(mén)進(jìn)行破解,事實(shí)上基本已無(wú)可能,而就是采用耗費(fèi)天文數(shù)字般時(shí)間、人力、物力、財(cái)力的窮舉法,也將使攻擊者無(wú)法、無(wú)力、無(wú)益來(lái)破解網(wǎng)絡(luò)游戲數(shù)據(jù)。

其次,DES加密算法的密鑰是隨機(jī)產(chǎn)生的,并且只在從游戲者登陸游戲到退出游戲的這段時(shí)間內(nèi)有效。因此,就算攻擊者耗費(fèi)九牛二虎之力破解了一次密鑰,他下一次登陸游戲時(shí),該密鑰已失效,使其再次破解又只能再重新耗費(fèi)高昂代價(jià)。同時(shí),為了避免攻擊者采用長(zhǎng)期掛線的手段攻擊數(shù)據(jù)包,也可以設(shè)置游戲者在線一定長(zhǎng)時(shí)間(比如一天)后就自動(dòng)對(duì)密鑰進(jìn)行及時(shí)更新,以增強(qiáng)密鑰的安全性。

第三,在游戲時(shí)傳送的數(shù)據(jù)包中,都加入了時(shí)間戳,并且與游戲數(shù)據(jù)一起進(jìn)行了加密,攻擊者要修改時(shí)間戳將是一件非常困難的事情,重放攻擊數(shù)據(jù)包也基本不再可能。

第四,對(duì)于在線人數(shù)眾多的網(wǎng)絡(luò)游戲來(lái)說(shuō),大量的密鑰管理需要大量的計(jì)算機(jī)資源,而且對(duì)大量數(shù)據(jù)進(jìn)行DES加密也對(duì)計(jì)算機(jī)的運(yùn)行速度提出了相當(dāng)高的要求?!胺欠ㄍ鈷臁钡乃椒咭M(jìn)行大規(guī)模的數(shù)據(jù)處理,也是相當(dāng)困難的,從而在一定程度上防止了非法私服的出現(xiàn)與泛濫。

小知識(shí)之健壯性

健壯性又稱(chēng)魯棒性,是指軟件對(duì)于規(guī)范要求以外的輸入情況的處理能力。