于炳虎


摘要:Android7.0及以上版本開始使用一種新的簽名打包機制APK Signature Scheme V2,相比V1版本簽名,新的簽名機制具有更多優點,隨著Android系統版本的提升,V2簽名機制將逐漸廣泛使用。本文基于Android V2簽名機制,設計實現了一套安全有效的移動應用簽名系統,可實現APK的在線自動化簽名,為應用簽名領域提供了切實可行的實現方案。
關鍵詞:Android;V2簽名;移動應用;自動化
中圖分類號:TP309 文獻標識碼:A 文章編號:1007-9416(2019)02-0192-03
0 引言
數字簽名機制在Android應用開發中有著十分重要的作用,不做簽名的應用是無法在Android系統上安裝使用的,不管是真機還是模擬器,都必須經過數字簽名后才可以安裝。在開發調試階段,雖然開發者并沒有設置簽名證書等操作,但其實開發平臺已經自動給程序進行了簽名,使用的是Debug證書。開發完成準備上線發布的時候,使用的是開發者創建的包含開發者信息的證書。Android使用數字證書來標識應用程序的開發者或者擁有者,應用程序更新的時候,系統要求應用簽名必須一致,簽名不一致的應用無法安裝升級。如果開發的系統應用,使用到了一些系統權限,則需要保證應用簽名和系統簽名一致,否則無法安裝。可見,Android簽名機制是開發者在應用開發過程中必須面對的一個重要環節。Android在7.0版本系統之后發布了全新的應用簽名機制APK Signature Scheme V2,V2表示第2版本,V1是上一版簽名機制,相比于V1簽名機制,新的簽名機制V2版本具有更高的安全性和效率性,簡單說就是更安全,防止二次打包,驗簽安裝速度更快,用戶體驗更好。
本軟件系統目標是基于Android系統最新的V2簽名機制,實現一套在線自動化的自定義簽名系統,用戶使用此系統可實現對Android應用APK文件的在線自動化簽名,簽名后的應用可在目標終端上通過驗簽,安裝使用。系統提供了友好的用戶交互界面,操作簡單,功能豐富,運行穩定。
1 相關技術介紹
1.1 數字簽名
數字簽名技術主要應用在信息安全領域,使用范圍較廣,主要用于證明某個信息或者數據是本人發出的或本人認同的,從數字簽名的原理來看,它有三個特點,鑒權、完整性和不可抵賴性,其中不可抵賴性說明了消息的接收方可以通過數字簽名來防止后續的抵賴行為。公鑰加密算法是數字簽名技術的實現基礎和理論依據,在公鑰密碼體制中,用戶有一對公私密鑰對,公鑰公開,私鑰保密,用戶使用私鑰加密摘要信息,以生成數字簽名。由于私鑰的唯一保密性,保證了數字簽名的可靠性[1]。
1.2 簽名版本
Android V1簽名機制是7.0系統版本之前一直使用的方案,V1使用的是Jar Signature,來自JDK。7.0之后Android推出了全新的V2版本簽名機制,相比于V1版本,V2具有更快的驗簽和安裝過程,并且增強了完整性保證。在V1版本中,解壓縮打開簽名后的APK包,在解壓后的META-INF目錄下一般會有三個文件,即MANIFEST.MF,CERT.SF,CERT.RSA三個文件,這里用不同的證書和簽名方式得到的名字可能不同,以及對于多個證書的情況,就會對應有多個.MF,.SF,CERT.RSA文件。V1版本簽名的主要問題有兩個,一是在校驗的過程中需要解壓,二是APK包的完整性校驗不夠強。因此,Android推出了V2版本簽名,它的推出就是解決V1存在的兩個問題。V2簽名后,APK文件從原來的3塊劃分,變成了4塊劃分,新增加了一個塊,整體包括區塊1(Contents of ZIP entries)、區塊2(APK Signing Block)、區塊3(ZIP Central Directory)和區塊4(ZIP End of Central Directory),其中應用簽名方案的簽名信息會被保存在區塊2中, 而區塊1、區塊3和區塊4是受保護的,在簽名后任何對區塊1、3、4的修改都逃不過新的應用簽名方案的檢查。簡單來說,V2簽名模式在原先APK塊中增加了一個新的塊(簽名塊),新的塊存儲了簽名,摘要,簽名算法,證書鏈,額外屬性等信息,并且這個塊有特定的格式[2]。本文簽名服務是基于V2的簽名結構和組織形式實現的。
1.3 證書與算法
本軟件系統簽名證書支持X.509格式,證書的加密算法使用了國密SM2/SM3算法。X.509是一種通用的證書格式,由證書主體、證書簽名算法標識、簽名組成,和RSA證書主要不同的是SM2證書的簽名算法標識。SM2是國家密碼管理局于2010年12月17日發布的橢圓曲線公鑰密碼算法,在同等強度下相比RSA,SM2的密鑰更短,SM2證書配套的簽名算法是基于SM3的摘要算法[3]。
2 系統需求分析
為了實現系統的自動化,軟件在設計階段弱化了后臺管理的功能性,如果需要增加系統的管控能力,后臺管理可增加操作的審核,即應用簽名需首先提交審核,后臺管理員審核應用是否符合應用簽名條件,審核通過后管理員負責應用的簽名操作。審核機制可設計實現成可配置的管理項,這樣更加靈活適用。
本系統在設計之初引入了操作審核機制,考慮到系統的自動化要求,幫助用戶更加迅速的完成簽名操作,系統在實現階段將審核機制做成了可配置項。本系統功能模塊如圖1所示,詳細功能需求描述如下:
(1)門戶信息展示。門戶包含首頁等多個頁面,門戶首頁展示系統平臺提供的服務內容,還包括介紹安全領域的風險態勢與政策法規的多個信息展示頁。(2)應用管理。創建和管理應用,用戶可以創建應用,包括上傳應用,填寫應用基本信息。用戶可對所屬應用進行管理操作,包括刪除應用和查看詳情。(3)應用簽名。審核機制開啟后,用戶申請應用簽名,等待管理員審核,審核通過后完成應用簽名。關閉審核機制后,用戶申請應用簽名即可完成簽名操作。(4)簽名應用下載。下載簽名應用,簽名完成后,用戶可以下載已簽名的應用文件至本地。簽名后的應用文件名稱做了標識重命名。(5)用戶注冊。用戶進入系統平臺后,進入登錄注冊頁面,填寫用戶信息和組織信息,注冊賬戶。(6)用戶登錄與登出。用戶進入系統平臺后,進入登錄頁面,使用已注冊的賬戶登錄系統,在登錄狀態下可以注銷賬戶,退出系統。(7)后臺管理員登錄與登出。管理員使用已分配的賬戶可以登錄系統后臺,在登錄狀態下管理員可以注銷賬戶,退出系統。管理員賬戶可配置,不可申請注冊。(8)后臺用戶管理。管理員可以查看所有已注冊到平臺的用戶,可以根據用戶手機號和用戶名查詢具體的用戶,可以刪除管理列表中的用戶,可以啟用或停用某一用戶,停用后,此用戶無法登錄系統平臺,啟用后回復用戶正常功能。(9)后臺應用管理。管理員可以查看所有用戶創建的應用信息,主要包括應用基本信息和簽名狀態等,以列表形式展示,管理員可輸入應用名稱等查詢參數查詢應用,可以查看應用詳情、下載應用、進行應用簽名操作。審核機制開啟后,用戶申請應用簽名,管理員可以審核通過或駁回申請,審核通過后,管理員可以生成簽名應用,用戶可以下載簽名后應用。用戶未申請簽名的狀態下,管理員可以授權簽名,簽名后用戶無法下載,只有管理員有權下載。授權簽名操作主要面對一些特殊情況。(10)系統平臺配置。配置前端用戶的注冊、登錄、應用上傳、審核至等功能項。主要對各功能性的開啟關閉做配置,開啟狀態功能可以正常使用,關閉狀態當前功能不可使用。以此做到管理員對系統平臺的可管可控。
3 系統架構設計
移動應用簽名系統基于前后端分離架構設計開發,前后端分離原則,簡單來講就是前端和后端的代碼分離,也是技術上做分離,并且直接采用物理分離的方式部署,進一步促使進行更徹底的分離。前后端交互界面更加清晰,后端的接口簡潔明了,更容易維護。前端Web服務,后端簽名服務。服務的拆分提高了系統的松耦合,每個服務只負責單一業務邏輯的職能,在實現的過程中較為獨立,服務之間的接口調用基于HTTP協議,采用Restful風格,數據格式JSON。系統架構圖如圖2所示。
4 系統實現
系統采用前后端服務分離架構,前端Web服務,后端簽名服務,獨立開發部署,物理分離。服務的拆分提高了系統的松耦合,每個服務只負責單一業務邏輯的職能,在實現的過程中較為獨立,服務之間的接口調用基于HTTP協議,采用Restful風格。
4.1 前端Web服務
Web服務中,使用當前流行的VueJS前端框架,此框架采用MVVM模式設計,數據驅動和組件化開發是VueJS框架的核心思想。UI框架選用了基于VueJS的ElementUI框架,它是基于VueJS的桌面端UI框架,借用了Bootstrap框架的思想,使用了柵格布局,因此對移動端有一定的適配性。后臺提供了部分數據的統計分析功能,因此引入了圖表組件Vue-Echarts,這個組件庫兼容IE6+、完美支持移動端、圖表類型豐富,它是方便快捷的HTML5交互性圖表庫。Web服務器使用Nginx,使用反向代理實現前后端分離的架構。
4.2 后端應用服務
后端應用服務的實現基于Spring Boot框架,在用戶權限管理的實現中,使用了Spring Security組件,它是一套Web應用安全性的完整解決方案,對一些非法訪問做到了合理控制,數據緩存的處理方式中,采用了Spring Cache和Redis組合,Spring Boot與Redis做到了無縫對接,完美支持。由于簽名邏輯是一個耗時任務,因此使用異步耗時任務機制以及定時任務機制,HTTP通信機制中采用了Spring整合的RestTemplate組件,這個組件是Spring提供的用于訪問Rest服務的客戶端,提供了多種便捷訪問遠程Http服務的方法,能夠大大提高客戶端的編寫效率。對前后端數據接口調用,實現了跨域請求,做到了跨域的全局配置。
4.3 后端簽名服務
簽名服務獨立部署在簽名服務器中,并配置密鑰管理服務。應用簽名是本系統平臺的主要業務功能,因此簽名服務必須考慮并發、響應和容錯等能力。簽名證書支持X.509格式,證書采用國密SM2/SM3算法。簽名實現使用的是Zipalign、Apksigner方案,基于V2簽名結構與區塊組成,兩步完成對APK包的V2自定義簽名,生成的簽名信息以追加的方式插入到原簽名信息后,生成的簽名文件可指定存儲路徑。此過程可以實現寫入渠道號等部分信息,因為簽名塊本身是沒有加密的,因此補充信息可寫入到這個塊區,系統驗簽通過[3]。
4.4 日志與異常
系統日志模塊的實現使用了Spring框架默認的日志組件,記錄了系統運行中的邏輯錯誤、非法請求、異常操作等信息。日志級別定義了四級,即錯誤、異常、警告和信息。錯誤和異常日志在本系統實現中使用文件系統存儲,用于用戶系統運營維護階段的排查,異常日志和錯誤日志會詳細記錄事件發生的上下文狀態信息,警告和信息日志可根據管理需求定義范圍。
5 結語
本文主要介紹了基于Android V2簽名機制的移動應用自定義簽名系統的設計與實現,所設計的移動應用簽名系統可以實現應用的在線自動化簽名與下載操作。系統采用了成熟的開發模式和架構風格,系統功能性集中,可滿足用戶的多項需求。為應用簽名領域提供了切實可行的實現方案。
參考文獻
[1] 謝佳筠,伏曉,駱斌.Android防護技術研究進展[J].計算機工程,2018(2):163-170.
[2] 牛豪飛.Android應用保護方案的設計與實現[D].北京郵電大學,2018.
[3] 丁竹青,張維君.基于對Android安全體系的分析[J].信息通信,2016(9):159-160.
Design and Implementation of Application Signature System
Based on Android V2 Signature Mechanism
YU Bing-hu
(First Research Institute of the Ministry of Public Security,Beijing 100048)
Abstract:Android version 7.0 and above began to use a new signature packaging mechanism APK Signature Scheme V2, compared with V1 version signature, the new signature mechanism has more advantages, with the upgrade of Android system version, V2 signature mechanism will gradually be widely used. Based on Android V2 signature mechanism, this paper designs and implements a secure and effective mobile application signature system, which can realize APK's online automatic signature, and provides a feasible implementation scheme for the field of application signature.
Key words:Android; V2 signature; mobile application;automation