iOS面试知识点iOS开发攻城狮的集散地iOS底层基础知识

iOS 签名机制

2018-12-11  本文已影响56人  ZhengYaWei

前言

学习iOS签名机制,可参考如下学习路线:

加密解密(对称DES 3DES AES、非对称RSA)--->单向散列函数(MD4、MD5、SHA1-3)--->数字签名--->证书--->签名机制

一、加密解密

1.1 对称和非对称

为了防止传输信息被窃听,需要对传输信息进行加解密。根据密钥的使用方法,可以将密码分为 2 种,即对称密码和非对称密码(也称公钥密码)。对称密码中使用的加密和解密密钥相同,非对称密码中使用的密钥不同。

对称密码算法有 DES、3DES、AES 等。DES 是一种将 64bit 明文加密成 64bit 密文的对称密码算法,密钥长度是 56bit 。由于 DES 每次只能加密 64bit 的数据,遇到比较大的数据,需要对DES加密进行迭代(反复),目前已经可以在短时间内被破解,所以不建议使用 DES;3DES是将DES重复 3 次所得到的一种密码算法,也叫做 3 重 DES,目前还被一些银行等机构使用,但处理速度不高,安全性逐渐暴露出问题;AES 的密钥长度有 128、192、256bit 三种,目前 AES ,已经逐步取代 DES、3DES,成为首选的对称密码算法。一般来说,我们也不应该去使用任何自制的密码算法,而是应该使用 AES,它经过了全世界密码学家所进行的高品质验证工作。

非对称密码算法中,目前使用最广泛的公钥密码算法是RSA。

1.2 如何传输密钥?

对称加密体系中,密钥不能直接传输,否则可能被截取,截获者也能破解密文。有以下几种密钥传输方式:

1.3 混合密码系统(Hybrid Crypto System)

对称密码不能很好地解决密钥配送问题,但是加解密速度快;非对称密码加密解密速度比较慢,但是能很好的解决密钥配送问题。所以采取对称密码和公钥密码的优势相结合的方法(即混合密码系统),可以很好的解决对称密码密钥配送问题以及加解密速度慢的问题。包括 https 中也是采用类似的混合密码系统,https 中的服务端相当于消息接收者,客服端相当于消息发送者。具体步骤如下:

加密步骤:

  • 1、接收者生成私钥和公钥(非对称密码体系),并将公钥发给消息发送者;
  • 2、发送者生成会话密钥(对称密码体系),使用会话密钥加密消息,使用公钥加密会话密钥;
  • 3、发送者将加密消息以及机密会话密钥一并发给消息接收者;

解密步骤:

  • 1、消息接收者用私钥解密出会话密钥;
  • 2、再用会话密钥解密出消息;

二、单向散列函数

2.1 单向散列函数特点

单向散列函数又被称为消息摘要函数(哈希函数),具备以下特点:

2.2 常见单向散列函数

2.3 单向散列函数的应用场景

三、数字签名

3.1 数字签名过程

消息接收者可以借助数字签名的方式来识别消息是否被篡改、保证消息发送者无法抵赖消息。数字签名,其实就是将公钥密码反过来使用。在非对称密码体系中,任何人都可以使用公钥进行加密,只有消息接收者才拥有私钥解密消息;在数字签名中,任何人都可以使用公钥验证签名,只有消息发送者才能拥有私钥,并借助私钥签名。


上图可以看出签名的制作过程,将消息生成对应的散列值,然后消息发送者使用私钥加密消息散列值。发送者会将加密消息和加密的签名一起发送个消息接收者。消息接收者接受到消息后,借助消息发送者的公钥解密消息散列值,同时再用自己的公钥解密消息并生成另一个消息散列值,比较两个散列值,若一样则说明消息没有被篡改,否则消息说明消息被篡改。

3.2 小结

数字签名的作用不是为了保证机密性,仅仅是为了能够识别内容有没有被篡改以及防止消息发送人否认。数字签名其实就是将公钥密码反过来使用。数字签名中用私钥加密,公钥解密;非对称密码中用公钥加密,私钥解密。

四、证书

4.1 证书的作用

如果出现中间人攻击,中间人冒充消息接收者,中间人自己生成公钥和私钥,并将自己的公钥发给消息接收者。所以如果想防止中间人攻击,消息发送者必须确保拿到公钥的合法性。通过证书相关手段可以确保公钥的合法性,消息发送者通常要通过权威机构获取公钥。

证书是由权威机构认证的。密码学中的证书,全称叫公钥证书(Public-key Certificate,PKC),和现实生活中的毕业证、驾驶证等类似,里面有个人信息、此人的公钥以及权威认证机构(Certificate Authority,CA)对公钥施加的数字签名三个部分组成。CA 是指能够认定“公钥确实属于此人”并能够生成数字签名的个人或者组织。

4.2 证书的利用


从上图中可以看出消息接收者需要生成密钥对,并将自己的公钥给权威认证机构,权威机构会用自己私钥对消息接收者的公钥施加数字签名,制作成证书并保存在权威机构的仓库中。于此同时,消息发送者可以通过正规渠道获取拿到权威机构公钥(一般是提前内置的,如 iPhone 设备中包含 apple 的公钥),并能下载证书,此时可以用权威机构的公钥验证证书的合法性。映射的现实生活相当于:教育机构工作人员从教育机构获取到一个可以用于检测任意学历证书(证书)真伪的工具(权威机构公钥)。

五、iOS 签名机制

5.1 iOS 签名机制作用

iOS签名机制主要是保证安装到用户手机上的APP都是经过Apple 官方允许的,如果篡改了 App 本身的源码或资源文件,签名值将无法对应上,便无法安装。实际开发过程中不管是真机调试,还是发布APP,开发者都需要经过一系列复杂的步骤,这些步骤都是为了防止随意安装 App。

利用签名机制,也可以在原有项目中实现App自签名功能代码,对资源文件、源码、证书签名,在App 启动时做签名校验,当有人改动资源文件,签名校验就会失败,则直接调用 exit 退出 App,为了防止逆向可将该功能相关代码通过 C 语言形式实现或者整个应用实现代码混淆。网上有不少介绍 App 自签名的实现代码,但是笔者认为自签名功能很鸡肋,因为逆向的本质是通过插件的形式更改内存中的代码,一般并非是直接更改源码或资源文件。

5.2 iOS 签名机制作流程

有了上述知识作为铺垫,签名机制流程就很好理解了,如下图:


Mac 设备具有生成公钥和私钥的能力,平时操作钥匙串工具钥匙串访问-->证书助理-->从证书颁发机构请求证书主要目的就是为了生成 Mac 公私钥,之后再将公钥上传到苹果后台,用于制作证书。Apple 本身可以认为是权威机构,Apple 后台可以生成私钥,iOS 设备中有公钥。

5.3 线上 App 签名机制

如果 APP 是从 AppStore 下载安装的,会发现里面是没有 mobileprovision 文件。线上 app 的验证流程简单很多,应用上传到 Apple 后台,Apple 会用自己的私钥进行签名,下载应用的设备中包含 Apple 公钥,应用下载完成,直接可以用设备中的 Apple 公钥进行验证。流程如下:


上一篇下一篇

猜你喜欢

热点阅读