免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Android 簽名機制:Key的產(chǎn)生方法和簽名原理

Android 簽名機制:Key的產(chǎn)生方法和簽名原理  

2014-03-05 11:32:59|  分類: 默認分類 |  標簽:android  apk簽名   |舉報 |字號 訂閱

apk簽名作用:
  在Android 系統(tǒng)中,所有安裝 到 系統(tǒng)的應用程序都必有一個數(shù)字證書,此數(shù)字證書用于標識應用程序的作者和在應用程序之間建立信任關系,如果一個 permission的protectionLevel為signature,那么就只有那些跟該permission所在的程序擁有同一個數(shù)字證書的應 用程序才能取得該權限。Android使用Java的數(shù)字證書相關的機制來 給apk加蓋數(shù)字證書,要理解android的數(shù)字證書,需要先了解以下數(shù)字證書的概念和java的數(shù)字證書機制。Android系統(tǒng)要求每一個安裝進系 統(tǒng)的應用程序都是經(jīng)過數(shù)字證書簽名的,數(shù)字證書的私鑰則保存在程序開發(fā)者的手中。Android將數(shù)字證書用來標識應用程序的作者和在應用程序之間建立信 任關系,不是用來決定最終用戶可以安裝哪些應用程序。這個數(shù)字證書并不需要權威的數(shù)字證書簽名機構(gòu)認證,它只是用來讓應用程序包自我認證的;也是用來判斷該應用是否被別人破解,二次打包的一個標準,但是簽名并不能防止被破解。

Android數(shù)字證書包含以下幾個要點:

(1)所有的應用程序都必須有數(shù)字證書 ,Android系統(tǒng)不會安裝一個沒有數(shù)字證書的應用程序;
 (2)Android程序包使用的數(shù)字證書可以是自簽名的,不需要一個權威的數(shù)字證書機構(gòu)簽名認證;
 (3)如果要正式發(fā)布 一個Android ,必須使用一個合適的私鑰生成的數(shù)字證書來給程序簽名 ,而不能使用adt插件 或者ant工具 生成的調(diào)試證書來發(fā)布。
 (4)數(shù)字證書都是有有效期 的,Android只是在應用程序安裝的時候才會檢查證書的有效期。如果程序已經(jīng)安裝在系統(tǒng)中,即使證書過期也不會影響程序的正常功能。
(5)Android使用標準的java工具 Keytool and Jarsigner 來生成數(shù)字證書,并給應用程序包簽名。
(6)使用zipalign 優(yōu)化 程序。


簽名原理:
Android系統(tǒng)簽名主要有ROM簽名和應用程序APK簽名兩種形式。ROM簽名是針對已經(jīng)生成的Android系統(tǒng)ROM包進行簽名。應用程序APK簽名是針對開發(fā)者開發(fā)的應用程序安裝包APK進行簽名。前者是對整個Android系統(tǒng)包簽名,后者只對Android系統(tǒng)中一個應用程序APK簽名。
Android 應用程序APK是jar包,簽名采用的工具是signapk.jar包,對應用程序安裝包簽名的執(zhí)行命令如下:
java -jar signapk.jar publickey privatekey input.apk output.apk

此命令實現(xiàn)了對應用程序安裝包input.apk簽名的功能。在signapk.jar命令中,第一個參數(shù)為公鑰publickey,第二個參數(shù)為私鑰privatekey,第三個參數(shù)為輸入的包名,第四個參數(shù)簽名后生成的輸出包名。在此命令中,signapk.jar使用公鑰publickey和私鑰privatekey對input.apk安裝包進行簽名,生成output.apk包。signapk源碼位于build/tools/signapk/SignApk.java中。

  完成簽名后APK包中多了一個META-INF文件夾,其中有名為MANIFEST.MF、CERT.SF和CERT.RSA的三個文件。MANIFEST.MF文件中包含很多APK包信息,如manifest文件版本、簽名版本、應用程序相關屬性、簽名相關屬性等。CERT.SF是明文的簽名證書,通過采用私鑰進行簽名得到。CERT.RSA是密文的簽名證書,通過公鑰生成的。MANIFEST.MF、CERT.SF和CERT.RSA三個文件所使用的公鑰和私鑰的生成可以通過 development/tools/make_key 來獲得。下面分別介紹MANIFEST.MF、CERT.SF和CERT.RSA三個文件的生成方法。

