Android v1 簽名 和 v2+ 簽名

醉過才知酒濃發表於2018-11-29

1.v1簽名

v1簽名是基於JAR簽名來實現的 簽名的JAR

v1簽名不保護APK的某些部分,例如ZIP後設資料。 在APK驗證程式在驗證時需要處理大量不可信(尚未經過驗證)的資料結構,然後會捨棄不受簽名保護的資料。這會是APK容易受到攻擊或惡意修改。 此外,APK驗證程式在驗證時必須解壓所有已壓縮的條目,來進行驗證,而這需要花費更多的時間和記憶體。 所以為了解決這些問題,才有了v2簽名。

2.v2簽名 v2簽名是在Android 7.0 (Nougat) 中加入的APK簽名方案,v2簽名方案是一種基於全檔案簽名方案,該方案能夠發現所有對APK的受保護部分進行的更改,從而可以更加快速的驗證並增強完整性保證。 使用v2簽名方案進行簽名時,會在APK檔案中插入一個APK簽名分塊,該分塊位於 "Central Directory”部分之前,在“APK簽名分塊”內,v2簽名和簽名者身份資訊會儲存在 v2分塊中。 如下圖所示:

Android v1 簽名 和 v2+ 簽名
簽名前和簽名後的 APK

因為v2簽名是Android 7.0 (Nougat)的時候加入的APK簽名方案 所以v2簽名在Android 7.0以下的系統上是不支援的,所以為了支援Android 7.0以下的版本需要使用v1簽名,然後再使用v2方案對其進行簽名。

這是在Android 7.0以上 APK簽名驗證過程:

Android v1 簽名 和 v2+ 簽名

3.v3簽名 v3簽名是在Android 9.0中加入的APK簽名方案 ,該方案主要是在原來v2的基礎上增加了APK金鑰輪轉,這是應用能夠在APK更新過程中更改其簽名金鑰,為了實現輪轉,APK必須指示新舊簽名金鑰之間的信任級別。v3簽名方案還在APK簽名分塊中新增了有關受支援的SDK版本和proof-of-rotation結構資訊。

因為v3簽名方案是在Android 9.0 新增的 所以在Android 8.0(API級別27)或更低版本的裝置不支援更改簽名證照。 這是在Android9.0以上APK簽名驗證過程

Android v1 簽名 和 v2+ 簽名

個人感覺這個v3簽名方案主要是用來無感替換籤名證照的。

更多資訊請到官網檢視:source.android.com/security/ap…

相關文章