文档章节

游戏中的加密算法

wier
 wier
发布于 2017/08/09 08:29
字数 1782
阅读 1457
收藏 39

加密主要包含通信数据和存储数据加密,目的都是为了保证其传送和储存的隐秘性,从而保证数据的安全。目前常见的加密方式有对称加密、非对称加密、hash加密、hash加盐加密等,这些在游戏中都会用的,我们会对其用途以及缺陷一一说明,当然了,为了保证其加密算法的安全以及高效,我们也会介绍几种自定义的加密算法,看看加密如何来维护我们的数据安全。

 

1、对称加密

对称加密算法是应用较早的加密算法,技术成熟。主要就是对密钥的一个维护,发送方把数据和密钥通过一定的加密算法处理后,发送给接收方,接受方接到之后在使用相同密钥及算法的逆算法对密文进行解密。这就是一般的对称加密算法过程。常见的对称加密算法有AES、DES3DES,TDEA,BlowfishRC5IDEA等,建议用AES,速度快,安全性也可以。

对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。缺点主要就是密钥需要双方都有,如果密钥被窃取,那么加密就会比第三方破解,特别是游戏中,密钥如果存放在客户端中,容易被破解反编译到。

我们可以采取登陆消息和逻辑消息采用不同的密钥,登陆验证通过之后,服务器为每个用户分配不同的密钥,然后把逻辑密钥传送给客户端,以此保证密钥的不确定性,从而增加游戏的安全。

 

2、非对称加密

非对称加密算法使用两把完全不同但又是完全匹配的一对钥匙—公钥私钥。在使用不对称加密算法加密文件时,只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程。这对于对称加密算法来说,又安全了一步,也是目前https常用的加密方式,公钥可以分配和暴露给所有想要访问的请求者,但密钥一定牢牢的掌握在服务器这边,如此对通信来说,安全性有保证。常用的加密算法,RSA,DSA,ECC。

非对称加密算法,优点就是安全,但缺点就是不够快,比较耗费cpu,如果在游戏中每一次消息都有其加密,对cpu的损耗还是挺高的,所以游戏中一般不用这种加密方式,当然了也看游戏类型,如果对这方面的性能要求不高,安全性要求有很高,采用业务科厚非(那个游戏这么傻啊)。

 

3、hash加密

hash加密,就是常见的使用MD5、SHA1等单向HASH算法保护密码,使用这些算法后,无法通过计算还原出原始密码,而且实现比较简单也高效,因此很多互联网公司都采用这种方式保存用户密码。

但安全性越来越担忧了,因为随着彩虹表技术的兴起,可以建立彩虹表进行查表破解,目前这种方式已经很不安全了。

 

4、hash 加盐加密

hash加密既然容易被彩虹表破解,那么可以采用加盐、多次HASH等扩展,这样可以在一定程度上增加破解难度。常见的方式也是发送方和接受方,维护一个盐池,加密和解密的时候加上这一段盐池来进行hash。

不过这种算法又回到了对称加密中对密钥的保护问题了,如果盐池泄露,别人依然会破解。

怎么办?有人又想出了,让盐池随机的方式,比如PBKDF2算法,原理大致相当于在HASH算法基础上增加随机盐,并进行多次HASH运算,随机盐使得彩虹表的建表难度大幅增加,而多次HASH也使得建表和破解的难度都大幅增加。一次密码验证过程进行1000次HASH运算,对服务器来说可能只需要1ms,但对于破解者来说计算成本增加了1000倍,而至少8字节随机盐,更是把建表难度提升了N个数量级,使得大批量的破解密码几乎不可行,该算法也是美国国家标准与技术研究院推荐使用的算法。

 

5、自定义加密

终于到这个了,以上那么多高大上的加密算法,都是业界比较成熟的算法,好处是处处有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个字节比较合适 同上
自定义算法 非标准,高效,安全 算法的灵活性 动态密钥

 

 

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

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

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

© 著作权归作者所有

共有 人打赏支持
wier
粉丝 726
博文 50
码字总数 134184
作品 0
东城
技术主管
加载中

评论(14)

918382323
918382323
APP专业上架资质办理。长期招开发商合作!有意合作可随时来访!
QQ:2248592620
blackshow
blackshow
说了半天跟游戏有啥关系,加密不都这样吗。。。
wier
wier

引用来自“梦朝思夕”的评论

楼主可能误解了,hash是单向不可逆的散列,在密码学中不算是加密,

