游戏中的加密算法

加密主要包含通讯数据和存储数据加密,目的都是为了保证其传送和储存的隐秘性,从而保证数据的安全。目前常见的加密方式有对称加密、非对称加密、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个字节比较合适 同上
自定义算法 非标准,高效,安全 算法的灵活性 动态密钥

 

 

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

想看更多有趣原创的技术文章,扫描关注公众号。

关注我的成长和游戏研发,推进国内游戏社区的成长与进步。

相关文章
相关标签/搜索