(1)生成MANIFEST.MF文件

生成MANIFEST.MF是對APK包中所有未簽名文件逐個用算法SHA1進行數(shù)字簽名,再對數(shù)字簽名信息采用Base64進行編碼,最后將編完碼的簽名寫入MANIFEST.MF文件中。添加數(shù)字簽名到manifest文件通過調(diào)用addDigestsToManifest方法實現(xiàn),具體代碼如下:

(簡言之:MANIFESt.MF 文件中的內(nèi)容就是通過遍歷apk中所有文件(entry),逐一生成SHA-1數(shù)字簽名,然后通過Base64編碼轉(zhuǎn)碼

  1. private static Manifest addDigestsToManifest(JarFile jar)  
  2. {  
  3.  ……  
  4.  //遍歷update.apk包中所有文件  
  5.  //得到簽名文件內(nèi)容  
  6.  InputStream data = jar.getInputStream(entry);  
  7.  
  8.  //更新文件內(nèi)容  
  9.  while ((num = data.read(buffer)) > 0) {  
  10.   md.update(buffer, 0, num);  
  11.  }  
  12.  ……  
  13.     //進行SHA1簽名,并采用Base64進行編碼  
  14.  attr.putValue("SHA1-Digest", base64.encode(md.digest()));  
  15.  output.getEntries().put(name, attr);  
  16.  ……  
  17. }  

需要說明,生成MANIFEST.MF使用了SHA1算法進行數(shù)字簽名,SHA1是一種Hash算法,兩個不同的信息經(jīng)Hash運算后不會產(chǎn)生同樣的信息摘要,由于SHA1是單向的,所以不可能從消息摘要中復原原文。如果惡意程序改變了APK包中的文件,那么在進行APK安裝校驗時,改變后的摘要信息與MANIFEST.MF的檢驗信息不同,應用程序便不能安裝成功。


(2)生成CERT.SF文件

在生成MANIFEST.MF文件之后,用SHA1-RSA算法對其進行私鑰簽名(使用SHA1-RSA算法,用私鑰對MANIFEST.MF摘要文件簽名,并對其中每個文件摘要簽名),便生成CERT.SF。具體代碼如下:

  1. Signature signature = Signature.getInstance("SHA1withRSA");  
  2. signature.initSign(privateKey);  
  3. je = new JarEntry(CERT_SF_NAME);  
  4. je.setTime(timestamp);  
  5. outputJar.putNextEntry(je);  
  6. writeSignatureFile(manifest, newSignatureOutputStream(outputJar, signature)); 

RSA是目前最有影響力的公鑰加密算法,是一種非對稱加密算法、能夠同時用于加密和數(shù)字簽名。由于RSA是非對稱加密算法,因此用私鑰對生成MANIFEST.MF的數(shù)字簽名加密后,在APK安裝時只能使用公鑰才能解密它。

(3)生成CERT.RSA文件

生成CERT.RSA文件與生成CERT.SF文件不同之處在于,生成CERT.RSA文件使用了公鑰文件。CERT.RSA文件中保存了公鑰以及所用的采用加密算法等信息。具體代碼如下:

  1. je = new JarEntry(CERT_RSA_NAME);  
  2. je.setTime(timestamp);  
  3. outputJar.putNextEntry(je);  
  4. writeSignatureBlock(signature, publicKey, outputJar); 

通過以上對Android應用程序簽名的代碼分析,可以看出Android系統(tǒng)通過對第三方APK包進行簽名,達到保護系統(tǒng)安全的目的。應用程序簽名主要用于對開發(fā)者身份進行識別,達到防范惡意攻擊的目的,但不能有效地限制應用程序被惡意修改,只能夠檢測應用程序是否被修改過,如果應用程序被修改應該再采取相應的應對措施。


本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
App瘦身最佳實踐(上)
APK簽名校驗繞過
Android 新增的v1、v2、v3簽名詳解
Android APK 快速簽名——優(yōu)化打包時間
Android應用程序簽名和權限增強應用程序安全性
android數(shù)字簽名
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服