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