加密主要包含通讯数据和存储数据加密,目的都是为了保证其传送和储存的隐秘性,从而保证数据的安全。目前常见的加密方式有对称加密、非对称加密、hash加密、hash加盐加密等,这些在游戏中都会用的,咱们会对其用途以及缺陷一一说明,固然了,为了保证其加密算法的安全以及高效,咱们也会介绍几种自定义的加密算法,看看加密如何来维护咱们的数据安全。算法
对称加密算法是应用较早的加密算法,技术成熟。主要就是对密钥的一个维护,发送方把数据和密钥经过必定的加密算法处理后,发送给接收方,接受方接到以后在使用相同密钥及算法的逆算法对密文进行解密。这就是通常的对称加密算法过程。常见的对称加密算法有AES、DES,3DES,TDEA,Blowfish,RC5,IDEA等,建议用AES,速度快,安全性也能够。安全
对称加密算法的特色是算法公开、计算量小、加密速度快、加密效率高。缺点主要就是密钥须要双方都有,若是密钥被窃取,那么加密就会比第三方破解,特别是游戏中,密钥若是存放在客户端中,容易被破解反编译到。服务器
咱们能够采起登录消息和逻辑消息采用不一样的密钥,登录验证经过以后,服务器为每一个用户分配不一样的密钥,而后把逻辑密钥传送给客户端,以此保证密钥的不肯定性,从而增长游戏的安全。性能
非对称加密算法使用两把彻底不一样但又是彻底匹配的一对钥匙—公钥和私钥。在使用不对称加密算法加密文件时,只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程。这对于对称加密算法来讲,又安全了一步,也是目前https经常使用的加密方式,公钥能够分配和暴露给全部想要访问的请求者,但密钥必定紧紧的掌握在服务器这边,如此对通讯来讲,安全性有保证。经常使用的加密算法,RSA,DSA,ECC。加密
非对称加密算法,优势就是安全,但缺点就是不够快,比较耗费cpu,若是在游戏中每一次消息都有其加密,对cpu的损耗仍是挺高的,因此游戏中通常不用这种加密方式,固然了也看游戏类型,若是对这方面的性能要求不高,安全性要求有很高,采用业务科厚非(那个游戏这么傻啊)。spa
hash加密,就是常见的使用MD五、SHA1等单向HASH算法保护密码,使用这些算法后,没法经过计算还原出原始密码,并且实现比较简单也高效,所以不少互联网公司都采用这种方式保存用户密码。游戏
但安全性愈来愈担心了,由于随着彩虹表技术的兴起,能够创建彩虹表进行查表破解,目前这种方式已经很不安全了。get
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个字节比较合适 | 同上 |
自定义算法 | 非标准,高效,安全 | 无 | 难 | 算法的灵活性 | 动态密钥 |
-----------------------------------------------------------------------------
想看更多有趣原创的技术文章,扫描关注公众号。
关注我的成长和游戏研发,推进国内游戏社区的成长与进步。