蘋果認證和公開金鑰私密金鑰加密

來源:互聯網
上載者:User

標籤:位置   bsp   相同   運行   內容   tail   程式打包   iphone   特定   

今天看了點關於公私密金鑰加密的內容,趕快記下省的忘記了。

這裡有幾個概念:公開金鑰,私密金鑰,加密,認證,認證中心(CA),數位憑證。

公開金鑰和私密金鑰是屬於非對稱性加密,公開金鑰和私密金鑰是完全不同的,但是相互對應的。一把私密金鑰只能對應一把公開金鑰。顧名思義,公開金鑰是對外開放的,所有人都可以獲得,私密金鑰是自己保管的。

加密與認證

基於公開金鑰的加密

       加密的目的是保證密文只能由特定人讀取,其他人都不能獲知裡面的內容。公開金鑰的作用就是加密。舉例說明:Alices發資訊給Bob。她會用Bob給的公開金鑰對明文進行加密。Bob得到密文後,用自己的私密金鑰解密。這個過程保證即使其他人得到了密文也沒法看。

圖1

基於私密金鑰的認證

       私密金鑰的作用是鑒別使用者的真偽。還是上面的例子,Alices給Bob發信。但是Bob的公開金鑰很多人都有,如何知道收到的信是Alices發的呢?就要靠私密金鑰認證。Alices給Bob發信的時候可以附帶一段資訊,然後通過自己的私密金鑰把這段資訊加密。Bob收到信後,首先用Alices的公開金鑰就附帶資訊進行解密,如果正確就說明這封信確實是Alices發的,然後再用自己的私密金鑰解密信的具體內容。

 

圖2

認證中心(CA)與數位憑證

       認證中心的作用是保證公開金鑰的正確。比如:Alices想給Bob發一封絕密的信件,而此時,Alices和Bob都沒有對方的公開金鑰。這時,Bob給Alices的公開金鑰,Alices如果知道是Bob給的而不是其他人冒充給的?怎麼辦?!這時就要CA出馬了。Bob提交自己資訊和公開金鑰給CA。CA通過自己的私密金鑰加密這些資訊,產生一個數位憑證。Bob把這個數位憑證給Alices,Alices通過CA的公開金鑰對數位憑證解密,得到公開金鑰就是Bob的公開金鑰。

        個人感覺非對稱式加密一個很重要的一環就是CA的作用。首先,CA要保證它的公開金鑰不能被替換,否則都別玩了。這個估計不難,確定個網址,只有從這下載的才是CA的公開金鑰。或是其他更進階的措施。其次,CA要保證對個人的認證。比如Tom提交個人資訊和公開金鑰後CA就要保證不能冒充為Bob的。這個估計靠人或其他措施,總之能保證。這些都是CA的事,我們不管。

圖3

蘋果的簽名

        重頭戲來了,下面就說一下蘋果的簽名與上面的關係。搞了這麼久的iOS開發,經常被開發中各種認證給搞暈,這真是一個大坑,但是不得不過。      

一、數位簽章(digital signature)

對指定資訊使用雜湊演算法,得到一個固定長度的資訊摘要,然後再使用 私密金鑰 (注意必須是私密金鑰)對該摘要加密,就得到了數位簽章。所謂的程式碼簽署就是這個意思。

二、數位憑證(digital certificate)

認證產生

開發人員在申請iOS開發認證時,需要通過keychain產生一個CSR檔案(Certificate Signing Request),提交給蘋果的 Apple Worldwide Developer Relations Certification Authority(WWDR)認證認證中心進行簽名,最後從蘋果官網下載並安裝使用。這個過程中還會產生一個私密金鑰,認證和私密金鑰在keychain中得位置

圖4

認證組成

經過WWDR數位簽章後的數位憑證長這個樣子:

其中包含兩大部分:

· 認證本身

包含使用者的公開金鑰、使用者個人資訊、憑證授權單位資訊、認證有效期間等資訊。

