首页 > 编程知识 正文

企业签名,签名怎么写

时间:2023-05-05 10:32:08 阅读:41534 作者:2598

通过签署Apk,开发人员可以证明Apk的所有权和控制权,并将其用于安装和更新APP应用程序。 Android设备上的安装Apk如果是未签名的Apk,将被拒绝安装。

安装Apk时,软件包管理器会验证Apk是否已正确签名,并验证其未被签名证书和数据摘要合法篡改。 只有在确认安全无篡改时,才允许安装在机器上。

简而言之,APK签名的主要作用有两个:

证明APK的所有者。 允许安卓市场和设备验证APK的正确性。

Android目前支持四种APP应用程序签名方案:

v1方案:基于JAR签名。 v2方案:引入安卓7.0的APK签名方案V2(v3方案)引入安卓9的APK签名方案V2(v3方案)引入安卓11的APK签名方案v4 ) )。

v1~v2是卓越的,为了解决JAR签名方式的安全问题,到了v3方式,实际上在结构上没有太大的调整,可以理解为v2签名方式的升级版,有些资料也将其称为v2方式。

JAR签名(v1方案) ) ) ) )。

V1签名机制主要位于META-INF目录下的三个文件: MANIFEST.MF、CERT.SF和CERT.RSA,他们都是V1签名的产物。

在 V1 签名方案中,并不会保护 APK 内的所有文件有几个例外部分,修改后签名不会无效。

例如ZIP元数据。 另外,在v1方案中,由于对APK内部的受保护的原始文件分别进行计算数据的汇总,所以在验证时需要解压缩后进行验证,安装时需要很多时间,消耗更多的内存。 例如,在v1方案中签名信道的方式是利用该特性,将信道信息写入元INF文件中,不破坏v1签名的方式。

为了解决这些问题,Android 7.0引入了APK签名方案v2。

缺点是不安全,速度慢

APK签名方案v2

v2签名是整个文件的签名方案,用于检测对APK受保护部分所做的所有更改,有助于缩短验证时间和增强完整性保证。

如果使用APK签名方案v2进行签名,则位于“ZIP中心目录”部分前面的APK签名块将插入到APK文档中。 在“APK签名块”中,v2签名和签名者标识信息存储在APK签名方案v2块中。

上图比较了签名前后的APK文件结构。 可以看到,v2签名的APK包括以下四个部分:

ZIP条目的内容APK

签名分块(APK Signing Block)ZIP 中央目录ZIP 中央目录结尾

在验证期间,v2+ 方案会将 APK 文件视为 blob,并对整个文件进行签名检查。对 APK 进行的任何修改(包括对 ZIP 元数据进行的修改)都会使 APK 签名作废。这种形式的 APK 验证不仅速度要快得多,而且能够发现更多种未经授权的修改。

新的签名格式向后兼容,因此,使用这种新格式签名的 APK 可在更低版本的 Android 设备上进行安装(会直接忽略添加到 APK 的额外数据),但前提是这些 APK 还带有 v1 签名。

从安全的角度 v2 会比 v1 更安全,v2 签名是验证整个打包后的 APK 文件,所以对其 APK 文件做「任何」改动都会破坏签名。注意这里的任何是带引号的,Vv 签名的签名块其实是一个 K-V 的结构,可以向其中插入一些简单的数据而不破坏 v2 签名,这就是 v2 方案下,多渠道的方案思路。

缺点 无法解决签名过期更换签名的问题

v3 签名

v2 方案解决了安全问题以及安装时验证的效率问题,但是它并没有解决换签名问题。

Android 9.0 中引入了新的签名方式,它的格式大体和 v2 类似,在 v2 插入的签名块(Apk Signature Block v2)中,又添加了一个新快(Attr块)。

在这个新块中,会记录我们之前的签名信息以及新的签名信息,以密钥转轮的方案,来做签名的替换和升级。这意味着,只要旧签名证书在手,我们就可以通过它在新的 APK 文件中,更改签名。

V3 签名新增的新块(attr)存储了所有的签名信息,由更小的 Level 块,以链表的形式存储。

其中每个节点都包含用于为之前版本的应用签名的签名证书,最旧的签名证书对应根节点,系统会让每个节点中的证书为列表中下一个证书签名,从而为每个新密钥提供证据来证明它应该像旧密钥一样可信。

这个过程有点类似 CA 证书的证明过程,已安装的 App 的旧签名,确保覆盖安装的 APK 的新签名正确,将信任传递下去。

V4 签名

在传统的应用安装方案中,开发者通过 ADB(Android Debug Bridge)以有线或无线的方式与终端用户连接,或者用户从软件商店直接下载,然而该方案需要用户等待完整的安装包传输结束后才能启动安装,在这期间产生了不良的用户体验。

增量安装技术是一种流式的安装方案:一旦安装包的核心文件传输完成便可启动应用。流式安装意味着允许优先传输核心数据以启动应用,并在后台流式传输剩余数据

在Android 11中,Google在内核中实现了增量文件系统用于对增量安装的支持。(详见https://source.android.com/devices/architecture/kernel/incfs)

这使得 Android os 可以通过 ADB 流式传输 APK。同时,Android 11 为了适应增量安装,添加了新的 v4签名方案。

此方案不改变前代签名方案而是创建一种新的签名:基于 APK 所有字节数据计算出 Merkle 哈希树,并将Merkle 树的老实的紫菜、盐值作为签名数据进行包完整性验证。新的签名数据保存在 .idsig 文件中并且在进行增量安装前必须为APK创建对应的 v4 签名文件。

官方文档:v4签名

总结

v1 签名实际上就是 JAR 签名的方案,它不会保护 APK 内的所有问题,存在安全和效率问题

v2 签名是一种全文件签名方案,增加了 APK 签名块(APK Signing Block),但仍无法解决更换签名的问题

v3 签名是 v2 的升级版,也被称为 v2+。在 V2 插入的签名块(Apk Signature Block V2)中,又添加了一个新快(Attr 块),它使用链表存储了所有的签名信息,验证时就像 CA 证书的证明过程。

v4 签名是为了 增量安装 技术而产生的一种新的签名方案。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。