IOS和Android代码签名

IOS和Android代码签名

承接上文

为了能让多个业务PC开发共用一个USBkey达到降本的目的,在https://bolt.new/交互式编程做了一个demo,在PVE部署起来测试还可以(USB使用host模式),如下所示:

了解了PC软件数字签名,对Android和IOS代码签名之前不了解,顺便也查找一下资料,做一下简单的记录。

数字签名和数字证书

数字签名是非对称加密与数字摘要的组合应用,校验用户身份和数据的完整性,但是有时候黑客获取了用户的私钥就可以伪装成这个用户。

数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,由权威机构CA 机构,又称为证书授权(Certificate Authority)中心发行的,CA内置在系统和浏览器中,可以防止用户身份被黑客伪造。

iOS代码签名

https://support.apple.com/zh-cn/guide/security/sec7c917bf14/web

在 iOS 和 iPadOS 中,Apple 会通过强制性代码签名和严格的开发者签名等方式确保 App 安全性。有三种签名类型,免费个人、付费开发者、企业证书。

讲解签名原理比较好的文章:

图解iOS签名背后的原理

iOS App 签名的原理

  1. 在你的 Mac 开发机器生成一对公私钥,这里称为公钥L,私钥L。L:Local
  2. 苹果自己有固定的一对公私钥,跟上面 AppStore 例子一样,私钥在苹果后台,公钥在每个 iOS 设备上。这里称为公钥A,私钥A。A:Apple
  3. 把公钥 L 传到苹果后台,用苹果后台里的私钥 A 去签名公钥 L。得到一份数据包含了公钥 L 以及其签名,把这份数据称为证书。
  4. 在苹果后台申请 AppID,配置好设备 ID 列表和 APP 可使用的权限,再加上第③步的证书,组成的数据用私钥 A 签名,把数据和签名一起组成一个 Provisioning Profile 文件,下载到本地 Mac 开发机。
  5. 在开发时,编译完一个 APP 后,用本地的私钥 L 对这个 APP 进行签名,同时把第④步得到的 Provisioning Profile 文件打包进 APP 里,文件名为 embedded.mobileprovision,把 APP 安装到手机上。
  6. 在安装时,iOS 系统取得证书,通过系统内置的公钥 A,去验证 embedded.mobileprovision 的数字签名是否正确,里面的证书签名也会再验一遍。
  7. 确保了 embedded.mobileprovision 里的数据都是苹果授权以后,就可以取出里面的数据,做各种验证,包括用公钥 L 验证APP签名,验证设备 ID 是否在 ID 列表上,AppID 是否对应得上,权限开关是否跟 APP 里的 Entitlements 对应等。

Android代码签名

Android要求所有已安装的应用程序都使用数字证书做数字签名,数字证书的私钥由开发者持有。Android拒绝安装没有签名的APK,但Android并不会校验APK证书的有效性,即只要签名正确,不管证书是不是合法的,Android都会安装。这点上和IOS区别很大。

讲解签名比较好的文章:Android数字签名机制和应用场景

【Android签名机制详解】二:Android V1、V2、V3、V4签名方案 中说到
Android的数字证书和传统数字证书有很大的不同,它是根证书,也就是自认证的证书,颁发者和使用人是同一个,也就是说我们自己即是CA机构,又是证书使用者。所以,Android系统在安装APK的过程中并不会校验证书的合法性,只是从中提取公钥和算法。Google这样做的目的是为了降低开发成本,吸引更多的人来开发Android应用,巩固Android生态圈。毕竟正儿八经的证书申请是要花钱的。
但是,这也就会导致一个很严重的问题,就是Android证书没有权威性,任何人都可以制作。攻击者可以篡改APK里的内容,替换掉原来的签名和证书,重新生成一份自己的签名和证书(所谓的重签名),再二次发行,谋取利益。那怎么办呢?
其实应用安全是每个Android开发者都应该关心的。大公司会有专门的部门对APP的进行安全加固,小公司或个人也可以购买第三方的加固服务。
我们也可以在APK里面添加校验签名的逻辑,一旦校验失败就停止运行,像支付宝就有这种防止重签名的机制,但道高一尺魔高一丈,Android加固和Android逆向了解一下。

官方文档APK 签名方案,Android 支持以下三种应用签名方案:

写在最后

平时APP的开发接触很少,简单了解了一下IOS和Android代码签名,补充整个知识链。

留下回复

error: Content is protected !!