· 認證簽名

WWDR將上述認證本身內容的使用雜湊演算法得到一個固定長度的資訊摘要,然後使用自己的私密金鑰對該資訊摘要加密產生數位簽章,整個過程:

認證使用

iOS系統原本就持有WWDR的公開金鑰(這裡就保證了CA公開金鑰的正確性),系統首先會對認證內容通過指定的雜湊演算法計算得到一個資訊摘要;然後使用WWDR的公開金鑰對認證中包含的數位簽章解密,從而得到經過WWDR的私密金鑰加密過的資訊摘要;最後對比兩個資訊摘要,如果內容相同就說明該認證可信。整個過程:

在驗證了認證是可信的以後,iOS系統就可以擷取到認證中包含的開發人員的公開金鑰,並使用該公開金鑰來判斷程式碼簽署的可用性了。

認證存在的意義

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

但是開發人員怎麼才能證明公開金鑰是自己的呢?iOS安全系統怎麼才能相信這個公開金鑰就是這個開發人員的呢?

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

三、公開金鑰(public key)

公開金鑰被包含在數位憑證裡,數位憑證又被包含在描述檔案(Provisioning File)中,描述檔案在應用被安裝的時候會被拷貝到iOS裝置中。

iOS安全系統通過認證就能夠確定開發人員身份,就能夠通過從認證中擷取到的公開金鑰來驗證開發人員用該公開金鑰對應的私密金鑰簽名後的代碼、資源檔等有沒有被更改破壞,最終確定應用能否合法的在iOS裝置上合法運行。

四、私密金鑰(private key)

每個認證(其實是公開金鑰)都對應有一個私密金鑰,

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

五、provisioning profile的產生

還記得剛開始為了產生這玩意也費了很大勁。首先通過鑰匙串產生一個csr檔案,把這個檔案提交給蘋果開發中心,產生一個cer檔案。其實這個過程就是把自己的公開金鑰給Apple,至於上面提到的如果保證公開金鑰的確定性,就靠進入開發中心的帳號和密碼了,如果這玩意泄露了,那就誰也無能為力。

下載安裝cer檔案後,就會在鑰匙串中多出個選項,4所示。下面是自己的私密金鑰,這個很重要。別問私密金鑰存在哪,我也不知道,但是它能匯出為p12檔案。

       cer搞定後就是在開發人員中心添加appID,裝置等,不詳述了。 最後到產生provisioning profile。首先你要選類型,就是用於開發還是用於發布,其次是appID。下面的選項很重要,是選擇certificates,這個就是選擇你要包含的公開金鑰,它是用來加密用的,我一般會都選。如果是開發的話,下面就是選擇裝置了,然後命個名就完事了。設計到加密的就是certificates的選擇。

      所以開發的時候私密金鑰也就是P12檔案和provisioning profile匹配是最重要的。私密金鑰對代碼進行加密,公開金鑰解密。整個過程就是認證的過程,保證了,iOS裝置安裝的程式是經過蘋果審核同意的。這也就是蘋果費這麼大勁的目的。

        在Xcode6中codesing和provisioning配置都是可選擇的,選擇一定的匹配,否則要不是真機調不了,要不就是上傳不成功。

        簡述一下整個過程:首先開發人員上傳csr檔案,即把公開金鑰給蘋果。產生provisioning profile時選擇對應的公開金鑰。然後下載安裝相應的provisioning檔案。在程式打包時,會用私密金鑰就代碼進行加密,然後把provisioning檔案包含到app檔案中。當iOS裝置安裝應用時,首先用CA的公開金鑰解密出開發人員的公開金鑰,然後再用開發人員的公開金鑰解密出代碼,完成安裝。

       看來蘋果為了保證代碼的來源,也是蠻拼的!

http://blog.csdn.net/electronmc/article/details/45014591

蘋果認證和公開金鑰私密金鑰加密

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.