Android 簽名目前包括三個(gè)版本v1、v2、v3,本文將簡短地闡述v1版本的原理與缺陷
首先
閱讀本文前需要理解什么是摘要、非對(duì)稱加密、數(shù)字簽名
原理
根據(jù)官方文檔的介紹, v1版本的簽名實(shí)際上就是采用的Java Jar文件的簽名機(jī)制
在apk包的META-INF文件夾下包含簽名三個(gè)重要的文件:
- MANIFEST.MF
包含了對(duì)apk中各種文件的摘要信息 - CERT.SF
包含了對(duì)MANIFEST.MF 的摘要以及MANIFEST.MF 文件中每一條摘要的摘要。 - CERT.RSA
包含了簽名的公鑰以及對(duì) CERT.SF的數(shù)字簽名。
缺陷
- jar文件的簽名驗(yàn)證機(jī)制并不能保證每一個(gè)文件都被驗(yàn)證,如果x-Digest-Manifest不匹配,并不會(huì)立即驗(yàn)證失敗,而是進(jìn)入一個(gè)更低效的驗(yàn)證過程:驗(yàn)證CERT.SF 文件中每一條摘要,即如果文件是在簽名后加入到包中或者在簽名的時(shí)候使用其他手段不對(duì)一些文件進(jìn)行簽名,這些文件的驗(yàn)證將會(huì)被繞過。
- 在安裝app過程中,如果app中的資源文件很多零散的小文件,則每個(gè)文件都要進(jìn)行驗(yàn)證,過程會(huì)更慢