回复@梦朝思夕 : 谢谢指正,这篇文章不严谨
梦朝思夕
梦朝思夕
楼主可能误解了,hash是单向不可逆的散列,在密码学中不算是加密,
12叔
12叔
密码学的第一章内容就是讲
没事别瞎j8自定义算法 :smile:
因为你无法保证算法的可靠性.
低效的加密比不加密更危险
beyondforever68
beyondforever68
上社会工程学
黑狗
黑狗

引用来自“wier”的评论

引用来自“wier”的评论

引用来自“黑狗”的评论

引用来自“wier”的评论

引用来自“黑狗”的评论

说实话 没啥用
前几个能破解你这个就是一样的破解方式
你这个如果破解不了 前几个也破解不了

回复@黑狗 :讲一下自定义破解方式,目前的游戏项目中还没有破解过
还没有破解过很正常的呀
我很多小系统现在的加密方式就是MD5 至今还没有被任何人破解过 包括FBI,国安部,萨达姆,比尔盖茨,金正恩等人 都还没有攻破我的堡垒

我相信他们也没有攻破你作的系统 对吧...

题外话绕完了,回归正题
你所说的“自定义”没有任何意义,你所说的“密钥池”也不过就是多个密钥管理而已,和salt没有任何区别,甚至还不如salt,毕竟salt不存在池,是无限多的,所以,同样没有意义
与我争论的之后,希望你可以真正去了解一下“加密” 看看经典的加密的论文

你最后所说的加密算法,并不算加密算法,最多就是“加密方法”

如果感兴趣的话 去查一下 SM2/SM3/SM4 国人自己的加密算法 真正的加密算法是商用的,需要购买的,以后可能你们公司会碰到

回复@黑狗 : md5的,在客户端搞到密钥就可以破解,客户端采用逆向注册,或者源码反编译也可以拿到密钥

回复@wier : 抱歉,被折叠了,没看到后面说的,先学习了。我这个确实不算加密算法,只能算是方式,算法层面的东西,没用这么简单,不过对开发者来说,用的都是封装好的算法,关于密码算法的创新以及应用,目前有比较好的应用方向么
算法是非常专业的东西 建议不要放太多的心思上去 可以去了解
如果你要深入到加密算法里面 那么就业的圈子应该很窄
绝大部分公司都会采用通用的加密算法,自己开发的算法,很贵,有一些公司是专门做算法的
还是建议你眼界放到上层一些,关注安全,而不是关注算法
如果确实对算法感兴趣 我觉得还不如去搞机器学习 很多大公司有自己的算法,解决特定的问题 比如,滴滴快车的“猜你去哪”等功能,里面就会用到他们自己的算法 还有很多电商的推荐商品,也应该有些商家有自己的算法和方案清洗数据,挖掘数据 比加密算法有意思
changnet
changnet
1. hash不是一种加密方法
2.我很奇怪你的池是怎么保证不被别人拿到的
3.你这个密钥池是有序的,别人能破解一人,就能破解N个,除了难度稍微加了一点点,没什么意义
4.在游戏中,除了登录时的密码、session、充值之类的需要加密一下。普通消息没必要加密吧
wier
wier

引用来自“wier”的评论

引用来自“黑狗”的评论

引用来自“wier”的评论

引用来自“黑狗”的评论

说实话 没啥用
前几个能破解你这个就是一样的破解方式
你这个如果破解不了 前几个也破解不了

回复@黑狗 :讲一下自定义破解方式,目前的游戏项目中还没有破解过
还没有破解过很正常的呀
我很多小系统现在的加密方式就是MD5 至今还没有被任何人破解过 包括FBI,国安部,萨达姆,比尔盖茨,金正恩等人 都还没有攻破我的堡垒

我相信他们也没有攻破你作的系统 对吧...

题外话绕完了,回归正题
你所说的“自定义”没有任何意义,你所说的“密钥池”也不过就是多个密钥管理而已,和salt没有任何区别,甚至还不如salt,毕竟salt不存在池,是无限多的,所以,同样没有意义
与我争论的之后,希望你可以真正去了解一下“加密” 看看经典的加密的论文

你最后所说的加密算法,并不算加密算法,最多就是“加密方法”

如果感兴趣的话 去查一下 SM2/SM3/SM4 国人自己的加密算法 真正的加密算法是商用的,需要购买的,以后可能你们公司会碰到

回复@黑狗 : md5的,在客户端搞到密钥就可以破解,客户端采用逆向注册,或者源码反编译也可以拿到密钥

