Android APK,自签名

时间:2011-08-26 22:45:02

标签: android

我正在研究与Android设备上的软件组件(具体来说,apk文件)的证明相关的概念证明。为此我做了以下事情:

  1. 我以编程方式检索了安装在Android平板电脑上的应用程序(例如maps.apk)的META / CERT.SF中存储的摘要,属于AndroidManifest.xml,resources.arsc和classes.dex。

  2. 然后,我计算了这些文件的SHA-1摘要,之后在这些摘要上做了base64。我能够将这些与第1步中的匹配。

  3. 我的问题是,存储在META-INF / CERT.RSA中的公钥的作用在哪里?是不是存储在META-INF / CERT.SF中的摘要应该由与META-INF / CERT.RSA中的公钥对应的私钥签名?

1 个答案:

答案 0 :(得分: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文件中签名密钥/名称的个人/组织,并且您拥有该组织的公钥,则至少知道该文件中的名称/地址是上次修改该文件的人。

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

    签名不用于检查文件是否未更改。这可以通过散列manifest.mf来完成。拥有私钥的人可以以任何方式修改软件!

    马丁