一、部分概念
数字签名,就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。
公开密钥加密,也称为非对称加密,是密码学的一种算法,它需要两个密钥,一个是公开密钥,另一个是私有密钥;一个用作加密的时候,另一个则用作解密。使用其中一个密钥把明文加密后所得的密文,只能用相对应的另一个密钥才能解密得到原本的明文;由于加密和解密需要两个不同的密钥,故被称为非对称加密。
想要详细了解加密概念的可以看一下这篇文章,散列、对称加密和非对称加密。
二、单层验证
通过AppStore下载的APP都是单层认证,这个简单介绍一下。
- Apple服务器和iPhone存在一对非对称加密秘钥,私钥放在服务器,公钥放在终端设备上
- APP开发完成上传到AppStore后,苹果会使用私钥对APP签名进行加密
- 用户安装APP的时候,系统会拿到手机中的公钥对APP签名进行解密,验证APP是否被篡改,验证通过则安装APP
三、双层验证
除了从AppStore下载安装APP,还可以通过以下三种方式安装APP:
- 开发阶段,开发人员会进行真机调试,通过Xcode可以直接将程序安装到手机上
- 测试阶段,AD-Hoc模式可以将APP发送给测试人员进行安装
-
发布阶段,In-House 企业内部分发,用户可以直接安装企业证书签名的APP
为了防止不同阶段任意AppID的APP在任意设备上都可安装,苹果会对AppID和设备进行限制,双层验证就此诞生。
- Apple服务器和iPhone存在一对非对称加密秘钥,私钥放在服务器,公钥放在终端设备上,分别是公钥A,私钥A
- 开发的时候我们需要申请证书,在这之前我们要生成证书请求文件CSR,这时候MAC电脑会生成一对非对称加密秘钥:公钥M和私钥M。其中公钥M包含在CSR文件中。
- 我们需要在开发者中心生成一个开发证书和一个描述文件。开发证书包含公钥M和通过私钥A加密的证书签名。描述文件包括设备id、app_id、权限文件和证书。
- 将证书和描述文件下载后进行安装,这时私钥M会自动和证书进行关联,私钥M就是我们通常说的p12文件。
- 我们打包或者运行APP时,Xcode会拿到私钥M对App签名进行加密,同时描述文件也会打包进APP内。
- 当我们APP要安装到手机上时,首选会验证描述文件中的AppID和设备ID等是否相匹配,匹配后才进行后面的校验
- 系统会先拿到描述文件中的公钥A对证书签名进行校验,验证通过拿到公钥M。由于App签名是由私钥M进行加密的,所有可以通过刚刚拿到的公钥M对App签名进行解密验证。所有验证都通过以后就可以安装了。
注:苹果不会验证Mach-o的更改,只会验证安装行为