iOS应用签名原理

什么是数字签名

数字签名介绍

通信双方A,B,A拥有RSA(非对称加密)的私钥,B拥有RSA的公钥,现在A要发送一个文件给B,但是这个文件又比较大,RSA一般适用于小文件的加密,所以直接采用RSA不太合适,所以A通过Hash函数,生成文件的摘要(digest)(进行签名),然后使用私钥对这个文件摘要加密,然后将这个加密后的摘要文件和要发送的文件一起发送给B,B接受到文件后,通过公钥对摘要文件进行解密,然后B对发送来的文件通过Hash 函数,生成摘要,用这个摘要和解密好的摘要文件内容进行对比,如果相同,就说明文件没有被修改,如果不同就说明文件已经被串改了。

这个过程中A生成的摘要文件就是对要发送文件的数字签名。

代码签名: 是对可执行文件或脚本进行签名。用来确认软件签名会未被修改或者损坏的措施。和数字签名的原理一样,只不过签名的数据是代码而已

为什么要今行代码签名

在iOS出来之前,以前的主流操作系统(MACOS,Windows)的软件,随便从哪里下载的都能运行,系统的安全存在隐患,盗版软件,病毒入侵,静默安装等待。要想保证下载的APP都是经过苹果官方认可的,那么就要使用代码签名。

苹果采用的代码签名方式-双层代码签名

截屏2020-11-03 上午11.03.15.png
  1. 我们的Mac电脑中包含了一对公私钥 ,公钥M,私钥M,向苹果申请证书,我们首先要生成csr文件,csr文件中包括了公钥M。在钥匙串->证书助理->从证书颁发机构请求证书, 填写相关信息后会生成一个CertificateSigningRequest.certSigningRequest 证书,然后在开发者网站上上传这个文件,就可以生成这证书。然后下载这个证书,双击安装到钥匙串。这个证书中包含了公钥M,还有用私钥A对公钥M签名文件进行RSA加密后的文件。

  2. 在开发这网站上选择bundleID生成相应的测试,上架描述文件,当然,也可以在xcode中生成。然后项目中选择这个bundleID对应的描述文件进行运行。描述文件中包含了苹果后端注册的设备列表,APPID,还有权限文件。

  3. Xocde 在运行的过程中会使用电脑中的私钥(也可以是我们导出来的p12文件),将描述文件和从开发者网站下载的证书一起打包进ipa文件中。也是说ipa文件中包含了MachO文件,MachO文件的签名,描述文件还有从苹果开发者网站上下载下来的证书。

  4. iOS手机在安装的过程中,首先是通过公钥A对证书中的公钥M的签名文件进行解密,解密完成和公钥M Hash后的值对比,相同则说明公钥M是有效的,不相同就拒绝安装。然后使用有效的公钥M对MachO签名文件文件进行解密,解密完成和MachO Hash后的值对比,相同则说明MachO是有效的进行安装,不相同就拒绝安装。这整个过程中当然还包含了对描述文件中信息的验证。

描述文件的作用

苹果为了解决应用滥用的问题,加了一些限制,限制只有苹果后台注册的设备才能安装(development描述文件),并且只能安装特定的APP,还有对APP的推送和iCloud,后台运行等功能进行了限制,苹果对这些权限的开关统一称为授权文件(Entitlements),并将这个授权文件放在了一个叫做Provisioning Profle(描述文件)中,这个文件本质就是一个plist文件,里面包含各种权限信息。

你可能感兴趣的:(iOS应用签名原理)