文档章节

游戏中的加密算法

wier
 wier
发布于 2017/08/09 08:29
字数 1782
阅读 1394
收藏 39
点赞 2
评论 14

加密主要包含通信数据和存储数据加密,目的都是为了保证其传送和储存的隐秘性,从而保证数据的安全。目前常见的加密方式有对称加密、非对称加密、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
粉丝 658
博文 46
码字总数 122193
作品 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的,在客户端搞到密钥就可以破解,客户端采用逆向注册,或者源码反编译也可以拿到密钥
使用AES加密游戏资源文件

在研究Angry Birds的过程中了解到其部分lua脚本文件被进行了加密,关于如何解密以及如何找到解密key的方法见前一篇博客。游戏资源文件加密是pc上的游戏必做的一件事,虽然无论何种加密方法都...

睡到自然醒 ⋅ 2012/08/01 ⋅ 0

Unity 3D保护案例分享(一)

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

senseshield ⋅ 04/11 ⋅ 0

OSC 第 79 期高手问答 —— 算法和软件的关系

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

叶秀兰 ⋅ 2015/06/17 ⋅ 43

分享一下,如何防止工具(八门神器)进行内存修改!

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

科技创造 ⋅ 2014/09/10 ⋅ 0

在游戏研发中如何有效防止外挂程序

总的说来,道高一尺魔高一丈,外挂不可能100%被杜绝,只能通过不同的手段来防止大部分的外挂,具体可以从以下几个方面考虑: 1. 协议层加密 以flash客户端为例,在与后端做数据通信时,可采用...

heshuping92 ⋅ 2013/11/29 ⋅ 6

手游渠道SDK建议标准

手游渠道平台纷乱芜杂,但提供的基本功能大同小异,这里就登陆和支付两个基本功能,提出一点标准化的建议,仅作为在接入了30+个渠道平台后的一点想法: 渠道接入游戏时,分配{appId,appKey}给...

深蓝苹果 ⋅ 2014/08/02 ⋅ 0

流年/SecurityOrder

一个基于TOTP的密码二次认证工具 TOTP 基于时间的加密算法 应用范围:对安全性要求比较高的场合,可以进行密码的二次认证,例如:游戏,银行等业务。 代码分析 加密工具类主要参考google-au...

流年 ⋅ 2017/08/09 ⋅ 0

开源 H5 麻将游戏--OpenMajiang

OpenMajiang是完整的开源麻将程序,不是假开源! OpenMajiang 是一个开源h5麻将游戏 麻将算法基于网上流行的哪位日本老师的查表算法。。 客户端是 layabox 的 h5 引擎,性能还行 服务器是 基...

zuoge85 ⋅ 2017/09/08 ⋅ 5

无名Android逆向数据分析

第1课 恋恋DES加密初探+smali注入调试 第2课 stl逆向+jni动态加载识别+YOYO卡sha1实战 第3课 4399游戏盒DES-CBC算法+自定义salt分析 第4课 IDEA动态调试搭建与HTTPS抓包 第5课 搜狐AES+MD5+S...

13269051240 ⋅ 05/21 ⋅ 0

如何做好iOS应用安全?这有一把行之有效的“三板斧”

本文由 网易云 发布 iOS应用面临很多破解问题,常见的有IAP内购破解、山寨版本、破解版本等;大众应用上,微信抢红包、微信多开等;而在iOS游戏上,越来越泛滥的外挂问题也不断困扰着游戏厂商...

wangyiyungw ⋅ 05/15 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(十一)JavaScript的DOM操作

JavaScript零基础入门——(十一)JavaScript的DOM操作 大家好,欢迎回到我们的JavaScript零基础入门。最近有些同学问我说,我讲的的比书上的精简不少。其实呢,我主要讲的是我在开发中经常会...

JandenMa ⋅ 21分钟前 ⋅ 0

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 47分钟前 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 55分钟前 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 今天 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 今天 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

python f-string 字符串格式化

主要内容 从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在本文的最后,您将了解如何以及为什么今...

阿豪boy ⋅ 昨天 ⋅ 0

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 昨天 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 昨天 ⋅ 0

容器之查看minikue的environment——minikube的环境信息

执行如下命令 mjduan@mjduandeMacBook-Pro:~/Docker % minikube docker-envexport DOCKER_TLS_VERIFY="1"export DOCKER_HOST="tcp://192.168.99.100:2376"export DOCKER_CERT_PATH="/U......

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部