iOS开发,让数据更安全的几个加密方式

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
查看查看418 回复回复3 收藏收藏 分享淘帖 转播转播 分享分享 微信
查看: 418|回复: 3
收起左侧

iOS开发,让数据更安全的几个加密方式

[复制链接]
jswift 发表于 2016-10-12 21:34:54 | 显示全部楼层 |阅读模式
快来登录
获取优质的苹果资讯内容
收藏热门的iOS等技术干货
拷贝下载Swift Demo源代码
订阅梳理好了的知识点专辑
写在前面:任何应用的开发中安全都是重中之重,在信息交互异常活跃的现在,信息加密技术显得尤为重要。在app应用开发中,我们需要对应用中的多项数据进行加密处理,从而来保证应用上线后的安全性,给用户一个安全保障。这篇文章就介绍在iOS开发中最常用的数据加密方式。

文中证书锁定内容部分参考了这篇博客




0、iOS中数据加密有下面几种方式:

1、使用数字证书锁定来保证不被中间人拦截,将服务器返回的数据和我的当地证书进行对比,确保是从服务器返回回来的。证书有ca证书,也可以自己给自己签发证书。像12306购票。

2、使用https协议请求网页,post来请求网页数据,保证用户的账号密码不被被人获取到。

3、使用苹果自己的SSKeyChain钥匙串,将用户的账号密码保存在钥匙串中。钥匙串拱了错误处理,如果保存出错,会在判断后打印出出错的信息。

4、最保险的加密算法是非对称加密。非对称加密公钥加密私钥解密。缺点是要耗费时间。




1、证书锁定

当我们上网浏览网页,从网上获取数据的时候,我们知道,不管是http还是https协议,都是服务端被动,客户端主动。所以,客户端第一次发出请求之后,通常无法确定服务端是不是合法。就很可能就会出现以下情景,正常情况下,我们想要根据文章aid查看某篇文章内容,其流程如下:

iOS开发,让数据更安全的几个加密方式 1

iOS开发,让数据更安全的几个加密方式 - 敏捷大拇指 - iOS开发,让数据更安全的几个加密方式 1


但如果遭受黑客攻击,流程就会这样的:

iOS开发,让数据更安全的几个加密方式 2

iOS开发,让数据更安全的几个加密方式 - 敏捷大拇指 - iOS开发,让数据更安全的几个加密方式 2


此时恶意服务端完全可以发起双向攻击:对上可以欺骗服务端,对下可以欺骗客户端,更严重的是客户端段和服务端完全感知不到已经被攻击了。这就是中间人攻击。

关于中间人攻击维基百科上有更深入的定义:

中间人攻击(Man-in-the-middle attack,缩写:MITM)是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。在中间人攻击中,攻击者可以拦截通讯双方的通话并插入新的内容。在许多情况下这是很简单的(例如,在一个未加密的Wi-Fi无线接入点的接受范围内的中间人攻击者,可以将自己作为一个中间人插入这个网络)。

一个中间人攻击能成功的前提条件是攻击者能将自己伪装成每一个参与会话的终端,并且不被其他终端识破。中间人攻击是一个(缺乏)相互认证的攻击。大多数的加密协议都专门加入了一些特殊的认证方法以阻止中间人攻击。例如,SSL协议可以验证参与通讯的一方或双方使用的证书是否是由权威的受信任的数字证书认证机构颁发,并且能执行双向身份认证。

那么我们来看下证书锁定是怎么样提高安全性,避免中间人攻击的,用一张简单的流程图来说明:

iOS开发,让数据更安全的几个加密方式 3

iOS开发,让数据更安全的几个加密方式 - 敏捷大拇指 - iOS开发,让数据更安全的几个加密方式 3


不难看出,通过证书锁定能有有效的避免中间人攻击。




1.1、证书锁定的缺点

证书锁定尽管带了较高的安全性,但是这种安全性的提高却牺牲了灵活性。一旦当证书发生变化时,我们的客户端也必须随之升级,除此之外,我们的服务端不得不为了兼容以前的客户端而做出一些妥协或者说直接停用以前的客户端,这对开发者和用户来说并不是那么的友好。

但实际上,极少情况下我们才会变动证书。因此,如果产品安全性要求比较高还是启动证书锁定吧。

在iOS开发中,我们可以自己给自己签发数字证书,就类似于12306购票网站。从而保证了数据的安全性。下面是生成证书的过程。

[Bash shell] 纯文本查看