编辑: kieth | 2019-02-02 |
本章主要介绍以下内容: ? 加密解密基础. ? 防止内存修改. ? 对资源的加密解密. ? 使用加固工具. 2.1 加密解密基础 加密解密主要用于保证信息安全,加密是以某种特殊的算法改变原有的信息数据的过 程,而解密则是将改变后的信息数据进行还原的过程. 加密算法可以分为单向加密和双向加密两大类,单向加密是不可逆的加密,只能加密 无法解密.单向加密有以下特性,任意两段不同的明文加密之后的密文是不同的,而同一 段明文经过加密之后的密文是相同的,不可逆,即理论上通过密文无法解密出原文.单向 加密可以用于判断文件在传输过程中是否被窜改过,也可以用于记录一些隐蔽的信息.例如,用户的密码,可以通过 MD5 加密之后存储到数据库中,每次用户登录都只将用户提 交的经过 MD5 加密的密文与数据库中的密文进行比较来判断,这样大大提高了安全性. 常用的单向加密算法有 MD
5、SHA、HMAC 等. 双向加密与单向加密相反,经过双向加密的密文可以被解密回明文,而双向加密又可 以分为对称加密和非对称加密.对称加密指的是可以通过同一个密钥加密和解密,常见的 对称加密算法有 DES、3DES、AES 等.而非对称加密指的是加密和解密用的是不同的密 钥,常见的非对称加密算法有 RSA. 2.1.1 公钥/私钥与非对称加密 理解非对称加密是理解数字签名与数字证书等一系列概念的关键,每一个技术的出现 都是为了解决问题,非对称加密主要是为了解决以下几个问题. ? 如何确保收到的内容没有被窜改. ? 如何确保收到的内容确实是对方发的,而不是其他人伪造的. 如果使用普通的对称加密,是解决不了上面这两个问题的,因为如果希望朋友能够对 我加密了的内容进行解密,就需要把密钥给朋友,但密钥在传输的过程中有可能泄露,一第2章加密解密第1篇实用技术篇 ・16・ 旦密钥被泄露,其他人就可以在我们的通信中拦截通信的内容,对其解密然后进行修改, 然后重新加密再发送. 非对称加密很好地解决了上面这两个问题,首先非对称加密会生成两个密钥,称之为 公钥和私钥,公钥是可以公开的,私钥掌握在自己的手上,当发送一个文件给朋友,可以 用我的私钥加密,朋友需要用我的公钥解密,而当朋友要发送一个文件给我的时候,需要 用我的公钥加密,然后我可以用我的私钥进行解密.这段话非常关键的点在于,私钥加密 之后,只有公钥可以解开(私钥解不开);
而公钥加密之后,则只有私钥可以解开(公钥 解不开),如图 2-1 所示. 图2-1 非对称加密 因为我的私钥不需要经过任何传输,自己保管即可,泄露的风险非常低.而别人拿不 到我的私钥,就无法冒充或修改我发送的内容,因为只有经过我的私钥加密之后,才能用 我的公钥解开,否则用我的公钥是解不开的.如果有人想窜改朋友发给我的文件,因为没 有我的私钥,解不开朋友发送的文件,所以也就无法窜改朋友发送给我的文件了. 2.1.2 信息摘要与数字签名 由于非对称加密算法的复杂度很高,效率比对称加密算法要大得多,所以对一个巨大 的文件执行非对称加密的代价非常大,因此可以对文件先执行信息摘要,然后对文件的摘 要进行非对称加密.信息摘要指的是将一个文件执行一次单向加密,输出一段固定简短的 摘要内容,这段摘要内容相当于这个文件的指纹,对不同的文件执行信息摘要可以得出不 同的摘要内容,而对同一个文件执行信息摘要得出的摘要内容是相同的.对文件的指纹进 行加密要比对整个文件进行加密高效得多. 而数字签名就是对摘要进行非对称加密的操作, 把数字签名当作名词时可以理解为经过非对称加密后的摘要内容. 当我希望发送一个巨大的文件给朋友时,保证这个文件没有被篡改过,就可以对文件 进行信息摘要和数字签名,然后把签名结果和文件一起发送给朋友,如图 2-2 所示. 当朋友接收到文件和数字签名时,先用公钥对数字签名进行解密(这个过程也称之为 验签),然后对文件执行一次信息摘要,对比摘要内容,如果签名中的摘要内容和文件执 行信息摘要得出的摘要内容一致,说明这个文件没有被篡改过,如图 2-3 所示. 第2章加密解密 ・17・ 图2-2 信息摘要与数字签名的生成 图2-3 验签 2.1.3 数字证书 为了让其他人能够方便地辨别使用公钥,可以将公钥以及公钥使用的算法、所有者、 有效期等一系列属性进行打包,这样的一个数据结构称之为 PKCS10 数据包,在操作 iOS 开发者证书时会碰到.p10 文件就是对应一个这样的数据结构. 不论是直接给出公钥还是给出 PKCS10 数据包, 都存在一个隐患, 就是公钥或 PKCS10 数据包在传输的过程中被替换修改,这样其他人就可以伪装成我们发送任何内容,那么如 何保证你拿到的公钥确确实实就是我发给你的公钥呢? 数字证书就是用来解决这个问题的,首先需要有一个颁发证书的权威的第三方机构 (CA 数字证书认证中心),来帮我们认证这个 PKCS10 数据包,CA 使用它的私钥来对我 们的 PKCS10 数据包进行数字签名,这样就得到了一份经过 CA 认证的数字证书,数字证 书一般遵循同一个格式标准(X509 标准). 在发送文件的时候,除了对文件进行签名之外,还需要附带我们的证书.接收到文件 时可以使用 CA 的公钥对证书进行验签,确保这个证书是有效的,接下来再使用证书中的 公钥对文件的数字签名进行验签.经过了双重验签之后,就可以保证文件的来源和内容没 有经过窜改. 2.2 防止内存修改 如金山游侠、烧饼修改器这类游戏辅助,可以通过修改内存,直接修改玩家的金币、 第1篇实用技术篇 ・18・ 经验值等数据,这种修改危险程度最低,也最容易防御.一般玩家修改内存的方法,是通 过内存修改工具查找到游戏在内存中的数值,如金币、经验值等,然后用该工具修改这块 内存,这样金币、经验等数据就被修改了. 当玩家的金币是