一、首先,科普一下apk包下的meta-inf目錄當使用jarsigner 對war包進行簽名的時候:我們已經知道的是:android對每乙個apk檔案都會進行簽名,在apk檔案安裝時,系統會對其簽名資訊進行比對,判斷程式的完整性,從而決定該apk檔案是否可以安裝,在一定程度上達到安全的目的。
給定乙個apk檔案,解壓,可以看到乙個meta-info資料夾,在該資料夾下有三個檔案:分別為manifest.mf、cert.sf和cert.rsa。這三個檔案分別表徵以下含義:
(1)manifest.mf:這是摘要檔案。程式遍歷apk包中的所有檔案(entry),對非資料夾非簽名檔案的檔案,逐個用sha1生成摘要資訊,再用base64進行編碼。如果你改變了apk包中的檔案,那麼在apk安裝校驗時,改變後的檔案摘要資訊與manifest.mf的檢驗資訊不同,於是程式就不能成功安裝。
說明:如果攻擊者修改了程式的內容,有重新生成了新的摘要,那麼就可以通過驗證,所以這是乙個非常簡單的驗證。
(2)cert.sf:這是對摘要的簽名檔案。對前一步生成的manifest.mf,使用sha1-rsa演算法,用開發者的私鑰進行簽名。在安裝時只能使用公鑰才能解密它。解密之後,將它與未加密的摘要資訊(即,manifest.mf檔案)進行對比,如果相符,則表明內容沒有被異常修改。
說明:在這一步,即使開發者修改了程式內容,並生成了新的摘要檔案,但是攻擊者沒有開發者的私鑰,所以不能生成正確的簽名檔案(cert.sf)。系統在對程式進行驗證的時候,用開發者公鑰對不正確的簽名檔案進行解密,得到的結果和摘要檔案(manifest.mf)對應不起來,所以不能通過檢驗,不能成功安裝檔案。
(3)cert.rsa檔案中儲存了公鑰、所採用的加密演算法等資訊。
說明:系統對簽名檔案進行解密,所需要的公鑰就是從這個檔案裡取出來的。
結論:從上面的總結可以看出,meta-info裡面的說那個檔案環環相扣,從而保證android程式的安全性。(只是防止開發者的程式不被攻擊者修改,如果開發者的公私鑰對對攻擊者得到或者開發者開發出攻擊程式,android系統都無法檢測出來。)
我們將apk包解包,然後使用命令 keytool -printcert -file cert.rsa 檢視cert.rsa,如圖所示:
答案很明顯,cert.rsa檔案中存放了關於簽名的資訊。
當我們使用如下**獲取證書資訊的時候:
首先是 manifest.mf 檔案中多了幾行,它為 jar 包中的每乙個檔案都生成了乙個資料摘要,這個摘要是從 jar 包中包含的檔案本身計算出來的;其次,多了乙個 ***.sf 檔案,其中的內容也是 jar 包中每個檔案對應的摘要,但是這個摘要是從 manifest.mf 中的資料項計算出來的,它同時包含有針對整個 manifest.mf 檔案計算出的摘要;最後,就是乙個無法直接閱讀的檔案 ***.dsa,從圖中可以看出這個檔案顯示為亂碼,其中的內容就是 *** 的公鑰以及使用 *** 的私鑰對該 jar 檔案進行簽名後的結果。
有了這裡的直觀的印象,我們就對簽名和驗證有了更深入的了解。簽名和驗證是建立在資訊摘要演算法和非對稱加密解密演算法的基礎上的。資料摘要演算法是不可逆的,它只能從資料生成摘要,不能從摘要解密出資料。非對稱加密解密演算法需要公鑰私鑰對,使用私鑰加密的資料只能使用公鑰解密,因此使用私鑰對上一步生成的摘要進行加密,就相當於是簽名了,因為只能通過相應的公鑰進行解密。一般情況下公鑰是通過證書發布出去的,而在上面的例子中,簽名者的公鑰直接放在了 youxia.dsa 檔案中,方便驗證者使用。
證書簽名驗籤以及加密解密
簽名,驗籤的理解 一 公鑰加密 假設一下,我找了兩個數字,乙個是1,乙個是2。我喜歡2這個數字,就保留起來,不告訴你們 私鑰 然後我告訴大家,1是我的公鑰。我有乙個檔案,不能讓別人看,我就用1加密了。別人找到了這個檔案,但是他不知道2就是解密的私鑰啊,所以他解不開,只有我可以用 數字2,就是我的私鑰...
簽名驗籤以及RSA與AES的區別
1.0 encoding gbk 100001022 0test test 2009041611084101 00600 0010530001 2009041612000022 報文簽名 param msg 原始xml資料 public string signmsg string xml throw...
使用Poco庫進行加解密和簽名驗籤
在crypto testsuit src rsatest.h和rsatest.cpp有示例 可以參考。下面是摘自另乙個 上的部分 並茂,感覺講得很好,拿來分享給大家。非對稱加解密過程如圖 如下 include poco crypto rsakey.h include poco crypto rsad...