遊戲中的加密算法

加密主要包含通訊數據和存儲數據加密,目的都是爲了保證其傳送和儲存的隱祕性,從而保證數據的安全。目前常見的加密方式有對稱加密、非對稱加密、hash加密、hash加鹽加密等,這些在遊戲中都會用的,咱們會對其用途以及缺陷一一說明,固然了,爲了保證其加密算法的安全以及高效,咱們也會介紹幾種自定義的加密算法,看看加密如何來維護咱們的數據安全。算法

 

一、對稱加密

對稱加密算法是應用較早的加密算法,技術成熟。主要就是對密鑰的一個維護,發送方把數據和密鑰經過必定的加密算法處理後,發送給接收方,接受方接到以後在使用相同密鑰及算法的逆算法對密文進行解密。這就是通常的對稱加密算法過程。常見的對稱加密算法有AES、DES3DES,TDEA,BlowfishRC5IDEA等,建議用AES,速度快,安全性也能夠。安全

對稱加密算法的特色是算法公開、計算量小、加密速度快、加密效率高。缺點主要就是密鑰須要雙方都有,若是密鑰被竊取,那麼加密就會比第三方破解,特別是遊戲中,密鑰若是存放在客戶端中,容易被破解反編譯到。服務器

咱們能夠採起登錄消息和邏輯消息採用不一樣的密鑰,登錄驗證經過以後,服務器爲每一個用戶分配不一樣的密鑰,而後把邏輯密鑰傳送給客戶端,以此保證密鑰的不肯定性,從而增長遊戲的安全。性能

 

二、非對稱加密

非對稱加密算法使用兩把徹底不一樣但又是徹底匹配的一對鑰匙—公鑰私鑰。在使用不對稱加密算法加密文件時,只有使用匹配的一對公鑰和私鑰,才能完成對明文的加密和解密過程。這對於對稱加密算法來講,又安全了一步,也是目前https經常使用的加密方式,公鑰能夠分配和暴露給全部想要訪問的請求者,但密鑰必定緊緊的掌握在服務器這邊,如此對通訊來講,安全性有保證。經常使用的加密算法,RSA,DSA,ECC。加密

非對稱加密算法,優勢就是安全,但缺點就是不夠快,比較耗費cpu,若是在遊戲中每一次消息都有其加密,對cpu的損耗仍是挺高的,因此遊戲中通常不用這種加密方式,固然了也看遊戲類型,若是對這方面的性能要求不高,安全性要求有很高,採用業務科厚非(那個遊戲這麼傻啊)。spa

 

三、hash加密

hash加密,就是常見的使用MD五、SHA1等單向HASH算法保護密碼,使用這些算法後,沒法經過計算還原出原始密碼,並且實現比較簡單也高效,所以不少互聯網公司都採用這種方式保存用戶密碼。遊戲

但安全性愈來愈擔心了,由於隨着彩虹表技術的興起,能夠創建彩虹表進行查表破解,目前這種方式已經很不安全了。get

 

四、hash 加鹽加密

hash加密既然容易被彩虹表破解,那麼能夠採用加鹽、屢次HASH等擴展,這樣能夠在必定程度上增長破解難度。常見的方式也是發送方和接受方,維護一個鹽池,加密和解密的時候加上這一段鹽池來進行hash。hash

不過這種算法又回到了對稱加密中對密鑰的保護問題了,若是鹽池泄露,別人依然會破解。it

怎麼辦?有人又想出了,讓鹽池隨機的方式,好比PBKDF2算法,原理大體至關於在HASH算法基礎上增長隨機鹽,並進行屢次HASH運算,隨機鹽使得彩虹表的建表難度大幅增長,而屢次HASH也使得建表和破解的難度都大幅增長。一次密碼驗證過程進行1000次HASH運算,對服務器來講可能只須要1ms,但對於破解者來講計算成本增長了1000倍,而至少8字節隨機鹽,更是把建表難度提高了N個數量級,使得大批量的破解密碼幾乎不可行,該算法也是美國國家標準與技術研究院推薦使用的算法。

 

五、自定義加密

終於到這個了,以上那麼多高大上的加密算法,都是業界比較成熟的算法,好處是到處有API支持也有人實現,拿來就用,壞處也是,算法格式規整透明,除了非對稱算法,都有其對應的破解方式。遊戲的加密要怎樣?安全、安全,高效、高效,你不能一個加密算法就耗費我100ms的cpu吧,太浪費了。

咱們能夠嘗試一種動態加密的方式,就是每一次請求保證用不一樣的密鑰,這樣即使一個消息被截取破解了,下一次密鑰又不同,如此破解者會比較崩潰。怎麼作?我簡單說下思想。

每一個消息必須有惟一id,一個是防止消息重放,一個能夠用來作咱們的加密。好比咱們初始的時候有一個密碼池 A=【1,2,3,4,5】,每次消息從服務器發送出去的時候,消息ID都+1,

當前密鑰=A.index(消息ID%A.length),如此就能保證每次密鑰不同,具體拿到密鑰如何加密,徹底能夠用本身的加密方式,好比把二進制一部分截取經過密鑰移位操做,或者算法運算均可以。

咱們的目的一個保證密鑰動態,一個就是保證算法足夠高效。

 

算法 特色 有效破解方式 破解難度 其它 算法名字
對稱加密 能夠解密出明文 獲取密鑰 須要確保密鑰不泄露 AES,3DES
非對稱加密 一對鑰匙—公鑰私鑰 獲取私鑰 效率低,安全性高 RSA,DSA,ECC,DH
HASH加密 簡單,高效 碰撞、彩虹表

 

 

MD5,SHA1,SHA1256
加鹽HASH 對hash加鹽處理 碰撞、彩虹表 須要確保「鹽」不泄露 同上
Pbkdf2 對hash的鹽池進行隨機處理 隨機鹽池不能太大,8個字節比較合適 同上
自定義算法 非標準,高效,安全 算法的靈活性 動態密鑰

 

 

-----------------------------------------------------------------------------

想看更多有趣原創的技術文章,掃描關注公衆號。

關注我的成長和遊戲研發,推進國內遊戲社區的成長與進步。

相關文章
相關標籤/搜索