iOS-App安全相关

网络开发准则

  • 1.在网络开发中不允许传输用户明文隐私数据
  • 2.在本地不允许保存用户的明文隐私数据

1.HTTPS认证

单向认证

  • 非证书模式
//适配HTTPS-非证书模式
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
[securityPolicy setValidatesDomainName:NO];
securityPolicy.allowInvalidCertificates = YES; //还是必须设成YES
manager.securityPolicy = securityPolicy;
  • 证书模式
    材料:买来的服务器证书server.cer(客户端要用来验证服务端
  • Client向Server请求证书
  • 和自己的证书对比,不一致或者无效就断开连接
  • 通过后用户随机产生一个秘钥通过Server的公钥加密传给服务端
  • Server用自己的私钥解密,拿到对称秘钥key
  • Server和Client指定这个秘钥为加密秘钥,通讯数据由秘钥加密

双向认证

双向认证比单向认证多了一步,就是服务器要认证客户端
材料:

  • 买来的服务器证书server.cer(客户端要放一个,用来验证服务端)
  • CA的根证书(放到服务器中,用来验证客户端的证书)
  • p12证书(用来放到客户端,网络请求的时候会传给服务端)。
  • 用户在产生随机密钥的时候
  • 要用p12文件来对一段数据进行签名,然后把签名和p12证书,加密的对称密钥传给服务器,然后服务器接到以后,会用CA根证书(或自签的根证书)来对证书和签名数据进行验证,如果正确,通讯继续,否则,断开连接。

客户端适配

  • 添加证书模式:AFSSLPinningModeCertificate mode
客户端认证服务端
NSString * cerPath = [[NSBundle mainBundle] pathForResource:@"证书名称" ofType:@"cer"];
NSData * cerData = [NSData dataWithContentsOfFile:cerPath];
manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:[[NSSet alloc] initWithObjects:cerData, nil]];
manager.securityPolicy.allowInvalidCertificates = YES;
[manager.securityPolicy setValidatesDomainName:YES];
  • info.plist配置白名单
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>cer文件中查看</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.0</string>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

2.防止别人获取App敏感信息的常用方式?(10分)

1.URL编码加密
对iOS app中出现的URL进行编码加密,防止URL被静态分析
2.本地数据加密
对NSUserDefaults,sqlite存储文件数据加密,保护iOS app的帐号和关键信息。
3.网络传输数据加密
对iOS app客户端传输数据提供加密方案,有效防止通过网络接口的拦截获取
4.方法体,方法名高级混淆
对iOS app的方法名和方法体进行混淆,保证源码被逆向后无法解析代码
5.程序结构混排加密
对iOS app逻辑结构进行打乱混排,保证源码可读性降到最低
6.使用keychain来存储用户信息,也就是钥匙串,使用keychain需要导入Security框架
7.阻止动态调试

3.加密算法

  • 哈希(散列)函数
  • MD5(密码密文、搜索、版权、文件完整性校验)
  • SHA1(弱哈希算法使用漏洞)
  • SHA256/512 (安全)
  • Base64(一般用于图片、视频上传处理)
  • 对称加密算法(DES、AES)加密/解密使用相同的秘钥
  • 非对称加密算法(RSA)公钥加密,私钥解密
  • SSKeyChain(支持对存储在钥匙串中密码、账户进行访问,包括读取、删除和设置)

①对称加密-非对称加密

对称加密:解密加密都用同一个密钥来进行

  • 优点
    算法公开,计算量小,加密速度快,加密效率高
    双方使用相同的钥匙,安全性得不到保证
  • 缺点
    如果用户一旦多的话,管理密钥也是一种困难。不方便直接沟通的两个用户之间怎么确定密钥也需要考虑,这其中就会有密钥泄露的风险,以及存在更换密钥的需求。
    对称加密通常有 DES,IDEA,3DES 加密算法。

②非对称加密

==算法强度复杂,安全性依赖于算法与密钥==。 加密解密速度慢。
用公钥和私钥来加解密:。即A 的公钥加密过的东西只能通过 A 的私钥来解密;同理,A 的私钥加密过的东西只能通过 A 的公钥来解密。顾名思义,公钥是公开的,别人可以获取的到;私钥是私有的,只能自己拥有

  • 缺点
    加解密比对称加密耗时.
  • 优点
    比对称加密安全.

应用场景

非对称和对称加密各有优缺点,一般把两者结合
在实际应用中,通常采取 数据本身的加密和解密使用对称加密算法(AES)
用RSA算法加密并传输对称算法所需的密钥

③Base64加密原理

使用64个字符来对任意数据进行编码,同理有Base32、Base16编码

64字符为:大写A-Z,小写a-z,数字0-9,+和/
本质上是一种将二进制数据转成文本数据的方案
对于非二进制数据,是先将其转换成二进制形式,然后每连续6比特(2的6次方=64)计算其十进制值,根据该值在上面的索引表中找到对应的字符,最终得到一个文本字符串.

使用场景

  • 邮件
  • 如果纯文本数据包含不可见字符,就需要使用base64
  • 简单加密(所以看到字符串中包含大小写和等号,很可能就是base64编码)
  • URL编码

为什么

  • base64编码具有不可读性,即所编码的数据不会被人直接看出
  • 编码后比原字符多出1/3的空间
  • 我们知道在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大大降低
  • ASCII-美国信息交换标准代码
    使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容