苹果安全机制
- 没经过用户同意, 不能随便获取用户信息
- 所有程序都在沙盒里面运行, B 程序不能进入 A 程序的运行范围
- 跟钱有关的, 比如支付宝, 底层实现都是保密的, 只提供接口调用.这样安全性能够得到保障.
- 如果要防止代码被反编译, 可以将自己的代码中的.m文件封装成静态库(.a文件) 或者framework 文件,只提供别人.h文件,. 这样保证了个人代码的安全性.
- 网络请求中, 发送账号和密码可以通过 POST 请求来操作.如果通过 GET 请求就会把密码和账号暴露出去, 这个时候可以采用 MD5 进行加密, 不过 MD5 现在有专门的破解网站, 这个时候我们可以采用加盐技术.
iOS的签名机制
- 假设, 我们有一个 App 需要发布, 为了防止中途篡改 App 的内容, 保证 App 的完整性, 以及 App 是由指定的私钥发的. 首先, 先将 App 内容通过摘要算法, 得到摘要, 再用私钥对摘要进行加密得到密文, 将源文本, 密文, 和私钥对应的公钥一并发布即可.
- 验证: 验证方首先查看公钥是否是私钥方的, 然后用公钥密文进行解密得到摘要, 将 App 用同样的摘要算法的到摘要, 俩个摘要进行对比, 如果相等那么以前正常. 这个过程只要有一步出问题就视为无效.
数据加密
常见的加密算法:
MD5/SHA/DES/3DES/RC2和RC4/RSA/IDEA/DSA/AES
加密算法的选择: 根据公司的加密方案, 按照公司的接口文档去加密
MD5
特点:
- 输入不同的明文不会得到相同的输出值.
- 根据输出值, 不能得到原始的明文, 过程不可逆.
提示: 现在的 MD5 已不再是绝对安全, 对此, 可以对 MD5 稍作改进, 用来增加解密的难度
加盐 (salt)
在明文的位置加入随机串, 然后再进行 MD5 先加密, 后乱序(对明文进行 MD5, 然后对加密得到的 MD5 的字符串进行乱序), 总而言之就是: 黑客就算攻破了数据库, 也无法解密出正确的明文.
非对称算法
- 对称算法只需要一个秘钥, 非对称算法需要公钥和私钥, 成对出现. 公钥加密的内容只有私钥才能解密, 同样的, 私密加密的龙泪只有公钥才能解密.非对称算法来说会更加安全(只要私钥不泄露就会通信就是很安全). 不过在加密和解密的过程花的时间也会变多. 在 HTTPS 的 SSL 层就用到了非对称算法
数字签名
- 数字签名是一种对数字进行校验的方法, 首先对内容使用摘要算法(比如MD5加密)得到摘要, 然后用私钥加密得到数字签名.
-
接受方获取原内容和数字签名, 相同的摘要算法得到摘要1, 然后用公钥解开数字签名得到摘要2,对比这俩个摘要是否完全相同, 相同即为验证成功.
申请数字证书
数字证书是苹果数字签名后的数字化证书, 是 iOS 系统校验 App 的核心.
过程:
- 开发者首先在 keyChain 中生成一个证书申请文件 (CertificationSigningRequest, 简称 CSR), 这个证书包含开发者信息, 公钥机密算法和摘要算法, 在这个过程中, 首先会产生一个开发者使用的私钥, 保存在 keyChain中.
-
开发者长传 CSR 文件给 Apple 的 MemberCenter (简称MC), 苹果公司会根据该文件生成一个证书, 证书的内容和一段 Apple 的数字签名
- 数字签名是苹果利用自己的私钥加密证书内容摘要得到的, 是为了验证证书的有效性. iOS 系统本身装有苹果公司的公钥, 通过非对称算法去验证.苹果提供的证书有开发、调试证书,企业版发布证书,上架和AddHoc证书,类型不同,功能亦不相同。如果是团队开发,可以将证书导出生成.p12文件给其他人安装。
描述文件
- 描述文件是通过苹果的 MC 下载的, 里面包含证书, AppID 和 设备的 UDID, 除了这些还有授权信息, 规定了 App 能够使用的服务有哪些.
App打包签名, 校验
Xcode 在打包生成 ipa 文件的过程中, 利用当前证书的私钥进行代码, 资源文件的数字签名, 并且将其存放在 ipa 文件夹的 _CodeSinature 文件夹下
当 App 安装到 iOS 的系统上满的时候, 系统先通过描述文件找到数字证书, 通过证书里面的苹果数字签名, 验证证书的有效性. 如果证书有效, 取出证书中的公钥, 解密 App 中的数字签名, 如果发现摘要一直, 那么验证通过