Android 簽名方案

為什么要簽名:
通過代碼簽名,開發(fā)者可以標識應(yīng)用創(chuàng)作者并更新其應(yīng)用,而無需創(chuàng)建復(fù)雜的接口和權(quán)限。當(dāng)應(yīng)用(APK 文件)安裝到 Android 設(shè)備上時,軟件包管理器會驗證 APK 是否已經(jīng)過適當(dāng)簽名,如果該證書(或更準確地說,證書中的公鑰)與為設(shè)備上的任何其他 APK 簽名時使用的密鑰一致,那么這個新 APK 可以選擇在清單中指定它將與其他以類似方式簽名的 APK 共用一個 UID。在 Android 上,應(yīng)用簽名是將應(yīng)用放入其應(yīng)用沙盒的第一步。已簽名的應(yīng)用證書定義了哪個用戶 ID 與哪個應(yīng)用相關(guān)聯(lián);不同的應(yīng)用要以不同的用戶 ID 運行。應(yīng)用簽名可確保一個應(yīng)用無法訪問任何其他應(yīng)用,通過明確定義的 IPC 進行訪問時除外。

Android 平臺提供了一個可擴展的 DRM 框架,以便應(yīng)用根據(jù)與受版權(quán)保護的內(nèi)容相關(guān)的許可限制條件來管理這些內(nèi)容。DRM 框架支持多種 DRM 方案;設(shè)備具體支持哪些 DRM 方案由設(shè)備制造商決定。

  • DRM Framework API:通過 Android 應(yīng)用框架提供給應(yīng)用,并通過適用于標準應(yīng)用的 Dalvik VM 運行。

  • 原生代碼 DRM 管理器:用于實現(xiàn) DRM 框架,并為 DRM 插件(代理)提供接口,以便處理各種 DRM 方案的版權(quán)管理和解密操作。

數(shù)字版權(quán)管理

Android 現(xiàn)在已經(jīng)支持三種應(yīng)用簽名方案:

v1 方案:基于 JAR 簽名。
v2 方案:APK 簽名方案 v2,在 Android 7.0 引入。
v3 方案:APK 簽名方案v3,在 Android 9.0 引入。
v4 方案:APK 簽名方案v4,在Android11.0引入。

v1 → v2 是顛覆性的,為了解決 JAR 簽名方案的安全性問題,對開發(fā)者影響最大的,就是渠道簽署的問題。在當(dāng)下這個大環(huán)境下,我們想讓不同渠道、市場的安裝包有所區(qū)別,攜帶渠道的唯一標識,這就是我們俗稱的渠道包。好在各大廠都開源了自己的簽渠道方案,例如:Walle(美團)、VasDolly(騰訊)都是非常優(yōu)秀的方案。

v2 → v3 方案,其實結(jié)構(gòu)上并沒有太大的調(diào)整,可以理解為 v2 簽名方案的升級版,有一些資料也把它稱之為 v2+ 方案。因為這種簽名方案的升級,就是向下兼容的,所以只要使用得當(dāng),這個過程對開發(fā)者是透明的。

V1的簽名過程
V1的簽名的校驗過程

APK 簽名方案 v2 :
是一種全文件簽名方案,該方案能夠發(fā)現(xiàn)對 APK 的受保護部分進行的所有更改,從而有助于加快驗證速度并增強完整性保證
使用 APK 簽名方案 v2 進行簽名時,會在 APK 文件中插入一個 APK 簽名分塊,該分塊位于“ZIP 中央目錄”部分之前并緊鄰該部分。在“APK 簽名分塊”內(nèi),v2 簽名和簽名者身份信息會存儲在 APK 簽名方案 v2 分塊中。

image.png

APK 簽名方案 v2 是在 Android 7.0 (Nougat) 中引入的。為了使 APK 可在 Android 6.0 (Marshmallow) 及更低版本的設(shè)備上安裝,應(yīng)先使用 JAR 簽名功能對 APK 進行簽名,然后再使用 v2 方案對其進行簽名。

APK 簽名驗證過程(新步驟以紅色顯示)

APK 簽名方案 v3:
Android 9 支持 APK 密鑰輪替,這使應(yīng)用能夠在 APK 更新過程中更改其簽名密鑰。為了實現(xiàn)輪替,APK 必須指示新舊簽名密鑰之間的信任級別。為了支持密鑰輪替,我們將 APK 簽名方案從 v2 更新為 v3,以允許使用新舊密鑰。v3 在 APK 簽名分塊中添加了有關(guān)受支持的 SDK 版本和 proof-of-rotation 結(jié)構(gòu)的信息。
v3 方案的設(shè)計與 v2 方案非常相似,它們采用相同的常規(guī)格式,并支持相同的簽名算法 ID、密鑰大小和 EC 曲線。

但是,v3 方案增添了有關(guān)受支持的 SDK 版本和 proof-of-rotation 結(jié)構(gòu)的信息。

V3 APK 簽名驗證過程

APK 簽名方案 v4:
Android 11 通過 APK 簽名方案 v4 支持與流式傳輸兼容的簽名方案。v4 簽名基于根據(jù) APK 的所有字節(jié)計算得出的 Merkle 哈希樹。它完全遵循 fs-verity 哈希樹的結(jié)構(gòu)(例如,對鹽進行零填充,以及對最后一個分塊進行零填充。)Android 11 將簽名存儲在單獨的 <apk name>.apk.idsig 文件中。v4 簽名需要 v2v3 簽名作為補充。
運行 adb install --incremental 命令時,adb 會要求 .apk.idsig 文件存在于 .apk 旁邊,默認情況下,它還會使用 .idsig 文件嘗試進行增量安裝;如果此文件缺失或無效,該命令會回退到常規(guī)安裝。

APK 驗證流程 v4

推薦:https://zhuanlan.zhihu.com/p/108034286

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,695評論 2 370

推薦閱讀更多精彩內(nèi)容

  • 前言 在Android 7.0上引入了v2簽名機制,v2簽名是對整個apk基于二進制生成簽名,因此只要apk有任何...
    黃小明_4310閱讀 1,428評論 1 0
  • 證書過期了?!! 也不知到當(dāng)初是那條筋搭錯了,將證書的時間弄得這么短,在這里強烈的提醒一下各位,在生成證書的時候一...
    ErolC魚閱讀 2,819評論 0 6
  • 筆者是MIUI系統(tǒng)應(yīng)用組的開發(fā),之前發(fā)布APP時只有應(yīng)用商店這一個渠道,因此只需給應(yīng)用商店提供一個APK即可。不過...
    東方未曦閱讀 2,736評論 10 2
  • 提綱 初步了解:是什么,為什么需要,有什么好處,怎么加密和驗證,怎么使用,要點補充 簽名方案:v1,v2,v3簽名...
    wizard_zero閱讀 2,548評論 0 3
  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開了第一次的黨會,身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,587評論 0 11