赣州新闻网

首页 / 科技

一文概述链上治理隐私问题与技术方案

2020-01-27 · 赣州新闻网 · 科技

不少果粉对 Apple 钟情,与它的纯净、安全有很大关系,我们发现在苹果的设备上下载应用时,不会出现触发下载一系列垃圾软件的情况,而且用户可以明确 App 的来源——通过官方商店 AppStore 购买、企业证书安装还是 TestFlight 下载。为了_ n @ : 1 k Z ]防止盗版软禁、病毒入侵、静默安装以及屏蔽其它不可控因素,并确保每一个安装到 iOS 设备上的应用都是被官方允许的,苹果设定了一套 应用签名机制 。

数字签名

数字g ] 9 y I签名,又称公钥数字签名,是只有信息的发: ) R . D o T $送者才能产生的别人无法伪造的一段数字串,发送者对要发送的数据打w O a % . n j }上签名标记,表示这份7 ; n J 7 2 E @经过认证,未被篡改的。

数据传输

下面模拟一下 数据传输 的过程:

  1. 假如发送方直接将原始数据明文传输给接收方时,数据非常不安全,极易被篡改;
  2. 为了提升安全性并同时简化明文,可以对数据进行 哈希算法 处C e I 3 * U Q理,得到原始数据的 摘要 ,然后将摘要发送给接收方。但假如哈希算法被泄漏,依然存在数据被篡改的风险;
  3. 引入 非对称加密算法 ,对一份数据,用 哈希算法 计算出摘要后,再用 RSA 的 私钥G z } U 0 ! 7 . n 加密摘要,得到原始数据的数字签名, 发送方将数字签名与原始数据一起发送给接收方 。

我们将 原始数据进行哈希加密、非对称加# J m 0 r ? E ( A密后的数K U 5 c W ,据 称为 数字签名 。

接收方拿到数据后,需要进行签名验证,来确保数据传输过程中,未被篡改。

数字签名验证

签名验证的具体步骤如下:

  1. 接收方拿到数据后,通过同样的 哈希加密处理原始数据 ,得到哈希值(摘要);
  2. 再利用 非对称将数字签名中M w X 3 a的校验哈希值(摘要)解密 出来;
  3. 最后对比两个哈希值是否一致,判断出数据是否被篡改。

用一张图还原数字签名N V的完整过程:

iOS 应用签名原理

再来看F ; O m u看如何利用数字签名保证每个安x # i l =装到 iOS 上的 App 都被苹果认证允许。

代码签名

代码签名就X U S 9 2 o { ?是对可执行文件或脚y n ;本进行数字签名@ G A d p,用来确认软件在签名后未被修改或损坏的措施。它的原理和数字签名类似,只不过把签名的不是数据,而是代码。

简单的代码签名

假如 App 是只能从 App Store 上下载,那么它的验证方式就比较简单了。

由苹果官方生成一对公私钥,在 iOS 系统中内置一个公钥,私钥由苹果后台保存。

我们把 App 上传到 App Store 时, 苹果后台用私钥对 App 数据进行签名 ,! ~ v y n 4 f G {iOS 系统下载这个 App 后, 用公钥验证这个签名 ,如果签名正确则这个 App 肯定是由苹果后台认证的,并且没有被修改或损坏。

iOS 应用签名原理

但 iOS 设备安装 App 并不只有 App Store 这一个渠道,比如开发者的真机调试、I H STestFlight 内测、r F ^In-House 企业证书分发等,此时简单的代码签名就无法满足对 App 的完全验证了。

iOS 代码签名的复杂度需要相应增加,于是双层代码签名(双重签b C z 0名)产生了。

双层代码签名

“双层”意在用 两对 公私钥做加密验证,它们分别是 Mac 本地的一对和 A. } npple 服务提供的一对。

双层代码签名的存在是为了R ; = c !钥,去验证证书里的签名是否正确。

  • 继续用 Apple 公钥验证描述文件是否正确。
  • 用 Mac 公钥验证 App 签名是否被篡改。
  • iOS 应用签名原理

    上面的步骤对应到实际操作和概 B P念是3 e :这样的:

    第 1 步:Mac 上依次打开“钥匙串访问 → 证书助理 → 从证书颁z : M 3 h a 6 @ .发机构请求证书...”,做了这一步,就会在本地生成了一对公私钥,导出的 CSR 文件( CeO ( & T ` X H K ortificateSigningReques{ O ) 3t.certSigningRequest )就是 Mac 公钥,F } W u u +Mac 私钥也是存储在本地,具体是{ P K W u C什么文件看第 3 步。

    第 2 步:每台 iOS 设备中都已经有了 Apple 公钥,至于 Apple 私钥是什么,看第 3 步。

    第 3 步:在 Apple 后台的 iOS Certificatt A S J X H o kes 模块,通过上传本地导出的 CSR 文件,生成 .ce] B z ir 证D 8 v B K S 2书文件,也就是 AppleY G q w j w 私钥。将 .cer 证书下载到本地,安装证书,在钥匙串中找到证书,就可以导出 Mac 私钥,也就是一个 .p12 文z 5 / P u : 2 d }件。它和第 1 步中导出的 Mac 公钥是对应的,钥匙串会把这两个证书关联 V m = I ; H ?起来。用 .cer 证书去签名 CSR 文件,拿到含有签名的证书。

    第 4 步:在 Apple 后台配置 App ID、Entitlements、Devices 等k J [ / t : J,然后下载O v j PP 文件。

    第 5 步:编译 App 时,XCode 会通过第 3 步下载回来的证书(存着 M~ , | K g s ( Q |ac 公钥),在本地找到对应的 Mac 私钥,然后用 Mac 私钥去签名 App,同时打包,安装包中包含 PP 文件,在 ipa 中的文件名是 embedded.mobileprovision 。这里 App 的签名数据! R @ %被分为两部分,Mach-O 可执行文件会把签名直接写入描述文件里,而资源文件则会保存在 _CJ e i ? C = dodeSignature 目录下,这时准备安装 App。

    第 6 步:使用 Apple 公钥验证描述文件签名,对应第 48 , j 3 f ? 步,签名通过,说明证书可用,p F 1 C p k 1进入下一步。

    第 7 步:使用 Apple* 6 0 X p { 公钥验证证书签k w = 9 _ ~ f g名,对应第 3 步,签名通过,说明 Mac 公钥合法,进入下一步。

    第 8 步:使用 Mac 公钥验证 App 签名,对应第 4 步,上述验证均通过后,还需要将描述文件中的内容与 Ae / B 9 5 Q x 1 9pp 本身的信息做验证对比,比如验证设备 ID 是否在 UDID 列表上,App ID 是否相同,权限开关是否与 Entitlements 一致,都验证通过,就可以开始安装 App。

    前面说了,双层代码签名是针8 } l f Y n ? : T对开发测试包、In-House 企业签名、Ad-Hoc 包为例的签名和验证的流程,只是企业签名不限制安装的设备数,因此描述文件中不会有设备列表,而是一条 <key>PrZ 9 C ~ GovisionsAllDevices</key><true/> 记录。

    而从 App4 4 X Store 上下载的安装包,里面是没有描述文件的,但上架之前还是要配置证书、PP 文件,因为 Apv G 1 S g v # sp ID 和权限的检验还是需要做的。但S 2 L t P T z U 9 App 上传到 AppS) T a Utore 以后就跟 PP 文件没有关系了,所以我们可以理解为 App Store 上包的签名验证采用就是前面说的最简单的签名方式,App4 G l a `le 后台直接用私钥签名 App 就可以了。

    测试确保企业赣州请求措施内容技术方案