我想用两件事作为这个问题的开头,这样我就可以缩小我的实际问题的范围:
a)我以前做过软件开发,但从未为安卓做过
b)我熟悉pki、加密、散列、数字签名和blah blah blah
尽管如此,我还是很难追踪到更多关于android在何处以及如何验证应用程序创建者的信息。我听到了很多不同的信息,所以我正在尝试综合,以便更好地了解工作流。
我知道每个应用程序开发人员都有自己的私钥/公钥对,他们通过散列apk(如果我没有弄错的话,大多数时候都是sha-1)来签署他们的应用程序。你上传它,然后(我相信)公钥进入apk内部的META INF。我明白了。
我的问题是这与用户下载应用程序本身有什么关系。我知道电话检查,以确保应用程序是有效的签名,签名还包括有关作者等信息。但我也读到应用程序是自签名的,google play(或者他们现在称之为市场的任何东西)没有实现ca,也没有身份验证?但我的问题是,那么,是什么阻止人们以另一个开发人员的名义(除了众包)上传应用程序呢?
如果手机只检查有效的签名,这是否意味着只有当应用程序上传时才能进行身份验证?如果是这样的话,app market怎么检查呢?这是常用的-使用文件上的私钥并验证签名吗?或者开发商必须向市场提供他们的私钥才能进行认证?

最佳答案

简而言之,android和google play根本不关心实际证书中的内容。google play确实会验证它,并检查它是否在30年或更长时间内有效,但他们不会真正使用(至少目前,afaik)证书中的实际信息。您可以在cn中使用自己的名称/公司名称,但没有人会验证,用户根本看不到这些信息。安卓做的是:
检查签名以确保apk没有被篡改
然后将歌唱证书作为二进制blob与应用程序的当前安装版本进行比较,以确保这两个版本已使用相同的密钥/证书签名(例如,由同一个人/公司签名)
如果您对两个或多个应用程序使用shareduid或签名权限,则执行相同的操作来强制执行权限。
所以,要回答你的问题,有人可以很容易地创建一个上面有你名字的证书,但是android和google play并不真正在意。只要他们没有你的私钥,他们将无法生成与你相同的应用程序签名,因此他们将无法用他们的应用程序覆盖/更新你的应用程序,或获得任何特殊权限。

07-26 09:40
查看更多