代碼簽名

原文地址:(代碼簽名)

最近看了objc.io上第17期中的文章 《Inside Code Signing》 對應的中文翻譯版 《代碼簽名探析》 ,受益頗深,對iOS代碼簽名機制有了進一步的認識。想了解詳細內容建議大家還是去看原文好了。

下面是對此文章的理解再結合自己之前對該部分的認識寫出的學習筆記。本文的前提是已經對非對稱加密有了一定的了解。

一、數字簽名(digital signature)

對指定信息使用哈希算法,得到一個固定長度的信息摘要,然后再使用 私鑰 (注意必須是私鑰)對該摘要加密,就得到了數字簽名。所謂的代碼簽名就是這個意思。

二、數字證書(digital certificate)

  • 證書生成

開 發者在申請iOS開發證書時,需要通過keychain生成一個CSR文件(Certificate Signing Request),提交給蘋果的 Apple Worldwide Developer Relations Certification Authority(WWDR)證書認證中心進行簽名,最后從蘋果官網下載并安裝使用。這個過程中還會產生一個私鑰。

  • 證書組成

經過WWDR數字簽名后的數字證書包含兩大部分:

1.證書本身

包含用戶的公鑰、用戶個人信息、證書頒發機構信息、證書有效期等信息。

2.證書簽名

WWDR將上述證書本身內容的使用哈希算法得到一個固定長度的信息摘要,然后使用自己的私鑰對該信息摘要加密生成數字簽名。

  • 證書使用

iOS 系統原本就持有WWDR的公鑰,系統首先會對證書內容通過指定的哈希算法計算得到一個信息摘要;然后使用WWDR的公鑰對證書中包含的數字簽名解密,從而 得到經過WWDR的私鑰加密過的信息摘要;最后對比兩個信息摘要,如果內容相同就說明該證書可信。

在驗證了證書是可信的以后,iOS系統就可以獲取到證書中包含的開發者的公鑰,并使用該公鑰來判斷代碼簽名的可用性了。

  • 證書存在的意義

通過證書使用過程可以看出,證書本身只是一個中間媒介,iOS系統對證書并不關心,它其實只想要證書中包含的開發者的公鑰!!

  • 但是開發者怎么才能證明公鑰是自己的呢?iOS安全系統怎么才能相信這個公鑰就是這個開發者的呢?

不 管是哪一個開發者對iOS的安全系統說,這個公鑰就是我的,系統是都不相信的,即系統對開發者有著百分之百的不信任感。但是iOS安全系統對自家的 WWDR是可信任的,蘋果將WWDR的公鑰內置在了iOS系統中。有了證書,iOS安全系統只需要通過WWDR的公鑰就可以獲取到任何一個開發者的可信任 的公鑰了,這就是證書存在的意義!!

三、公鑰(public key)

公鑰被包含在數字證書里,數字證書又被包含在描述文件(Provisioning File)中,描述文件在應用被安裝的時候會被拷貝到iOS設備中。

iOS安全系統通過證書就能夠確定開發者身份,就能夠通過從證書中獲取到的公鑰來驗證開發者用該公鑰對應的私鑰簽名后的代碼、資源文件等有沒有被更改破壞,最終確定應用能否合法的在iOS設備上合法運行。

四、私鑰(private key)

每個證書(其實是公鑰)都對應有一個私鑰,

私鑰會被用來對代碼、資源文件等簽名。只有開發證書和描述文件是沒辦法正常調試的,因為沒有私鑰根本無法簽名。

此后的內容基本都是從《代碼簽名探析》摘抄過來的筆記,建議大家看原文好了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容