iOS签名原理

什么是数字签名

首先计算出需要签名数据的HASH值,通过RSA将HASH值加密,就是数字签名。


iOS签名原理_第1张图片
数字签名.jpg

什么是代码签名

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

iOS的双层代码签名

首先这里有两个角色.一个是iOS系统 还有一个就是我们的Mac系统.因为iOS的APP开发环境在Mac系统下.所以这个依赖关系成为了苹果双层签名的基础。

1、在Mac系统中生成非对称加密算法的一对密钥.这里称为公钥M 私钥M。
2、苹果自己有固定的一对公私钥,私钥在苹果后台,公钥在每个iOS系统中;这里称为公钥A , 私钥A。
3、把公钥M以及一些开发者的信息(CSR文件)传到苹果后台,用苹果后台的私钥A去签名公钥M,得到一份数据包含了公钥M以及其签名,把这份数据称为证书

iOS签名原理_第2张图片
证书.png

4、在开发时,编译完一个 APP 后,用本地的私钥 M(导出的P12) 对这个 APP 进行签名,同时把第三步得到的证书一起打包进 APP 里,安装到手机上。
5、在安装时,ios系统取得证书,通过系统内置的公钥A,去验证证书的数字签名是否正确。
6、验证证书后确保公钥M是苹果认证过的,再用公钥M去验证APP的签名,这里就间接验证了这个APP安装行为是否经过苹果官方允许。
有了上面的过程,已经可以保证开发者的认证,和程序的安全性了。
iOS签名原理_第3张图片
双向签名.png

描述文件

描述文件(Provisioning profile)一般包括三样东西:证书、App ID、设备。当我们在真机运行或者打包一个项目的时候,证书用来证明我们程序的安全性和合法性。
苹果为了解决应用滥用的问题,所以又加了两个限制:
第一限制在苹果后台注册过的设备才可以安装;
第二限制签名只能针对某一个具体的APP;
并且苹果还想控制App里面的iCloud/PUSH/后台运行这些权限,所以苹果把这些权限开关统一称为Entitlements(授权文件)。并将这个文件放在了一个叫做描述文件(Provisioning profile)中。
在开发时,编译完一个APP后,用本地的私钥M对这个APP进行签名,同时把从服务器获得的Provisioning profile文件打包进APP里,文件名为embedded.mobileprovision,把APP安装到手机上,最后系统进行验证。
所以,以上第3步,从苹果服务器获取证书+描述文件

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