来自安卓网站:
Android 要求所有应用在安装之前都使用证书进行数字签名。
签名确保只有原始开发人员可以发布其应用程序的更新。它并不能确保首先不会将伪造的应用程序交付给用户。开发人员无法监控谷歌是提供“真实”版本的 apk 还是伪造的。所以最终用户必须信任谷歌。为什么不完全依赖google,去掉签名呢?开发者通过他们的谷歌帐户向谷歌验证自己,因此每个应用程序都可以追溯到其开发者。并且可以通过 https 保护从 google 到 play store 应用程序的路径。
来自安卓网站:
Android 要求所有应用在安装之前都使用证书进行数字签名。
签名确保只有原始开发人员可以发布其应用程序的更新。它并不能确保首先不会将伪造的应用程序交付给用户。开发人员无法监控谷歌是提供“真实”版本的 apk 还是伪造的。所以最终用户必须信任谷歌。为什么不完全依赖google,去掉签名呢?开发者通过他们的谷歌帐户向谷歌验证自己,因此每个应用程序都可以追溯到其开发者。并且可以通过 https 保护从 google 到 play store 应用程序的路径。
实际上,代码签名只是一种验证应用是否来自应用商店的方法。它与应用程序的来源或应用程序设计者的意图没有直接关系。
引入恶意软件的问题主要是因为它没有被 Google 的过滤器捕获(有关身份验证过程的详细信息,请参见 wiki)。
此外,代码签名本身还不够,因为确实存在漏洞。
除了您所说的所有内容之外,代码签名还允许开发人员发布他们的应用程序的更新,而无需 [完全] 向谷歌“重新验证”自己。进行代码签名还意味着(理论上)您在上传恶意软件的情况下更容易进行物理追踪,因此代码签名就像某种取证指纹(我过度简化了问题/细节)。
底线是原始开发人员只能观察和报告对其应用程序的恶意解释(更不用说,许多“合法”应用程序都可以被利用)。
如果您确实“完全依赖谷歌”,那将改变法律义务,并且很可能会推高应用程序成本,因为谷歌现在必须大力审查每个应用程序以避免诉讼。
签署应用程序消除了对谷歌的依赖,而不是提供操作系统。用户可以安装一个 apk 并验证其签名,无论此 apk 是从 Google 下载还是复制到 SD 卡上。
下载 apk 后,无法直接跟踪其来源。事后不可能知道文件是从哪个 URL 下载的。只要公钥可以追溯到原始开发者,apk 中的签名就证明了文件的真实性。
原则上,签署 apk 确实可以保证假冒应用程序不会被安装。实际上,这种保证没有实际意义,因为签名者的身份不会以任何与相应私钥的所有权相关的方式提供给用户。尽管如此,开发人员可以通过将 apk 与他们上传的版本进行比较来验证下载应用程序的真实性,或者更简单地通过验证 apk 是否使用他们的公钥正确签名。
至于为什么必须对所有 apk 进行签名,这是实现简单性的问题:无需区分已签名和未签名的应用程序。Google 提供了一个调试密钥,其私有部分包含在 SDK 中,任何人都可以创建自己的密钥对;出于安全目的,由调试密钥或未知密钥签名的 apk 并不比未签名时更安全。
用户不需要依赖谷歌。他们还可以使用亚马逊市场,或者开发人员可以将 .apk 直接发送给用户。