Android 签名目前包括三个版本v1、v2、v3,本文将简短地阐述v1版本的原理与缺陷
首先
阅读本文前需要理解什么是摘要、非对称加密、数字签名
原理
根据官方文档的介绍, v1版本的签名实际上就是采用的Java Jar文件的签名机制
在apk包的META-INF文件夹下包含签名三个重要的文件:
- MANIFEST.MF
包含了对apk中各种文件的摘要信息 - CERT.SF
包含了对MANIFEST.MF 的摘要以及MANIFEST.MF 文件中每一条摘要的摘要。 - CERT.RSA
包含了签名的公钥以及对 CERT.SF的数字签名。
缺陷
- jar文件的签名验证机制并不能保证每一个文件都被验证,如果x-Digest-Manifest不匹配,并不会立即验证失败,而是进入一个更低效的验证过程:验证CERT.SF 文件中每一条摘要,即如果文件是在签名后加入到包中或者在签名的时候使用其他手段不对一些文件进行签名,这些文件的验证将会被绕过。
- 在安装app过程中,如果app中的资源文件很多零散的小文件,则每个文件都要进行验证,过程会更慢