回复@wier : 抱歉,被折叠了,没看到后面说的,先学习了。我这个确实不算加密算法,只能算是方式,算法层面的东西,没用这么简单,不过对开发者来说,用的都是封装好的算法,关于密码算法的创新以及应用,目前有比较好的应用方向么
wier
wier

引用来自“黑狗”的评论

引用来自“wier”的评论

引用来自“黑狗”的评论

说实话 没啥用
前几个能破解你这个就是一样的破解方式
你这个如果破解不了 前几个也破解不了

回复@黑狗 :讲一下自定义破解方式,目前的游戏项目中还没有破解过
还没有破解过很正常的呀
我很多小系统现在的加密方式就是MD5 至今还没有被任何人破解过 包括FBI,国安部,萨达姆,比尔盖茨,金正恩等人 都还没有攻破我的堡垒

我相信他们也没有攻破你作的系统 对吧...

题外话绕完了,回归正题
你所说的“自定义”没有任何意义,你所说的“密钥池”也不过就是多个密钥管理而已,和salt没有任何区别,甚至还不如salt,毕竟salt不存在池,是无限多的,所以,同样没有意义
与我争论的之后,希望你可以真正去了解一下“加密” 看看经典的加密的论文

你最后所说的加密算法,并不算加密算法,最多就是“加密方法”

如果感兴趣的话 去查一下 SM2/SM3/SM4 国人自己的加密算法 真正的加密算法是商用的,需要购买的,以后可能你们公司会碰到

回复@黑狗 : md5的,在客户端搞到密钥就可以破解,客户端采用逆向注册,或者源码反编译也可以拿到密钥
论游戏中的补给箱如何与区块链结合

论游戏中的补给箱如何与区块链结合 2018-07-11 12:14编辑: 游星啊分类:区块链来源:青亭网 游戏区块链 招聘信息: iOS开发 iOS开发 iOS开发 app开发上架H5技术 app开发技术 图像处理及模式...

游星啊
07/11
0
0
Unity 3D保护案例分享(一)

Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。通过uni...

senseshield
04/11
0
0
OSC 第 79 期高手问答 —— 算法和软件的关系

OSCHINA 本期高手问答(6月17日- 6月24日)我们请来了 @王-晓华(王晓华)为大家解答关于 算法和软件的关系 方面的问题。 王晓华,@王-晓华 毕业于华中科技大学,目前在中兴通讯上海研发中心...

叶秀兰
2015/06/17
4.4K
43
分享一下,如何防止工具(八门神器)进行内存修改!

Android内存修改器有很多。拿其中的比较出名的八门神器来说,该应用通过修改正在运行的游戏的内存数据,可以非常方便地修改游戏的HP、MP、生命数等等参数。辛辛苦苦开发的游戏或应用被修改器...

科技创造
2014/09/10
0
0
ALPU定制型加密芯片全方位保护产品和方案!

ALPU定制型加密芯片这是一款采用随机变量交换系统的认证加密芯片。与系统MCU以密码方式通信,MCU在诸如系统启动等关键场合检测ALPU加密芯片。所以即使盗版系统复制了PCB、内核甚至存储器中的...

cayeahs123
06/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

又一个centos文件顺序导致的问题

背景 新的centos似乎对于文件顺序做了特别的优化 和文件顺序出现的问题确实多了不少 centos7导致的spring循环依赖【实际上和这个问题不一样 不过由此衍生出的问题】 某应用放在新的系统开始报...

Mr_Qi
6分钟前
0
0
阿里云国际版香港CN2测评 月付9美元/30M带宽/1T流量

市面上很多家香港VPS服务商,一直都说阿里云国际版香港CN2线路好,延迟低,速度快,价格便宜流量还多,那么这个香港线路到底怎么样呢?本文从性能、延时、路由、速度方面来全方面测评一下阿里...

flyzy2005
49分钟前
0
0
撤销git commit --amend

it commit -amend之后想撤销 git reset HEAD@{1}

xiaomge
54分钟前
0
0
有意思的TimeUnit

java.util.concurrent.TimeUnit 这个类,相信童鞋们都不陌生。它是一个enum: public enum TimeUnit 好吧,我一直把它当做一个枚举类来用。偶然看到还有别的用法,大吃一斤,原来 TimeUnit 并...

polly
今天
9
0
生成pyc

Python生成pyc文件 pyc文件是py文件编译后生成的字节码文件(byte code)。pyc文件经过python解释器最终会生成机器码运行。所以pyc文件是可以跨平台部署的,类似Java的.class文件。一般py文件改...

Mr_Tea伯奕
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部