如果您是开发人员,或者以某种方式熟悉反编译,修改和/或安装修改后的APK文件,则可能熟悉应用程序签名。简而言之,Android要求必须使用相同的密钥对应用程序 进行签名,以便系统允许更新相关应用程序。Android通过检查APK签名来验证这一点。

APK签名是Android中非常基本的安全措施,我们之前已经讨论过。基本上,所有签名对于某个开发人员或开发人员组都是唯一的,因此,如果APK中的签名/证书无效或与原始应用程序的签名不匹配,则安装将失败,从而防止安装被篡改或在您的Android设备上伪造APK文件。签名密钥还必须由开发人员安全保存,因为它们对于验证并最终推出应用程序更新至关重要。幸运的是,用于签名APK的签名方案正在得到另一个修订版本v3,该版本似乎在保持高安全性标准的同时增加了便捷功能。

APK签名方案v1和v2

自为开发人员发布当前的APK签名方案版本v2以来,还没有太久。毕竟,它在2016年底推出Android 7.0 Nougat 时几乎没有介绍给我们。强烈建议在Android 7.0+应用程序中使用v2签名方案,因为它带来了一系列重要的补丁程序和安全性改进:仅签名JAR,v2采取了其他步骤来保护整个文件的完整性。不过,签名方案并不向后兼容,Android Marshmallow及更低版本的Android要求v1签名才能用于应用程序。

除非您专门针对牛轧糖或更高版本的用户,否则理想的情况是并排使用两种签名方案,首先使用v1进行签名,然后使用v2进行签名。这样,牛轧糖及更高版本将识别v2签名,而棉花糖及更低版本将识别v1签名。

但是,由于一系列漏洞和其他安全问题,强烈建议不要使用v1,其中最值得注意的是 Janus漏洞,该漏洞使攻击者可以直接攻击和修改APK而不会影响签名。像Instagram或Snapchat这样不经常更新的流行应用仅使用v1签名进行签名,这意味着它们很容易受到这些问题的攻击。

APK签名方案v3

v3的最大标题功能(是v2的修订版)将是关键轮换支持。在V3签名方案引入了APK签名者天堂,其中,根据对提交的一个,“包含每个祖先证明其后代的有效性签名证书的历史。每个其他后代代表一个新的身份,可用于对APK进行签名。通过这种方式,沿袭包含旋转证明,通过该旋转证明,包含该APK的APK可以向其他方证明其被其当前签名证书信任的能力,就好像它是由其较旧的签名证书中的一个签名一样。”

对于开发人员而言,密钥轮换在很多方面都具有很大的功能。对于初学者来说,这对于致力于单个应用程序的团队中的开发人员很有用,因此开发人员不必与团队共享其签名密钥。由于应用程序需要相同的确切签名进行更新,因此当前所有应用程序都需要由使用相同密钥的同一位开发人员或一组开发人员进行编译,从而降低了安全性(密钥被盗的可能性更高)并减慢了开发速度。

此外,在开发人员的签名密钥被盗/丢失的情况下,这也很有用,这通常意味着必须以不同的软件包名称将应用程序重新上载到Play商店。这根本不是什么不常见的情况,因为很久以前,即使Google显然也丢失了Google Authenticator应用程序的签名密钥,导致他们以不同的软件包名称重新发布了该密钥。从那时起,Google就提供了使用Google Play App Signing将签名密钥安全地存储在云中的方法,但是如果发生假想的情况,密钥轮换将使您能够继续更新您的应用程序。

什么时候推出?

虽然您可能会急切想要尝试增加便利性,但是发现v3签名方案在AOSP Gerrit代码审查站点周围浮动,并且提交本身目前尚未合并到主分支中,因此尚未准备就绪。刚刚呢 如果先前的带有Android Nougat的 v2版本可以告诉我们任何信息,那么我们应该期望v3签名方案将随即将发布的Android P出现在开发人员的手中。

我们还应注意,键旋转很可能不是v2的唯一区别。APK签名方案v3仍在开发中,因此我们将在将来发布v3签名方案的完整文档时看到其实际改进。