原文 http://Joywii.github.io/blog/2016/03/02/iosqian-ming-shou-quan-ji-zhi/html
幾個重要的概念ios
1. 非對稱加密git
非對稱加密算法須要兩個密鑰: 公開密鑰(publickey
)和 私有密鑰(privatekey)
。公開密鑰與私有密鑰是一對,若是用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;若是用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密。(私鑰是要保密的,公鑰能夠公開) RSA
是目前最有影響力的公鑰加密算法,它可以抵抗到目前爲止已知的絕大多數密碼攻擊,已被ISO推薦爲公鑰數據加密標準。 RSA
是以三個發明者的姓氏首字母組成的。 github
2. 摘要算法算法
數據摘要算法是密碼學算法中很是重要的一個分支,它經過對全部數據提取指紋信息以實現數據簽名、數據完整性校驗等功能,因爲其不可逆性,有時候會被用作敏感信息的加密。數據摘要算法也被稱爲哈希(Hash)算法、散列算法。 摘要算法也能夠理解爲將任意長度的數據,經過一個算法,獲得一個固定長度的數據。典型的摘要算法,好比大名鼎鼎的 MD5
和 SHA
。 安全
3. 數字簽名app
數字簽名就是利用 非對稱加密
和 摘要算法
來傳輸數據,保證數據的 完整性
和 合法性
。驗證過程以下: 1. 發送方使用給一個摘要算法( MD5
)獲得要發送數據的摘要,而後用本身的私鑰和一個非對稱加密算法( RSA
)對獲得的摘要加密,獲得加密後的數據,而後將 要發送的數據
、 加密後的數據
、 摘要算法
和 加密算法
一同發送給接收方。 2. 接收方接收到數據後,根據指定的摘要算法( MD5
)獲得實際要傳輸的數據的摘要,而後在根據指定的加密算法( RSA
)和已有的公鑰解密獲得加密數據解密後的數據,最後比較解密後的數據和獲得的摘要是否相同,若是相同就說明實際要傳輸的數據是完成的合法的。 ide
4. 數字證書ui
數字證書就是經過數字簽名方式來傳輸的一段數據,iOS開發中的數字證書是Apple Worldwide Developer Relations Certification Authority(WWDR)證書認證中心數字簽名過的數據,表面上咱們看到的就是鑰匙串中的證書,實際WWDR數字簽名後的證書包含如下內容:加密
整個過程的前提是已經購買了蘋果的開發者帳號(\$99或\$299)。而且安裝了 Xcode
,由於安裝 Xcode
的過程當中會自動安裝蘋果的開發者根證書( Apple Worldwide Developer Relations Certification Authority
)。這證書包含了蘋果CA的 公鑰
。有了這個公鑰,咱們和Apple就能夠進行互信的信息傳遞。整個過程大體以下:
一. 證書申請
用咱們本身的機器生成 CertificateSigningRequest.certSigningRequest
文件,在生成的過程當中會產生一對公鑰和私鑰,私鑰已經保存在咱們的機器上,這個文件包含了咱們的公鑰,具體內容以下:
私鑰
加密的。 私鑰
對應的公鑰。 上傳 CertificateSigningRequest.certSigningRequest
到 MemberCenter
。 MemberCenter
根據獲取到的 公鑰
和咱們的用戶信息,經過 Apple
本身的私鑰進行數字簽名生成證書,這個證書能夠經過安裝 Xcode
過程當中安裝的根證書進行驗證。具體證書包含內容以下:
下載生成的證書,雙擊安裝就會出如今 鑰匙串
中, 鑰匙串
會根據證書中的公鑰對應上本機器上的私鑰。
二. 打包簽名
在 MemberCenter
上生成 mobileprovision
下載安裝, mobileprovision
包含以下信息:
app
在 MemberCenter
建立的對應的 id
。 經過 Xcode
指定要使用的證書,實際上是 指定了簽名過程當中要使用的 私鑰
,這個私鑰是和證書中的公鑰相對應的。而後指定對應的 mobileprovision
,因爲 mobileprovision
文件中包含了證書,實際上本地證書就是 Xcode
用來指定對應 私鑰
用的。
ipa
包的形式輸出, ipa
的文件結構以下: 三. 驗證安裝
ipa
包,獲取 embedded.mobileprovision
,經過設備上的 Apple
公鑰驗證該文件的完整性和安全性。 embedded.mobileprovision
文件驗證經過,獲取該文件內的用戶證書,再經過設備上的 Apple
公鑰驗證該證書的完整性和安全性。