我想用两件事作为这个问题的序言,这样我就可以缩小我的实际问题范围:
a) 我以前做过软件开发,但从未针对 Android
b) 我熟悉 PKI、加密、散列和数字签名等等等等
话虽这么说,我无法找到有关 Android 在何处以及如何验证应用程序创建者的更多信息。我听过很多不同的信息,因此我正在尝试综合以更好地了解工作流程。
我知道每个应用程序开发人员都有自己的私钥/公钥对,他们通过对 APK 进行哈希处理(如果我没记错的话,大多数时候使用 SHA-1)来签署他们的应用程序,就这样。您上传它,(我相信)公钥会进入 APK 内的 META INF 中。我就明白这么多了。
我的问题是这与用户下载应用程序本身有何关系。我知道手机会检查以确保应用程序已有效签名,并且签名还包含有关作者等的信息。但我也读到,应用程序是自签名的,Google Play(或者他们现在所说的市场)没有实现 CA,并且没有身份验证?但我的问题是,什么可以阻止人们以另一个开发者的名义上传应用程序(除了众包)?
如果手机仅检查有效签名是否意味着唯一的身份验证方法是在上传应用程序时完成的?如果是这种情况,应用市场如何检查?是不是像往常一样——使用存档的私钥并验证签名?或者开发者是否必须向市场提供他们的私钥来进行身份验证?
简而言之,Android 和 Google Play 本质上并不关心实际证书中的内容。 Google Play 确实会验证它,并检查它是否在 30 年或更长时间内有效,但他们并没有真正使用(至少目前,据我所知)证书中的实际信息。您可以在 CN 中使用您自己的名称/公司名称,但没有人会验证这一点,并且用户根本不会看到此信息。 Android 所做的是:
- 检查签名以确保 APK 未被篡改
- 然后对比歌唱证书作为二进制 blob应用程序当前安装的版本之一,以确保这两个版本已使用相同的密钥/证书进行签名(例如,由同一个人/公司)
- 如果您在两个或多个应用程序中使用共享 Uid 或签名权限,它会执行相同的操作来强制执行权限。
因此,为了回答你的问题,有人可以轻松创建一个带有你名字的证书,但 Android 和 Google Play 并不关心。只要他们没有您的私钥,他们就无法生成与您的私钥相同的应用程序签名,因此他们无法用他们的私钥覆盖/更新您的应用程序,或获得任何特殊权限。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)