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