美文网首页
iOS加密小记

iOS加密小记

作者: 请叫我啊亮 | 来源:发表于2018-09-09 20:42 被阅读14次

    1 对称加密
    加密解密是同一个密钥,加解密速度快,常见的有DES,3DES,AES128,AES256等。DES已经不再安全,现在推荐使用AES。对称加密存在的问题是密钥配送问题。开发中一般是将密钥保存于客户端和服务器两端,这样的问题是密钥始终是同一个,一旦泄漏则产生危险。

    2 非对称加密
    存在一对相匹配的公钥和私钥,公钥加密则私钥解密,私钥加密则公钥解,加解密速度慢。一般使用RSA算法。非对称加密很好的解决了对称加密中密钥配送问题,但是加解密速度慢是一个很大缺陷。

    3 混合密码
    为了使通信过程安全且兼顾加解密效率,广泛采用的是混合密码加密,A发送内容(内容的容量大,加密速度有要求)给B流程整理如下
    3.1 A对B说,把公钥给我
    3.2 B生成一对公钥/私钥,并将公钥给A
    3.3 A随机生成一个随机数字串
    3.4 A用生成的数字串对需要发送的内容加密(AES对称加密)
    3.5 A用从B获取到的公钥对数字串进行加密(RSA非对称加密)
    3.6 A将4/5两部得到的加密结果,一起发送给B
    B得到A发送的内容后解密过程如下
    3.7 B利用自己的私钥对3.5内容解密,得到数字串(RSA解密)
    3.8 B利用数字串对3.4内容解密,得到发送内容(AES解密)

    4 中间人攻击



    中间人攻击就是伪造公钥,让通信双方都以为自己正在跟对方通信,但实际信息已经被窃取。防止的措施就是利用证书验证公钥。
    4.1 证书,全称叫公钥证书,里面存在公钥,以及所属姓名,邮箱,以及认证机构(CA)施加的数字签名。
    证书申请流程大概如下
    4.2 B生成公钥私钥对
    4.3 B在认证机构认证自己的公钥
    4.4 认证机构对公钥进行数字签名生成证书
    此时,A要对B发送消息时,在上面的3.3之前需要增加一个步骤,进行公钥验证。A从认证机构获取证书,拿到公钥,比对从3.2得到的公钥,验证合格才能进行后续流程,避免了中间人攻击。

    5 https



    https的加密也是采用混合密码,跟上面的流程完全一样。这里要说下的是在iOS开发中公钥验证需要做什么。
    5.1 如果你用的是付费的公信机构颁发的证书,标准的https,那么无论你用的是AF还是NSUrlSession,什么都不用做,代理方法也不用实现,你的网络请求就能正常完成。公钥验证时,苹果手机会从公信机构获取证书完成验证过程。
    5.2 如果用的是自签名的证书,首先你需要在plist文件中,设置可以返回不安全的请求(关闭该域名的ATS),AFN时需要设置如下代码

    policy.allowInvalidCertificates = YES;
    policy.validatesDomainName = NO;
    

    一般的,需要把自签名的服务端证书,或者自签的CA根证书,是一个.cer文件,导入到项目中。再写上如下代码

    NSString *certFilePath = [[NSBundle mainBundle] pathForResource:@"AFUse_server.cer" ofType:nil];
    NSData *certData = [NSData dataWithContentsOfFile:certFilePath];
    NSSet *certSet = [NSSet setWithObjects:certData,certData, nil];    
    policy.pinnedCertificates = certSet;
    

    6 单向散列函数
    又名消息摘要函数,哈希函数,根据消息算出散列值。特点如下

    • 散列值长度固定,和消息长度无关
    • 计算速度快
    • 消息不同,散列值不同
    • 单向性
      常见的单向散列函数有MD5,SHA,这两种均不再安全,推荐使用SHA256/SHA512。

    7 数字签名
    数字签名就是使用自己的私钥对信息进行加密,作用是确认信息的完整性,举例:A发送数据给B,则对B能确认数据是否是A所发,且能确认数据是否被人篡改。


    上面的流程中,A发送给B的内容包括消息体(明文传输)和签名,签名之前先对消息体进行单向散列函数的目的是减小消息体长度,加快加密速度。
    上面流程的问题是明文传输,如下方式可以解决这个问题


    8 iOS打包签名

    参考文献
    http://www.cocoachina.com/ios/20161220/18393.html
    https://www.cnblogs.com/SirSmith/p/4985571.html
    http://blog.cnbang.net/tech/3386/

    相关文章

      网友评论

          本文标题:iOS加密小记

          本文链接:https://www.haomeiwen.com/subject/dfvdgftx.html