安卓APK,自签名

3
我正在进行一个有关在android设备上证明软件组件(具体来说是apk文件)的概念验证。为此我完成了以下工作:
  1. 我通过编程的方式检索了安装在我的android平板电脑上(如maps.apk)的应用程序中存储在META/CERT.SF中的摘要,这些摘要属于AndroidManifest.xml, resources.arsc和classes.dex。
  2. 然后,我计算了这些文件的SHA-1摘要,并对这些摘要进行了base64处理。我能够将这些与步骤1中的结果匹配。
我的问题是,公钥在META-INF/CERT.RSA中的作用是什么?在META-INF/CERT.SF中存储的摘要不应该由对应于META-INF/CERT.RSA中公钥的私钥签名吗?
1个回答

1

真正的问题是:CERT.SF的作用是什么?

CERT.SF文件不包含已签名的数据,而只是从MANIFEST.MF构建而成。这意味着它不包含任何无法从MANIFEST.MF中提取的信息。

CERT.RSA或CERT.DSA(取决于所使用的算法)文件包含CERT.SF的实际签名。要从CERT.SF构建CERT.RSA,需要私钥...

--编辑--

抱歉,第一次阅读您的问题时我理解有误。

检查归档完整性的第一步是确保CERT.SF中的哈希值正确。下一步是检查CERT.SF本身是否已被修改。

这可以使用CERT.RSA完成,并且可以通过两种方式完成:

  1. 如果你拥有签名文件的签名者的公钥,那么你可以使用该公钥来检查签名;忽略RSA文件中的公钥。在这种情况下,你可以确定该文件已经被用私钥签名的人修改过。

  2. RSA文件始终包含公钥和该密钥所有者的名称/地址。使用相同或另一个私钥对此信息进行签名。如果可以信任在RSA文件中签名密钥/名称的个人/组织,并且您拥有该组织的公钥,则至少知道文件中的名称/地址是最后修改文件的人。

对于“自签名证书”(没有可信的公钥),无法检查文件...

签名不用于检查文件是否未更改。只需通过哈希manifest.mf即可完成此操作。拥有私钥的人可以以任何方式修改软件!

Martin


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接