對移動終端上的應(yīng)用進行身份驗證的方法及裝置制造方法
【專利摘要】本發(fā)明提出對移動終端上的應(yīng)用進行身份驗證的方法及裝置。方法包括:為剛開發(fā)出的apk文件生成非對稱密鑰對:非對稱公鑰和私鑰;從該apk文件中解析出應(yīng)用的聲明文件,根據(jù)所述私鑰對所述聲明文件進行加密,得到該apk文件的身份驗證文件,所述身份驗證文件和所述公鑰被編譯到該apk文件中;當(dāng)該apk文件被安裝到移動終端的安卓平臺上后,若發(fā)現(xiàn)該apk文件對應(yīng)應(yīng)用被打開,則從該apk文件中找到所述身份驗證文件和所述公鑰,根據(jù)所述公鑰對所述身份驗證文件進行解密,從該apk文件中解析出應(yīng)用的聲明文件,判斷解密結(jié)果是否與該聲明文件一致,若是,確認(rèn)該apk文件合法。本發(fā)明無需聯(lián)網(wǎng),就可對應(yīng)用內(nèi)容的合法性進行鑒定。
【專利說明】對移動終端上的應(yīng)用進行身份驗證的方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及智能終端【技術(shù)領(lǐng)域】,尤其涉及對移動終端上的應(yīng)用進行身份驗證的方法及裝置。
【背景技術(shù)】
[0002]只有使用證書進行數(shù)字簽名之后的應(yīng)用程序才能安裝到移動終端的Android (安卓)平臺上,Android操作系統(tǒng)的代碼簽名采用自簽名機制,其主要作用如下:
[0003]一、開發(fā)者身份溯源。簽名信息中包含開發(fā)的身份信息,可以追溯開發(fā)者的身份。
[0004]二、安裝時的驗證保護。Android平臺在安裝新應(yīng)用時,會解析新應(yīng)用的包名和簽名。如果移動終端上已裝有和新應(yīng)用相同包名的應(yīng)用,且兩者簽名不一致,則新應(yīng)用將無法在移動終端上安裝成功。
[0005]三、保證應(yīng)用信息的完整性。移動終端的Android平臺在安裝新應(yīng)用時,會校驗應(yīng)用信息的摘要和簽名信息中對應(yīng)的摘要是否一致,以確保應(yīng)用沒有被修改和篡改過。
[0006]應(yīng)用經(jīng)過數(shù)字簽名后,在其應(yīng)用apk (applicat1n package,安裝包)中會增加一個META-1NF的文件夾,其中包含MANIFEST.MF, CERT.SF, CERT.RSA等三個文件。在移動終端的Android平臺安裝新應(yīng)用時,其驗證過程如下:
[0007]步驟O1:計算CERT.SF文件的Hash值;
[0008]步驟02:用包含公鑰的證書驗證CERT.RSA文件,將得到的結(jié)果和步驟01得到的Hash值進行比較,如果相同,則表明CERT.SF文件是未被篡改的。
[0009]步驟03:由于CERT.SF文件包含了 apk包中的MANIFEST.MF文件的Hash值,而MANIFEST.MF文件包含了 apk包中其他文件的Hash值,因此從CERT.SF文件中可以得到其他文件的正確Hash值。
[0010]步驟04:計算apk包中的其他文件的Hash值,判斷計算得到的Hash值和MANIFEST.MF文件中列出的Hash值是否對應(yīng)一致,從而判斷apk包的完整性。
[0011]通過上述介紹,可以發(fā)現(xiàn)Android平臺現(xiàn)有的代碼簽名機制僅僅可以保證應(yīng)用的完整性和開發(fā)者身份的辨識,主要缺點如下:
[0012]一、用戶無法鑒別應(yīng)用內(nèi)容本身是否合法。比如,應(yīng)用是否留有后門程序、是否包含非法內(nèi)容等特征是無法通過現(xiàn)有機制得到保證的。
[0013]二、能力提供方無法鑒別應(yīng)用的合法身份。業(yè)務(wù)能力通常以jar包的形式提供給開發(fā)者,并最終集成到開發(fā)者的應(yīng)用apk中。在能力開放的過程中,能力提供方逐漸發(fā)現(xiàn):如果不對使用能力的具體應(yīng)用進行監(jiān)管,會出現(xiàn)很多嚴(yán)重的運營問題。比如,一個開發(fā)者開發(fā)一個惡意應(yīng)用,在其中無限循環(huán)Ping與服務(wù)器的接口,可能造成能力提供方服務(wù)器的接口擁塞。對于一些收費的能力而言,如果能力提供方不對應(yīng)用進行校驗,就無法確認(rèn)該應(yīng)用使用了哪些需要付費的能力,這還會造成能力提供方的經(jīng)濟損失。
[0014]造成這些問題的根本原因是因為Android現(xiàn)有簽名機制是自簽名的,不需要權(quán)威機構(gòu)簽名和審核,用戶或能力提供方需要完全依靠自身經(jīng)驗來判斷應(yīng)用的合法性。
[0015]目前有部分企業(yè)嘗試建立Android平臺上統(tǒng)一的CA(Certificate Authority,認(rèn)證授權(quán))機構(gòu)來解決上述問題,但同樣也會產(chǎn)生如下缺點:
[0016]一、可以覆蓋的應(yīng)用存在局限性。Android平臺由Google公司完全掌控,出于開放性的承諾,Android平臺是完全開源開放的?,F(xiàn)階段各個終端廠家、應(yīng)用商城提供方、應(yīng)用開發(fā)方都有自己的簽名證書,第三方機構(gòu)很難要求全產(chǎn)業(yè)鏈來使用同一的證書,也缺乏推行這種統(tǒng)一證書的制約手段。
[0017]二、與市場上的存量應(yīng)用不兼容。比如,存量市場上的應(yīng)用A使用的是X證書,如果應(yīng)用A的升級版使用統(tǒng)一 CA機構(gòu)的Y證書,則該升級版本將無法替換終端上已安裝的應(yīng)用A。
[0018]另外,市場上還有一部分企業(yè),采用聯(lián)網(wǎng)檢查簽名的機制來解決合法性驗證的問題。比如,能力提供方要求開發(fā)者將自身的簽名文件和應(yīng)用包名上傳至自己的服務(wù)器。在應(yīng)用每次使用能力前,均需將文件簽名和應(yīng)用包上傳至服務(wù)器進行校驗。這種方法的實質(zhì)是用簽名備份來約束開發(fā)者,如果發(fā)現(xiàn)應(yīng)用是惡意的,則通過備份的簽名追溯到開發(fā)者。
[0019]但該方法依賴于每次使用能力前的聯(lián)網(wǎng)校驗,增加了普通用戶的等待時間。同時,如果用戶身份網(wǎng)絡(luò)狀況不好的地區(qū),還會因聯(lián)網(wǎng)失敗而無法繼續(xù)使用應(yīng)用,造成很不好的用戶體驗。
【發(fā)明內(nèi)容】
[0020]本發(fā)明提供對移動終端上的應(yīng)用進行身份驗證的方法、系統(tǒng)及裝置,以實現(xiàn)無需聯(lián)網(wǎng),就可對應(yīng)用內(nèi)容的合法性進行鑒定。
[0021]本發(fā)明的技術(shù)方案是這樣實現(xiàn)的:
[0022]一種對移動終端上的應(yīng)用進行身份驗證的方法,該方法包括:
[0023]為剛開發(fā)出的應(yīng)用安裝包apk文件生成非對稱密鑰對:非對稱公鑰和私鑰;從該apk文件中解析出應(yīng)用的聲明文件,根據(jù)所述私鑰對所述聲明文件進行加密,得到該apk文件的身份驗證文件,所述身份驗證文件和所述公鑰被編譯到該apk文件中;
[0024]當(dāng)該apk文件被安裝到移動終端的安卓平臺上后,若發(fā)現(xiàn)該apk文件對應(yīng)應(yīng)用被打開,則從該apk文件中找到所述身份驗證文件和所述公鑰,根據(jù)所述公鑰對所述身份驗證文件進行解密,從該apk文件中解析出應(yīng)用的聲明文件,判斷解密結(jié)果是否與該聲明文件一致,若是,確認(rèn)該apk文件合法。
[0025]所述根據(jù)所述私鑰對所述聲明文件進行加密,得到該apk文件的身份驗證文件包括:
[0026]計算每個聲明文件的MD5摘要,將計算得到的MD5摘要存儲為文件1,計算文件I的MD5摘要,將文件I的MD5摘要存儲為文件2,用所述私鑰對文件2進行簽名,得到文件3,將文件1、文件2和文件3打包壓縮得到該apk文件的身份驗證文件;
[0027]所述根據(jù)所述公鑰對所述身份驗證文件進行解密,從該apk文件中解析出應(yīng)用的聲明文件,判斷解密結(jié)果是否與該聲明文件一致包括:
[0028]根據(jù)所述公鑰解密身份驗證文件中的文件3,得到文件5,判斷文件5和文件2是否一致,若一致,從該apk文件中解析出應(yīng)用的聲明文件,計算每個聲明文件的MD5摘要,并將得到的MD5摘要存儲為文件6,計算文件6的MD5摘要,判斷文件6的MD5摘要是否和文件2相同,若相同,確認(rèn)該apk文件合法。
[0029]所述從該apk文件中解析出應(yīng)用的聲明文件之后、根據(jù)所述私鑰對所述聲明文件進行加密之前進一步包括:
[0030]在該聲明文件中自定義用戶權(quán)限;
[0031]所述從該apk文件中解析出應(yīng)用的聲明文件之后、判斷解密結(jié)果是否與該聲明文件一致之前進一步包括:
[0032]判斷該聲明文件中是否包含自定義用戶權(quán)限,若是,執(zhí)行所述判斷解密結(jié)果是否與該聲明文件一致的動作;否則,認(rèn)為該apk文件非法。
[0033]所述身份驗證文件和所述公鑰被編譯到該apk文件中進一步包括:
[0034]應(yīng)用開發(fā)者對該應(yīng)用的簽名文件被編譯到該apk文件中;
[0035]所述從該apk文件中解析出應(yīng)用的聲明文件之后、計算每個聲明文件的MD5摘要之前進一步包括:
[0036]從聲明文件中排除掉應(yīng)用簽名文件。
[0037]所述將文件1、文件2和文件3打包壓縮得到該apk文件的身份驗證文件之后、所述身份驗證文件和所述公鑰被編譯到該apk文件中之前進一步包括:
[0038]所述身份驗證文件被放到該apk文件對應(yīng)的應(yīng)用工程的assets目錄中,同時,所述公鑰被放在該apk文件的靜態(tài)庫中,該靜態(tài)庫被集成到該apk文件對應(yīng)的應(yīng)用工程中;
[0039]所述從該apk文件中找到所述身份驗證文件和所述公鑰包括:
[0040]從該apk文件的assets目錄中找到所述身份驗證文件,將該身份驗證文件讀到移動終端的安全數(shù)字存儲SD卡的指定目錄中,將該身份驗證文件在SD卡中的路徑傳遞給Dex類加載器,以使得:當(dāng)該應(yīng)用使用能力時,Dex類加載器根據(jù)該路徑動態(tài)加載該身份驗證文件,同時,當(dāng)該應(yīng)用使用能力時從該apk文件的靜態(tài)庫中讀取所述公鑰。
[0041]所述非對稱密鑰對為:RSA密鑰對。
[0042]一種對移動終端上的應(yīng)用進行身份驗證的系統(tǒng),包括:
[0043]身份驗證文件生成模塊:為剛開發(fā)出的應(yīng)用安裝包apk文件生成非對稱密鑰對:非對稱公鑰和私鑰;從該apk文件中解析出應(yīng)用的聲明文件,根據(jù)所述私鑰對所述聲明文件進行加密,得到該apk文件的身份驗證文件,所述身份驗證文件和所述公鑰被編譯到該apk文件中;
[0044]身份驗證模塊:當(dāng)該apk文件被安裝到移動終端的安卓平臺上后,若發(fā)現(xiàn)該apk文件對應(yīng)應(yīng)用被打開,則從該apk文件中找到所述身份驗證文件和所述公鑰,根據(jù)所述公鑰對所述身份驗證文件進行解密,從該apk文件中解析出應(yīng)用的聲明文件,判斷解密結(jié)果是否與該聲明文件一致,若是,確認(rèn)該apk文件合法。
[0045]所述身份驗證文件生成模塊根據(jù)所述私鑰對所述聲明文件進行加密,得到該apk文件的身份驗證文件包括:
[0046]計算每個聲明文件的MD5摘要,將計算得到的MD5摘要存儲為文件1,計算文件I的MD5摘要,將文件I的MD5摘要存儲為文件2,用所述私鑰對文件2進行簽名,得到文件3,將文件1、文件2和文件3打包壓縮得到該apk文件的身份驗證文件;
[0047]所述身份驗證模塊根據(jù)所述公鑰對所述身份驗證文件進行解密,從該apk文件中解析出應(yīng)用的聲明文件,判斷解密結(jié)果是否與該聲明文件一致包括:
[0048]根據(jù)所述公鑰解密身份驗證文件中的文件3,得到文件5,判斷文件5和文件2是否一致,若一致,從該apk文件中解析出應(yīng)用的聲明文件,計算每個聲明文件的MD5摘要,并將得到的MD5摘要存儲為文件6,計算文件6的MD5摘要,判斷文件6的MD5摘要是否和文件2相同,若相同,確認(rèn)該apk文件合法。
[0049]所述身份驗證文件生成模塊從該apk文件中解析出應(yīng)用的聲明文件之后、根據(jù)所述私鑰對所述聲明文件進行加密之前進一步用于,在該聲明文件中自定義用戶權(quán)限;
[0050]所述身份驗證模塊從該apk文件中解析出應(yīng)用的聲明文件之后、判斷解密結(jié)果是否與該聲明文件一致之前進一步用于,判斷該聲明文件中是否包含自定義用戶權(quán)限,若是,執(zhí)行所述判斷解密結(jié)果是否與該聲明文件一致的動作;否則,認(rèn)為該apk文件非法。
[0051]一種對移動終端上的應(yīng)用進行身份驗證的裝置,包括:身份驗證模塊,用于當(dāng)apk文件被安裝到移動終端的安卓平臺上后,若發(fā)現(xiàn)該apk文件對應(yīng)應(yīng)用被打開,則從該apk文件中找到身份驗證文件和公鑰,根據(jù)所述公鑰對所述身份驗證文件進行解密,從該apk文件中解析出應(yīng)用的聲明文件,判斷解密結(jié)果是否與該聲明文件一致,若是,確認(rèn)該apk文件合法。
[0052]所述身份驗證模塊根據(jù)所述公鑰對所述身份驗證文件進行解密,從該apk文件中解析出應(yīng)用的聲明文件,判斷解密結(jié)果是否與該聲明文件一致包括:
[0053]根據(jù)所述公鑰解密身份驗證文件中的文件3,得到文件5,判斷文件5和文件2是否一致,若一致,從該apk文件中解析出應(yīng)用的聲明文件,計算每個聲明文件的MD5摘要,并將得到的MD5摘要存儲為文件6,計算文件6的MD5摘要,判斷文件6的MD5摘要是否和文件2相同,若相同,確認(rèn)該apk文件合法;
[0054]其中,所述身份驗證文件通過如下步驟得到:
[0055]為剛開發(fā)出的所述apk文件生成非對稱密鑰對:非對稱公鑰和私鑰,計算該apk文件中每個聲明文件的MD5摘要,將計算得到的MD5摘要存儲為文件1,計算文件I的MD5摘要,將文件I的MD5摘要存儲為文件2,用所述私鑰對文件2進行簽名,得到文件3,將文件1、文件2和文件3打包壓縮得到該apk文件的身份驗證文件,且該身份驗證文件和所述公鑰被編譯到該apk文件中。
[0056]所述身份驗證模塊從該apk文件中解析出應(yīng)用的聲明文件之后、判斷解密結(jié)果是否與該聲明文件一致之前進一步用于,判斷該聲明文件中是否包含自定義用戶權(quán)限,若是,執(zhí)行所述判斷解密結(jié)果是否與該聲明文件一致的動作;否則,認(rèn)為該apk文件非法。
[0057]當(dāng)安裝到移動終端的安卓平臺上的apk文件包含應(yīng)用開發(fā)者的應(yīng)用簽名文件時,
[0058]所述身份驗證模塊從該apk文件中解析出應(yīng)用的聲明文件之后、計算每個聲明文件的MD5摘要之前進一步用于,從聲明文件中排除掉應(yīng)用簽名文件。
[0059]所述身份驗證模塊從該apk文件中找到所述身份驗證文件和所述公鑰包括:
[0060]從該apk文件的assets目錄中找到所述身份驗證文件,將該身份驗證文件讀到移動終端的安全數(shù)字存儲SD卡的指定目錄中,將該身份驗證文件在SD卡中的路徑傳遞給Dex類加載器,以使得:當(dāng)該應(yīng)用使用能力時,Dex類加載器根據(jù)該路徑動態(tài)加載該身份驗證文件,同時,當(dāng)該應(yīng)用使用能力時從該apk文件的靜態(tài)庫中讀取所述公鑰。
[0061]所述身份驗證文件生成模塊生成的非對稱密鑰對為:RSA密鑰對。
[0062]所述裝置位于移動終端上。
[0063]可見,本發(fā)明中,通過使用私鑰對apk文件的聲明文件加密,實現(xiàn)了對應(yīng)用內(nèi)容是否合法的鑒定,同時,對應(yīng)用內(nèi)容的合法性進行鑒定時無需聯(lián)網(wǎng),只在移動終端本地進行操作即可。
【專利附圖】
【附圖說明】
[0064]圖1為本發(fā)明實施例提供的為移動終端上的應(yīng)用生成身份驗證文件的方法流程圖;
[0065]圖2為本發(fā)明實施例提供的對移動終端上的應(yīng)用進行身份驗證的方法流程圖;
[0066]圖3為本發(fā)明實施例提供的對移動終端上的應(yīng)用進行身份驗證的系統(tǒng)的組成示意圖。
【具體實施方式】
[0067]下面結(jié)合附圖及具體實施例對本發(fā)明再作進一步詳細(xì)的說明。
[0068]圖1為本發(fā)明實施例提供的為移動終端上的應(yīng)用生成身份驗證文件的方法流程圖,如圖1所示,其具體步驟如下:
[0069]步驟101:應(yīng)用開發(fā)端將開發(fā)出的還未簽名的apk文件發(fā)送給對應(yīng)的能力提供端。
[0070]步驟102:能力提供端為該apk文件生成RSA密鑰對:公鑰證書和私鑰文件。
[0071]公鑰證書和私鑰文件構(gòu)成一密鑰對。在加密時,使用私鑰文件加密,而在解密時,使用公鑰證書解密。
[0072]本步驟的具體實現(xiàn)如下:
[0073]步驟1021:使用openssl工具生成長度為2048位的RSA私鑰。
[0074]RSA私鑰為非對稱私鑰。
[0075]步驟1022:使用openssl工具生成x509格式的公鑰證書。
[0076]該公鑰證書可符合test.x509.pem標(biāo)準(zhǔn)。
[0077]步驟1023:使用openssl工具根據(jù)RSA私鑰生成符合PKCS8標(biāo)準(zhǔn)的私鑰文件。
[0078]該私鑰文件可符合PKCS8標(biāo)準(zhǔn)。
[0079]需要說明的是,這里給出的是采用openssl工具生成公鑰證書和私鑰文件,在實際應(yīng)用中,也可以采用其他工具生成公鑰證書和私鑰文件。
[0080]步驟103:能力提供端測試該apk文件是否包含惡意內(nèi)容,若是,執(zhí)行步驟104 ;否貝U,執(zhí)行步驟105。
[0081]步驟104:能力提供端將該apk文件退回應(yīng)用開發(fā)端,以使應(yīng)用開發(fā)端重新提交apk文件,本流程結(jié)束。
[0082]步驟105:能力提供端解析該apk文件,獲取該apk文件對應(yīng)應(yīng)用的聲明文件:AndroidManifest.xml文件;分別計算AndroidManifest.xml文件列表中每個資源文件及classes, dex的MD5 (Message Digest Algorithm5,消息摘要算法第五版)摘要,并將計算得到的MD5摘要存儲為文件filel。
[0083]classes, dex為類文件集合。
[0084]Android 系統(tǒng)要求用戶在使用 API (Applicat1n Programming Interface,應(yīng)用程序接口)時進行權(quán)限的申明。為了確保只有授權(quán)的應(yīng)用可以使用開放能力,本發(fā)明實施例中,在AndroidManifest.xml文件中自定義一個用戶權(quán)限,放在需要保護的模塊聲明中。
[0085]步驟106:能力提供端計算文件filel的MD5摘要,并將該filel的MD5摘要存儲為文件file2。
[0086]步驟107:能力提供端用步驟102生成的私鑰文件對file2進行簽名,得到文件file30
[0087]步驟108:能力提供端將文件filel,file2和file3打包壓縮得到文件file4,file4即為身份驗證文件。
[0088]可以看出,通過上述步驟101?108得到的身份驗證文件,既包含apk文件完整性的信息,也包含了簽名信息。
[0089]步驟109:能力提供端將該apk文件的身份驗證文件發(fā)送給應(yīng)用開發(fā)端,應(yīng)用開發(fā)端將該身份驗證文件放到該apk文件對應(yīng)的應(yīng)用工程的assets目錄中,同時,將該apk文件的身份文件驗證方法和生成的公鑰證書包含在該apk文件的靜態(tài)庫中,將該靜態(tài)庫集成到該apk文件對應(yīng)的應(yīng)用工程中。
[0090]在編譯時,該apk文件對應(yīng)的應(yīng)用工程會編譯到該apk文件中,這樣,身份驗證文件、身份文件驗證方法、公鑰證書最終都編譯到了 apk文件中。
[0091]其中,身份文件驗證方法即圖2所示方法,將其包含到靜態(tài)庫中,這樣,當(dāng)該應(yīng)用的能力被調(diào)用時,能力SDK模塊就可從靜態(tài)庫中讀取該方法,根據(jù)該方法自動對apk文件進行身份驗證。
[0092]應(yīng)用開發(fā)端還可以使用應(yīng)用開發(fā)者的簽名文件來對該apk文件進行簽名,該簽名文件也需編譯到該apk文件中。
[0093]此后,就可將該apk文件下載并安裝到移動終端的android平臺上。
[0094]圖2為本發(fā)明實施例提供的對移動終端上的應(yīng)用進行身份驗證的方法流程圖,如圖2所示,其具體步驟如下:
[0095]步驟201:當(dāng)移動終端的一個應(yīng)用的能力SDK (Software Development Kit,軟件開發(fā)工具包)模塊發(fā)現(xiàn)用戶在安卓平臺上打開一應(yīng)用時,遍歷該應(yīng)用對應(yīng)的壓縮apk文件,從該apk文件的assets目錄中找到身份驗證文件,將該身份驗證文件讀到移動終端的SD(Secure Digital Memory,安全數(shù)字存儲)卡的指定目錄中。
[0096]這里,需要說明的是,Android平臺自身已經(jīng)提供了從apk文件的assets目錄中讀取二進制文件的方法,但該方法對文件大小做了嚴(yán)格限制,不能超過2MByte,否則就會報出讀寫文件異常。
[0097]步驟202:該能力SDK模塊將該身份驗證文件在SD卡中的路徑傳遞給Dex類加載器(DexClassLoader),當(dāng)該應(yīng)用使用能力時,DexClassLoader根據(jù)該路徑動態(tài)加載該身份驗證文件到該能力SDK模塊。
[0098]由于DexClassLoader要求指定一個可寫的目錄來存放優(yōu)化后的dex文件,因此,步驟201中,要將身份驗證文件讀到移動終端的SD卡的指定目錄中。
[0099]步驟203:當(dāng)該應(yīng)用使用能力時,該能力SDK模塊從該apk文件的靜態(tài)庫中讀取公鑰證書和身份文件驗證方法,按照該身份文件驗證方法,執(zhí)行步驟204?211。
[0100]步驟204:該能力SDK模塊根據(jù)該公鑰證書解密壓縮文件file4中的簽名文件file3,得到文件file5。
[0101]壓縮文件file4即身份驗證文件。
[0102]步驟205:該能力SDK模塊判斷file5和file2是否一致,若是,執(zhí)行步驟206 ;否貝U,執(zhí)行步驟211。
[0103]步驟206:該能力SDK模塊解析apk文件,獲得其包含的文件列表。
[0104]步驟207:該能力SDK模塊從apk文件包含的文件列表中排除掉應(yīng)用簽名文件,分別計算列表中每個文件的MD5摘要,并將每個文件的MD5摘要存儲為文件file6。
[0105]步驟208:該能力SDK模塊解析該應(yīng)用的AndroidManifest.xml文件,判斷其中的關(guān)鍵模塊是否有自定義用戶權(quán)限聲明,若是,執(zhí)行步驟209 ;否則,執(zhí)行步驟211。
[0106]步驟209:該能力SDK模塊計算文件file6的MD5摘要,判斷file6的MD5摘要是否和file2相同,若是,執(zhí)行步驟210 ;否則,執(zhí)行步驟211。
[0107]步驟210:該能力SDK模塊確認(rèn)apk文件合法,允許用戶使用該應(yīng)用,本流程結(jié)束。
[0108]步驟211:該能力SDK模塊確定apk文件非法,提示用戶該應(yīng)用可能包含惡意內(nèi)容或者禁止用戶繼續(xù)使用該應(yīng)用。
[0109]從圖1、2所示流程可以看出,本發(fā)明實施例中,不僅對apk文件包含的聲明文件進行MD5摘要計算,還用私鑰文件對MD5摘要文件進行簽名,從而:
[0110]一、能力提供方不僅可以實現(xiàn)對應(yīng)用內(nèi)容是否合法的鑒定,也可以實現(xiàn)對應(yīng)用身份是否合法的鑒定;
[0111]二、可靠性高。身份校驗在移動終端本地進行,無需聯(lián)網(wǎng)請求,也減少了用戶等待時間;
[0112]三、適用面廣。應(yīng)用開發(fā)者可以擁有自己獨立的簽名文件,對其原有的業(yè)務(wù)推廣及運營沒有任何影響。Android平臺的簽名認(rèn)證機制在于,Android平臺會校驗應(yīng)用中包含的全部證書的信息。如果市面上已有的應(yīng)用只有一個證書,而后續(xù)推廣的應(yīng)用帶有多個證書,則后續(xù)的應(yīng)用無法在Android平臺上覆蓋安裝之前的應(yīng)用,造成應(yīng)用的不兼容。
[0113]四、安全性更高。Android平臺基于簽名的標(biāo)準(zhǔn)的身份認(rèn)證機制,僅僅在應(yīng)用安裝到Android平臺的時候才發(fā)揮作用。一旦應(yīng)用已經(jīng)安裝后,在應(yīng)用啟動及運行過程中,都不再會進行身份的校驗。而本發(fā)明實施例在能力每次被調(diào)用時均會被使用,這樣只要能力被調(diào)用,就會對應(yīng)用內(nèi)容及身份進行合法性鑒定,并繞開了 Android平臺固有的文件大小限制,很好地彌補了 Android標(biāo)準(zhǔn)身份認(rèn)證機制未覆蓋到的場景。
[0114]圖3為本發(fā)明實施例提供的對移動終端上的應(yīng)用進行身份驗證的系統(tǒng)的組成示意圖,如圖3所示,其主要包括:身份驗證文件生成模塊31和身份驗證模塊32,其中,
[0115]身份驗證文件生成模塊31:接收應(yīng)用開發(fā)端發(fā)來的剛開發(fā)出的未簽名的apk文件,為該apk文件生成非對稱密鑰對:非對稱公鑰和私鑰;從該apk文件中解析出應(yīng)用的聲明文件,根據(jù)該私鑰對該聲明文件進行加密,得到該apk文件的身份驗證文件,將該身份驗證文件和該公鑰發(fā)送給應(yīng)用開發(fā)端,該身份驗證文件和該公鑰被應(yīng)用開發(fā)端編譯到該apk文件中。
[0116]身份驗證模塊32:當(dāng)apk文件被安裝到移動終端的安卓平臺上后,若發(fā)現(xiàn)該apk文件對應(yīng)應(yīng)用被打開,則從該apk文件中找到身份驗證文件和公鑰,根據(jù)該公鑰對該身份驗證文件進行解密,從該apk文件中解析出應(yīng)用的聲明文件,判斷解密結(jié)果是否與該聲明文件一致,若是,確認(rèn)該apk文件合法。
[0117]在實際應(yīng)用中,身份驗證文件生成模塊31根據(jù)該私鑰對該聲明文件進行加密,得到該apk文件的身份驗證文件可包括:計算每個聲明文件的MD5摘要,將計算得到的MD5摘要存儲為文件1,計算文件I的MD5摘要,將文件I的MD5摘要存儲為文件2,用該私鑰對文件2進行簽名,得到文件3,將文件1、文件2和文件3打包壓縮得到該apk文件的身份驗證文件;
[0118]同時,身份驗證模塊32根據(jù)該公鑰對該身份驗證文件進行解密,從該apk文件中解析出應(yīng)用的聲明文件,判斷解密結(jié)果是否與該聲明文件一致可包括:根據(jù)該公鑰解密身份驗證文件中的文件3,得到文件5,判斷文件5和文件2是否一致,若一致,從該apk文件中解析出應(yīng)用的聲明文件,計算每個聲明文件的MD5摘要,并將得到的MD5摘要存儲為文件6,計算文件6的MD5摘要,判斷文件6的MD5摘要是否和文件2相同,若相同,確認(rèn)該apk文件合法。
[0119]在實際應(yīng)用中,身份驗證文件生成模塊31從該apk文件中解析出應(yīng)用的聲明文件之后、根據(jù)該私鑰對該聲明文件進行加密之前進一步用于,在該聲明文件中自定義用戶權(quán)限;
[0120]同時,身份驗證模塊32從該apk文件中解析出應(yīng)用的聲明文件之后、判斷解密結(jié)果是否與該聲明文件一致之前進一步用于,判斷該聲明文件中是否包含自定義用戶權(quán)限,若是,執(zhí)行判斷解密結(jié)果是否與該聲明文件一致的動作;否則,認(rèn)為該apk文件非法。
[0121 ] 在實際應(yīng)用中,身份驗證模塊32可位于移動終端上。
[0122]以下給出本發(fā)明實施例提供的對移動終端上的應(yīng)用進行身份驗證的裝置的組成,該裝置包括:身份驗證模塊,用于當(dāng)apk文件被安裝到移動終端的安卓平臺上后,若發(fā)現(xiàn)該apk文件對應(yīng)應(yīng)用被打開,則從該apk文件中找到身份驗證文件和公鑰,根據(jù)該公鑰對該身份驗證文件進行解密,從該apk文件中解析出應(yīng)用的聲明文件,判斷解密結(jié)果是否與該聲明文件一致,若是,確認(rèn)該apk文件合法。
[0123]在實際應(yīng)用中,身份驗證模塊根據(jù)該公鑰對該身份驗證文件進行解密,從該apk文件中解析出應(yīng)用的聲明文件,判斷解密結(jié)果是否與該聲明文件一致可包括:根據(jù)該公鑰解密身份驗證文件中的文件3,得到文件5,判斷文件5和文件2是否一致,若一致,從該apk文件中解析出應(yīng)用的聲明文件,計算每個聲明文件的MD5摘要,并將得到的MD5摘要存儲為文件6,計算文件6的MD5摘要,判斷文件6的MD5摘要是否和文件2相同,若相同,確認(rèn)該apk文件合法;
[0124]其中,身份驗證文件通過如下步驟得到:
[0125]為剛開發(fā)出的apk文件生成非對稱密鑰對:非對稱公鑰和私鑰,計算該apk文件中每個聲明文件的MD5摘要,將計算得到的MD5摘要存儲為文件I,計算文件I的MD5摘要,將文件I的MD5摘要存儲為文件2,用該私鑰對文件2進行簽名,得到文件3,將文件1、文件2和文件3打包壓縮得到該apk文件的身份驗證文件,且該身份驗證文件和該公鑰被編譯到該apk文件中。
[0126]在實際應(yīng)用中,身份驗證模塊從該apk文件中解析出應(yīng)用的聲明文件之后、判斷解密結(jié)果是否與該聲明文件一致之前進一步用于,判斷該聲明文件中是否包含自定義用戶權(quán)限,若是,執(zhí)行判斷解密結(jié)果是否與該聲明文件一致的動作;否則,認(rèn)為該apk文件非法。
[0127]在實際應(yīng)用中,當(dāng)安裝到移動終端的安卓平臺上的apk文件包含應(yīng)用開發(fā)者的應(yīng)用簽名文件時,身份驗證模塊從該apk文件中解析出應(yīng)用的聲明文件之后、計算每個聲明文件的MD5摘要之前進一步用于,從聲明文件中排除掉應(yīng)用簽名文件。
[0128]在實際應(yīng)用中,身份驗證模塊從該apk文件中找到身份驗證文件和公鑰可包括:從該apk文件的assets目錄中找到身份驗證文件,將該身份驗證文件讀到移動終端的SD卡的指定目錄中,將該身份驗證文件在SD卡中的路徑傳遞給Dex類加載器,以使得:當(dāng)該應(yīng)用使用能力時,Dex類加載器根據(jù)該路徑動態(tài)加載該身份驗證文件,同時,當(dāng)該應(yīng)用使用能力時從該apk文件的靜態(tài)庫中讀取公鑰。
[0129]在實際應(yīng)用中,身份驗證文件生成模塊生成的非對稱密鑰對可為:RSA密鑰對。
[0130]在實際應(yīng)用中,該裝置可位于移動終端上。
[0131]以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明保護的范圍之內(nèi)。
【權(quán)利要求】
1.一種對移動終端上的應(yīng)用進行身份驗證的方法,其特征在于,該方法包括: 為剛開發(fā)出的應(yīng)用安裝包apk文件生成非對稱密鑰對:非對稱公鑰和私鑰;從該apk文件中解析出應(yīng)用的聲明文件,根據(jù)所述私鑰對所述聲明文件進行加密,得到該apk文件的身份驗證文件,所述身份驗證文件和所述公鑰被編譯到該apk文件中; 當(dāng)該apk文件被安裝到移動終端的安卓平臺上后,若發(fā)現(xiàn)該apk文件對應(yīng)應(yīng)用被打開,則從該apk文件中找到所述身份驗證文件和所述公鑰,根據(jù)所述公鑰對所述身份驗證文件進行解密,從該apk文件中解析出應(yīng)用的聲明文件,判斷解密結(jié)果是否與該聲明文件一致,若是,確認(rèn)該apk文件合法。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述私鑰對所述聲明文件進行加密,得到該apk文件的身份驗證文件包括: 計算每個聲明文件的MD5摘要,將計算得到的MD5摘要存儲為文件I,計算文件I的MD5摘要,將文件I的MD5摘要存儲為文件2,用所述私鑰對文件2進行簽名,得到文件3,將文件1、文件2和文件3打包壓縮得到該apk文件的身份驗證文件; 所述根據(jù)所述公鑰對所述身份驗證文件進行解密,從該apk文件中解析出應(yīng)用的聲明文件,判斷解密結(jié)果是否與該聲明文件一致包括: 根據(jù)所述公鑰解密身份驗證文件中的文件3,得到文件5,判斷文件5和文件2是否一致,若一致,從該apk文件中解析出應(yīng)用的聲明文件,計算每個聲明文件的MD5摘要,并將得到的MD5摘要存儲為文件6,計算文件6的MD5摘要,判斷文件6的MD5摘要是否和文件2相同,若相同,確認(rèn)該apk文件合法。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述從該apk文件中解析出應(yīng)用的聲明文件之后、根據(jù)所述私鑰對所述聲明文件進行加密之前進一步包括: 在該聲明文件中自定義用戶權(quán)限; 所述從該apk文件中解析出應(yīng)用的聲明文件之后、判斷解密結(jié)果是否與該聲明文件一致之前進一步包括: 判斷該聲明文件中是否包含自定義用戶權(quán)限,若是,執(zhí)行所述判斷解密結(jié)果是否與該聲明文件一致的動作;否則,認(rèn)為該apk文件非法。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述身份驗證文件和所述公鑰被編譯到該apk文件中進一步包括: 應(yīng)用開發(fā)者對該應(yīng)用的簽名文件被編譯到該apk文件中; 所述從該apk文件中解析出應(yīng)用的聲明文件之后、計算每個聲明文件的MD5摘要之前進一步包括: 從聲明文件中排除掉應(yīng)用簽名文件。
5.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述將文件1、文件2和文件3打包壓縮得到該apk文件的身份驗證文件之后、所述身份驗證文件和所述公鑰被編譯到該apk文件中之前進一步包括: 所述身份驗證文件被放到該apk文件對應(yīng)的應(yīng)用工程的assets目錄中,同時,所述公鑰被放在該apk文件的靜態(tài)庫中,該靜態(tài)庫被集成到該apk文件對應(yīng)的應(yīng)用工程中; 所述從該apk文件中找到所述身份驗證文件和所述公鑰包括: 從該apk文件的assets目錄中找到所述身份驗證文件,將該身份驗證文件讀到移動終端的安全數(shù)字存儲SD卡的指定目錄中,將該身份驗證文件在SD卡中的路徑傳遞給Dex類加載器,以使得:當(dāng)該應(yīng)用使用能力時,Dex類加載器根據(jù)該路徑動態(tài)加載該身份驗證文件,同時,當(dāng)該應(yīng)用使用能力時從該apk文件的靜態(tài)庫中讀取所述公鑰。
6.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述非對稱密鑰對為:RSA密鑰對。
7.一種對移動終端上的應(yīng)用進行身份驗證的系統(tǒng),其特征在于,包括: 身份驗證文件生成模塊:為剛開發(fā)出的應(yīng)用安裝包apk文件生成非對稱密鑰對:非對稱公鑰和私鑰;從該apk文件中解析出應(yīng)用的聲明文件,根據(jù)所述私鑰對所述聲明文件進行加密,得到該apk文件的身份驗證文件,所述身份驗證文件和所述公鑰被編譯到該apk文件中; 身份驗證模塊:當(dāng)該apk文件被安裝到移動終端的安卓平臺上后,若發(fā)現(xiàn)該apk文件對應(yīng)應(yīng)用被打開,則從該apk文件中找到所述身份驗證文件和所述公鑰,根據(jù)所述公鑰對所述身份驗證文件進行解密,從該apk文件中解析出應(yīng)用的聲明文件,判斷解密結(jié)果是否與該聲明文件一致,若是,確認(rèn)該apk文件合法。
8.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,所述身份驗證文件生成模塊根據(jù)所述私鑰對所述聲明文件進行加密,得到該apk文件的身份驗證文件包括: 計算每個聲明文件的MD5摘要,將計算得到的MD5摘要存儲為文件I,計算文件I的MD5摘要,將文件I的MD5摘要存儲為文件2,用所述私鑰對文件2進行簽名,得到文件3,將文件1、文件2和文件3打包壓縮得到該apk文件的身份驗證文件; 所述身份驗證模塊根據(jù)所述公鑰對所述身份驗證文件進行解密,從該apk文件中解析出應(yīng)用的聲明文件,判斷解密結(jié)果是否與該聲明文件一致包括: 根據(jù)所述公鑰解密身份驗證文件中的文件3,得到文件5,判斷文件5和文件2是否一致,若一致,從該apk文件中解析出應(yīng)用的聲明文件,計算每個聲明文件的MD5摘要,并將得到的MD5摘要存儲為文件6,計算文件6的MD5摘要,判斷文件6的MD5摘要是否和文件2相同,若相同,確認(rèn)該apk文件合法。
9.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,所述身份驗證文件生成模塊從該apk文件中解析出應(yīng)用的聲明文件之后、根據(jù)所述私鑰對所述聲明文件進行加密之前進一步用于,在該聲明文件中自定義用戶權(quán)限; 所述身份驗證模塊從該apk文件中解析出應(yīng)用的聲明文件之后、判斷解密結(jié)果是否與該聲明文件一致之前進一步用于,判斷該聲明文件中是否包含自定義用戶權(quán)限,若是,執(zhí)行所述判斷解密結(jié)果是否與該聲明文件一致的動作;否則,認(rèn)為該apk文件非法。
10.一種對移動終端上的應(yīng)用進行身份驗證的裝置,其特征在于,包括:身份驗證模塊,用于當(dāng)apk文件被安裝到移動終端的安卓平臺上后,若發(fā)現(xiàn)該apk文件對應(yīng)應(yīng)用被打開,則從該apk文件中找到身份驗證文件和公鑰,根據(jù)所述公鑰對所述身份驗證文件進行解密,從該apk文件中解析出應(yīng)用的聲明文件,判斷解密結(jié)果是否與該聲明文件一致,若是,確認(rèn)該apk文件合法。
11.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述身份驗證模塊根據(jù)所述公鑰對所述身份驗證文件進行解密,從該apk文件中解析出應(yīng)用的聲明文件,判斷解密結(jié)果是否與該聲明文件一致包括: 根據(jù)所述公鑰解密身份驗證文件中的文件3,得到文件5,判斷文件5和文件2是否一致,若一致,從該apk文件中解析出應(yīng)用的聲明文件,計算每個聲明文件的MD5摘要,并將得到的MD5摘要存儲為文件6,計算文件6的MD5摘要,判斷文件6的MD5摘要是否和文件2相同,若相同,確認(rèn)該apk文件合法; 其中,所述身份驗證文件通過如下步驟得到: 為剛開發(fā)出的所述apk文件生成非對稱密鑰對:非對稱公鑰和私鑰,計算該apk文件中每個聲明文件的MD5摘要,將計算得到的MD5摘要存儲為文件I,計算文件I的MD5摘要,將文件I的MD5摘要存儲為文件2,用所述私鑰對文件2進行簽名,得到文件3,將文件1、文件2和文件3打包壓縮得到該apk文件的身份驗證文件,且該身份驗證文件和所述公鑰被編譯到該apk文件中。
12.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述身份驗證模塊從該apk文件中解析出應(yīng)用的聲明文件之后、判斷解密結(jié)果是否與該聲明文件一致之前進一步用于,判斷該聲明文件中是否包含自定義用戶權(quán)限,若是,執(zhí)行所述判斷解密結(jié)果是否與該聲明文件一致的動作;否則,認(rèn)為該apk文件非法。
13.根據(jù)權(quán)利要求11所述的裝置,其特征在于,當(dāng)安裝到移動終端的安卓平臺上的apk文件包含應(yīng)用開發(fā)者的應(yīng)用簽名文件時, 所述身份驗證模塊從該apk文件中解析出應(yīng)用的聲明文件之后、計算每個聲明文件的MD5摘要之前進一步用于,從聲明文件中排除掉應(yīng)用簽名文件。
14.根據(jù)權(quán)利要求10或11所述的裝置,其特征在于,所述身份驗證模塊從該apk文件中找到所述身份驗證文件和所述公鑰包括: 從該apk文件的assets目錄中找到所述身份驗證文件,將該身份驗證文件讀到移動終端的安全數(shù)字存儲SD卡的指定目錄中,將該身份驗證文件在SD卡中的路徑傳遞給Dex類加載器,以使得:當(dāng)該應(yīng)用使用能力時,Dex類加載器根據(jù)該路徑動態(tài)加載該身份驗證文件,同時,當(dāng)該應(yīng)用使用能力時從該apk文件的靜態(tài)庫中讀取所述公鑰。
15.根據(jù)權(quán)利要求10或11所述的裝置,其特征在于,所述身份驗證文件生成模塊生成的非對稱密鑰對為:RSA密鑰對。
16.根據(jù)權(quán)利要求10或11所述的裝置,其特征在于,所述裝置位于移動終端上。
【文檔編號】H04L9/32GK104426658SQ201310390851
【公開日】2015年3月18日 申請日期:2013年9月2日 優(yōu)先權(quán)日:2013年9月2日
【發(fā)明者】吳博, 靳澤宇 申請人:中國移動通信集團公司