一、概要
網(wǎng)關(guān)在游戲服務(wù)器架構(gòu)中充當(dāng)著很重要的角色,根據(jù)不同類型項(xiàng)目承擔(dān)的功能也不一樣,主要的功能有以下幾種:
1. 壓縮:壓縮是一件比較耗時(shí)操作,放在網(wǎng)關(guān)可以減輕游戲壓力类少;
2. 過(guò)濾:過(guò)濾主要是識(shí)別非正常請(qǐng)求叙身,保護(hù)后端服務(wù);
3. 轉(zhuǎn)發(fā):轉(zhuǎn)發(fā)是保證客戶端消息準(zhǔn)確快速到達(dá)目標(biāo)地址,加密來(lái)提高客戶端與服務(wù)器之間通信安全硫狞;
4.? 加密:這篇文章主要介紹一下游戲加密相關(guān)的技術(shù)信轿。
二、加密算法的分類
加密主要提高破解通信協(xié)議的難度,避免協(xié)議被識(shí)別篡改,加密的技術(shù)有很多残吩,大致可以分為以下幾種:
1. 可逆加密
? ? 1.1 對(duì)稱加密:DES财忽、AES、RC4等泣侮;
? ? 1.2 非對(duì)稱加密 :RSA等即彪;
2. 不可逆加密:如:md5等;
三旁瘫、加密流程
游戲網(wǎng)關(guān)通信協(xié)議采用可逆加密,使客戶端可以解密協(xié)議,讓客戶端與服務(wù)器可以安全通信,加密的一般流程如下
1. 握手階段祖凫,基于RSA算法
2. 交換KEY,基于DH算法
3. 數(shù)據(jù)流加密與解密酬凳,可采用:AES,RC4等算法
握手階段(RSA)
客戶端與服務(wù)器握手階段主要是驗(yàn)證服務(wù)器真?zhèn)?這一步可以用RSA來(lái)實(shí)現(xiàn)(可以省略)
1. 服務(wù)器隨機(jī)一段串A
2. 務(wù)器用客戶端公鑰加密發(fā)送客戶端
3. 客戶端收到后用客戶端私鑰解密出串A
4. 客戶端用服務(wù)器公鑰加密串B和解密后的串A,發(fā)送給服務(wù)器
5. 服務(wù)器收到后用服務(wù)器私鑰解密串A和之前服務(wù)器生成的對(duì)比驗(yàn)證,ok則握手成功
交換KEY(DH)
1. 客戶端通過(guò)Diffie-Hellman算法生成服務(wù)器加密,解密種子(服務(wù)器加密種子是客戶端解密種子,服務(wù)器解密種子是客戶端加密種子),
2. 服務(wù)器通過(guò)Diffie-Hellman算法根據(jù)加密,解密種子生成加密,解密KEY,客戶端加密,解密種子
3. 客戶端根據(jù)加密,解密種子生成KEY
數(shù)據(jù)流加密與解密
用協(xié)商過(guò)的KEY,進(jìn)行數(shù)據(jù)流加密與解密(aes,rc4)
可以根據(jù)需要選擇不同的加密算法,安全性高的可以選用AES,數(shù)據(jù)長(zhǎng)度不變的可以選用RC4,
AES和RC4在所有算法中都是比較高效的算法,RC4效率好于AES惠况,但安全不如AES,
對(duì)AES,DES,RC4幾種算法使用案例及性能對(duì)比
Github實(shí)現(xiàn):https://github.com/MaxwellBackend/Games/tree/master/security