首页 文章

Android APK,自签名

提问于
浏览
3

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

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

  • 然后,我计算了这些文件的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完成的,可以通过两种方式完成:

    • 如果您拥有该文件签名者的公钥,请使用此密钥检查签名;您忽略RSA文件中的公钥 . 在这种情况下,您确定该文件已被使用其私钥签名的人修改 .

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

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

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

    马丁

相关问题