问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

iOS App签名机制深度解析:从原理到实践

创作时间:
作者:
@小白创作中心

iOS App签名机制深度解析:从原理到实践

引用
1
来源
1.
https://zeeklog.com/ios-app-qian-ming-de-yuan-li/

iOS签名机制涉及众多概念,如证书、Provisioning Profile、entitlements等,容易让人感到困惑。本文将从原理出发,逐步解析这些概念的由来和作用,帮助读者深入理解iOS App签名的完整流程。

目的

在iOS出现之前,主流操作系统(Mac/Windows/Linux)上的软件开发和运行并不需要签名,这导致平台难以控制第三方软件,盗版问题频发。苹果希望在iOS平台上对第三方应用有绝对的控制权,确保每一个安装到iOS设备上的应用都经过官方允许,这就是签名机制的主要目的。

非对称加密

签名机制的基础是数字签名,而数字签名依赖于非对称加密算法。与对称加密使用同一密钥不同,非对称加密使用公钥和私钥。用公钥加密的数据只能用私钥解密,反之亦然。

以常用的RSA算法为例,其数学原理如下:

  1. 选择两个质数p和q,相乘得到一个大整数n(例如p=61,q=53,n=pq=3233)。
  2. 选择1-n间的一个质数e(例如e=17)。
  3. 通过一系列数学公式计算出d,满足:
  • 用n和e进行的数学运算可以通过n和d反解。
  • 只知道n和e时,要推导出d需要知道p和q,即需要对n进行因数分解。

(n, e)组成公钥,(n, d)组成私钥。由于大整数的因数分解在目前技术下几乎不可能实现,因此这种加密方式非常安全。

数字签名

数字签名的作用是验证数据的完整性和来源。具体实现如下:

  1. 使用哈希算法(如MD5)计算原始数据的摘要。
  2. 生成一对公钥和私钥,私钥由持有者保管,公钥公开。
  3. 用私钥加密数据摘要,生成签名。
  4. 接收方用公钥解密签名,同时计算原始数据的摘要,对比两者是否一致。

最简单的签名

最直接的实现方式是:苹果生成一对公私钥,将公钥内置到iOS系统中,私钥保存在苹果服务器。当App上传到App Store时,苹果用私钥签名,iOS设备在安装时用公钥验证签名。

新的需求

除了从App Store下载,iOS还支持以下三种安装方式:

  1. 开发调试时直接安装到设备。
  2. 企业内部分发(In-House)。
  3. AD-Hoc分发(限制设备数量)。

为满足这些需求,苹果引入了双层签名机制:

  1. 在开发机器上生成一对公私钥(L)。
  2. 苹果有一对固定的公私钥(A)。
  3. 将公钥L发送到苹果服务器,用私钥A签名生成证书。
  4. 开发时用私钥L签名App,并将证书打包进App。
  5. 安装时,iOS系统先验证证书,再用证书中的公钥L验证App签名。

加点东西

为防止滥用,苹果增加了以下限制:

  1. 限制安装设备列表。
  2. 限制特定App。

这些信息通过Provisioning Profile实现,它包含了证书、设备ID列表、AppID和权限设置(entitlements),并由苹果私钥A签名。

最终流程

  1. 在开发机器上生成公私钥对(L)。
  2. 苹果有一对固定的公私钥(A)。
  3. 用私钥A签名公钥L生成证书。
  4. 在苹果后台申请AppID,配置设备ID列表和权限,生成Provisioning Profile。
  5. 开发时用私钥L签名App,并将Provisioning Profile打包进App。
  6. 安装时验证Provisioning Profile和App签名。

概念和操作

  1. 证书:包含公钥或私钥的数据包,由其他机构签名。
  2. Entitlements:App权限开关列表。
  3. CertificateSigningRequest:本地公钥。
  4. p12:本地私钥,可以导入到其他电脑。
  5. Provisioning Profile:包含证书、Entitlements等数据,并由苹果后台私钥签名。

其他发布方式

  • App Store的签名方式有所不同,苹果会直接用私钥签名App,安装包中不包含Provisioning Profile。
  • In-House和AD-Hoc的流程类似,但In-House不限制设备数量,需要用户手动信任企业证书。

P.S.一些疑问

  1. 企业证书虽然限制少,但启动时会验证有效期和吊销状态。苹果为何提供这种容易被滥用的方式?
  2. App Store的加密机制实际作用有限,为什么还要进行加密?
  3. 为什么不能简化签名流程,直接使用苹果提供的公私钥?

这些问题反映了iOS签名机制设计上的权衡和局限性。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号