<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    淺談程序的數字簽名

    VSole2022-08-17 08:31:54

    理論基礎

    數字簽名它是基于非對稱密鑰加密技術與數字摘要算法技術的應用,它是一個包含電子文件信息以及發送者身份,并能夠鑒別發送者身份以及發送信息是否被篡改的一段數字串。

    一段數字簽名數字串,它包含電子文件經過Hash編碼后產生的數字摘要,即一個Hash函數值以及發送者的公鑰和私鑰三部分內容。發送方通過私鑰加密后發送給接收方,接收方使用公鑰解密,通過對比解密后的Hash函數值確定數據電文是否被篡改。

    數字簽名(又稱公鑰數字簽名)是只有信息的發送者才能產生的別人無法偽造的一段數字串,這段數字串同時也是對信息的發送者發送信息真實性的一個有效證明。

    它是一種類似寫在紙上的普通的物理簽名,但是在使用了公鑰加密領域的技術來實現的,用于鑒別數字信息的方法。

    (圖片來源網絡)

    數字簽名方案是一種以電子形式存儲消息簽名的方法。一個完整的數字簽名方案應該由兩部分組成:簽名算法和驗證算法。

    (圖片來源于網絡)

    android數字簽名

    在android的APP應用程序安裝過程中,系統首先會檢驗APP的簽名信息,如果發現簽名文件不存在或者校驗簽名失敗,系統則會拒絕安裝,所以APP應用程序在發布到市場之前一定要進行簽名。

    OTA升級中也必須使用到數字簽名進行校驗,在應用版本迭代必須使用相同的證書簽名,不然會生成一個新的應用,導致更新失敗。在更新過程中使用相同的證書簽名的應用可以共享代碼和功能

    App安裝過程中簽名檢驗的流程:

    1、檢查 APP中包含的所有文件,對應的摘要值與 MANIFEST.MF 文件中記錄的值一致。

    2、使用證書文件(RSA 文件)檢驗簽名文件(SF文件)是否被修改過。

    3、使用簽名文件(SF 文件)檢驗 MF 文件沒有被修改過。

    (圖片來源網絡)

    CERT.RSA包含數字簽名以及開發者的數字證書。CERT.RSA里的數字簽名是指對CERT.SF的摘要采用私鑰加密后的數據;

    MANIFEST.MF文件中是APP中每個文件名稱和摘要SHA256;

    CERT.SF則是對MANIFEST.MF的摘要

    android中的數字簽名有2個主要作用:

    1、能定位消息確實是由發送方簽名并發出來的,其他假冒不了發送方的簽名。

    2、確定消息的完整性,簽名它代表文件的特征,文件發生變化,數字簽名的數值也會發送變化。

    Anroid中的簽名證書不需要權威機構認證,一般是開發者的自簽名證書。所以簽名信息中會包含有開發者信息,在一定程度上可以防止應用被破解二次打包成山寨的APP應用,所以簽名信息也是用于對APP包防二次打包的一個校驗功能點。

    (上圖是android studio中自創建簽名的界面)

    在 Android Studio中通過上圖創建簽名信息后,最終會生成一個 .jks 的文件,它是用作證書和私鑰的二進制文件。

    (上圖是反編譯工具直接查看app的簽名信息),也可以通過jarsigner,jadx,jeb等工具查看app的簽名信息。

    從上圖中可以看到這個APP采用了V1和V2簽名信息,Android中的簽名目前主要由V1、V2、V3、V4組成的。

    v1簽名方案:基于 JAR 簽名,簽名完之后是META-INF 目錄下的三個文件:MANIFEST.MF、CERT.SF、CERT.RSA。通過這三個文件校驗來確保APP中的每個文件都不被改動。

    APK v1的缺點就是META-INF目錄下的文件并不在校驗范圍內,所以之前多渠道打包等都是通過在這個目錄下添加文件來實現的。

    V2簽名方案:它是在Android 7.0系統中引入,為了使 APP可以在 Android 6.0 (Marshmallow) 及更低版本的設備上安裝,應先使用 JAR 簽名功能對 APP 進行簽名,然后再使用 v2 方案對其進行簽名。它是一個全文件的簽名方案,它能夠發現對 APP的受保護部分進行的所有更改,從而有助于加快驗證速度并增強完整性保證。

    V2簽名,它會在 APP文件中插入一個APP簽名分塊,該分塊位于“ZIP 中央目錄”部分之前并緊鄰該部分。在“APP簽名分塊”內,v2 簽名和簽名者身份信息會存儲在 APK 簽名方案 v2 分塊中。

    V3簽名方案:它是Android 9.0系統中引入,基于 v2簽名的升級,Android 9 支持 APK密鑰輪替,這使應用能夠在 APK 更新過程中更改其簽名密鑰。為了實現輪替,APK 必須指示新舊簽名密鑰之間的信任級別。v3 在 APK 簽名分塊中添加了有關受支持的 SDK 版本和 proof-of-rotation 結構的信息。

    下面鏈接官方對V3簽名相關的說明

    https://source.android.google.cn/security/apksigning/v3

    APK 密鑰輪替功能可以參考:

    https://developer.android.google.cn/about/versions/pie/android-9.0

    V4簽名方案:它是在Android 11.0 引入,用來支持 ADB 增量 APK 安裝。通過 APK 簽名方案 v4 支持與流式傳輸兼容的簽名方案。v4 簽名基于根據 APK 的所有字節計算得出的 Merkle 哈希樹。

    Android 11 將簽名存儲在單獨的 .apk.idsig 文件中。

    下面2個鏈接是官方對V4簽名的相關說明

    https://source.android.google.cn/security/apksigning/v4

    https://developer.android.google.cn/about/versions/11/features

    從上面的簽名信息截圖中,也可以看到android的簽名采用的是X.509V3國際標準。

    這個標準下約定了簽名證書必須包含以下的內容。

    1、證書的序列號

    2、證書所使用的簽名算法

    3、證書的發行機構名稱,命名規則一般采用X.500格式

    4、證書的有效期

    5、證書的所有人的名稱

    6、證書所有人的公開密鑰

    7、證書發行者對證書的簽名

    從上圖APP的簽名信息中數字簽名要包含摘要加密算法:MD5、SHA-1、SHA-256

    MD5是一種不可逆的加密算法。

    SHA1:它是由NISTNSA設計為同DSA一起使用的,它對長度小于264的輸入,產生長度為160bit的散列值,因此抗窮舉(brute-force)性更好。

    SHA-256 是 SHA-1 的升級版,現在 Android 簽名使用的默認算法都已經升級到 SHA-256 了。

    摘要算法中又涉及到對稱加密和非對加密

    對稱加密就是在加密和解密過程中需要使用同一個密鑰

    非對稱加密使用公鑰/私鑰中的公鑰來加密明文,然后使用對應的私鑰來解密密文。

    APP中如果沒采用加固保護,容易出現二次打包重新簽名的山寨APP。

    APP中二次打包流程:破解者需要對APK文件做反編譯分析,反編譯為smali代碼,并對某些關鍵函數或者資源進行修改,再回編譯為apk文件并重簽名。

    常見的對抗二次打包的方案:

    1、簽名校驗

    原理:二次打包會篡改簽名,通過簽名前后的變化可以檢測是否被二次打包;但是這種很容易被hook掉。

    2、文件校驗

    原理:二次打包前后apk關鍵文件hash值比較,判斷是否被修改;但是這種很容易被hook掉。

    3、核心函數轉為jni層實現

    原理:java層代碼轉為jni層實現,jni層代碼相對而言篡改難度更大;寫大量反射代碼降低了開發效率。

    window數字簽名

    Window的數字簽名是微軟的一種安全保障機制。

    Window數字簽名中的簽名證書用于驗證開發者身份真實性、保護代碼的完整性。用戶下載軟件時,能通過數字簽名驗證軟件來源可信,確認軟件、代碼沒有被非法篡改或植入病毒。所以,軟件開發者會在軟件發行前使用代碼簽名證書為軟件代碼添加數字簽名。

    對于一個Windows的可執行應用程序,簽發數字簽名的時候需要計算的數據摘要并不會是程序文件的全部數據,而是要排除一些特定區域的數據。而這些區域當然和PE文件結構有關,具體地,不管是簽發時還是校驗時計算的hash都會排除一個checksum字段、一個Security數據目錄字段以及數字簽名證書部分的數據。

    Window簽名的RSA算法:通過公鑰與私鑰來判斷私鑰的合法。

    公鑰與私鑰具有對稱性,既可以通過私鑰加密,公鑰解密,以此來論證私鑰持有者的合法身份。也可以通過公鑰加密,私鑰解密,來對私鑰持有者發信息而不被泄露。

    由于在交換公鑰時免不了遭遇中間人劫持,因此window程序的簽名證書,都需要第三方權威機構的認證,并不像android程序一樣開發者可以對自己程序簽發證書。

    (查看某程序的數字簽名信息)

    從上面截圖中看到了摘要算法用到sha1和sha256。

    由于SHA-256更強的安全性,現在SHA-256已經作為代碼簽名證書的行業標準簽名算法。

    從上圖中看到程序擁有2個簽名信息,也就是雙簽名機制。

    雙簽名就是對一個軟件做兩次簽名,先進行SHA1簽名,之后再進行SHA2簽名的做法就叫做雙簽名。雙簽名需要一張支持SHA1和SHA2算法的代碼簽名證書,利用具備雙簽名功能的工具導入申請的代碼簽名證書對軟件或應用程序進行雙簽名,簽發后的軟件或應用程序就支持SHA1和SHA2簽名算法。

    Windows10要求使用SHA2算法簽名,而Windows7(未更新補丁的)因其兼容性只能使用SHA1算法簽名,那么使用一張支持雙簽SHA1和SHA2算法的代碼簽名證書就可以實現。

    軟件簽名校驗的流程圖

    (上圖來源網絡)

    Windows系統驗證簽名流程

    1、系統UAC功能開啟(用戶賬戶控制功能,默認開啟);

    2、程序啟動時,進行CA校驗程序簽名信息;

        2.1、使用同樣算法對軟件產生Hash表

        2.2、使用公鑰產生一個Hash表認證摘要

       2.3、比較程序的Hash表認證摘要 與 自己生成的Hash表認證摘要是否一致。

    3、程序在window系統執行功能。

    數字簽名的驗證過程本質:

    1、通過對要驗證的軟件創建hash數據;

    2、使用發布者的公共密匙來解密被加密的hash數據;

    3、最后比較解密的hash和新獲得的hash,如果匹配說明簽名是正確的,軟件沒有被修改過。

    代碼實現校驗程序是否有簽名,它本質上就是被加密的hash和發布者的數字證書被插入到要簽名的軟件,最后在進行校驗簽名信息。

    (實現判斷程序是否有簽名功能)

    代碼實現可以通過映射文件方式,然后去安裝PE文件結構去讀取,讀取到可選頭中的數據目錄表,通過判斷數據目錄表中

    IMAGE_DIRECTORY_ENTRY_SECURITY的虛擬地址和大小不為空,那么就表示改應用程序有簽名,因為數據簽名都是存在在這個字段中。

    同樣如果要將某個應用程序的簽名信息給抹除了,也是一樣的思路,將數據目錄表中的IMAGE_DIRECTORY_ENTRY_SECURITY的大小和地址都設置為0即可。

    下圖通過PE工具,可以查看這個字段Security的虛擬地址和大小不為空那么表示應用程序經過簽名的。

    小結

    數字簽名不管是在android端還是window端,它都是一種應用程序的身份標志,在安全領域中對應用程序的數字簽名校驗是一個很常見的鑒別真偽的一個手段。

    現在很多殺毒的廠商也都是通過這個數字簽名維度,作為一個該應用程序是否可信程序的校驗,雖然一些安全殺毒廠商簽完名后還是誤報毒,那這只能找廠商開白名單了。

    數字簽名摘要算法
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    淺談程序的數字簽名
    2022-08-17 08:31:54
    發送方通過私鑰加密后發送給接收方,接收方使用公鑰解密,通過對比解密后的Hash函數值確定數據電文是否被篡改。android中的數字簽名有2個主要作用:1、能定位消息確實是由發送方簽名并發出來的,其他假冒不了發送方的簽名。它是一個全文件的簽名方案,它能夠發現對 APP的受保護部分進行的所有更改,從而有助于加快驗證速度并增強完整性保證。
    SHA算法基本認證原理
    2021-09-22 07:46:12
    SHA(Secure Hash Algorithm,安全哈希算法主要適用于數字簽名,也是一種不可逆的MAC算法,但比MD5算法更加安全。目前它有三種主要的版本,即SHA-0、SHA-1、SHA-2和SHA-3。其中SHA-2和SHA-3版本中又有多種不同子分類,如在SHA-2中又根據它們最終所生成的摘要消息長度的不同又包括SHA-224、SHA-256、SHA-384和SHA-512等幾種。
    VPN:MD5認證算法原理
    2021-09-20 10:51:23
    MD5(Message-Digest Algorithm 5,信息摘要算法第5版)是計算機廣泛使用的散列算法(也稱“哈希算法”或“雜湊算法”)之一,采用帶密鑰的運算時,可同時用于消息完整性檢測和消息源身份認證。它是由MD2、MD3和MD4版本一路發展而來,是Ronald Rivest 于1991年設計發布的,用于取代MD4。
    1、基礎知識1.1 對稱加密算法對稱加密算法的特點是加密密鑰和解密密鑰是同一把密鑰K,且加解密速度快,典型的
    隨著互聯網的興起,基于數字證書的PKI技術得到大力發展,經過技術不斷的發展和創新,我國商用密碼產業蓬勃發展。隨著一系列密碼算法標準、密碼算法協議等行業標準的制定和發布,我國商用密碼標準體系逐漸成型。 密評是國家相關法律法規等明確要求的,在數觀天下團隊之前推出的“三方共謀商密生態”系列中我們了解到,大部分甲方公司內部已經根據不同業務進行系統梳理,且陸續在開展各項密評工作。但據目前市場而言,大部分密
    軟件供應鏈安全風險解析 隨著互聯網的迅猛發展,軟件供應鏈安全事件近年來頻繁發生。軟件供應鏈安全具有威脅對象種類多、極端隱蔽、涉及緯度廣、攻擊成本低回報高、檢測困難等特性。軟件供應鏈中的任意環節遭受攻擊,都會引起連鎖反應,甚至威脅到國家網絡安全。
    如何設計消息加密?
    2023-12-22 11:19:17
    如何設計消息加密
    互聯網基礎資源技術協議的安全發展趨勢,值得關注。尤其是目前占據主流地位的傳輸控制協議(TCP)有可能被更安全高效的新協議逐步取代。
    數據報傳輸層安全(Datagram Transport Layer Security,DTLS)協議基于用戶數據報(User Datagram Protocol,UDP)協議套接字(socket),在傳輸層和應用層之間構建了一個端到端的安全通道,保證了傳輸數據的機密性。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类