本文假定你已經熟練掌握了iOS建立證書,釋出app以及真機除錯
資訊傳輸如何防止被竊聽?

怎麼加密?
-
對稱加密 加解密同一金鑰,速度快,但無法解決金鑰共享問題
-
非對稱加密 用於加密的金鑰(公鑰)可以公開解決了金鑰共享問題,加密速度慢。
所以使用混合密碼

混合密碼的問題
接收者的公鑰是公開的,任何人都可以向接受者發訊息,會衍生以下問題
- 訊息被篡改
- 偽裝傳送者
- 傳送者否認傳送訊息
如何解決?數字簽名
注意:公鑰和私鑰是成對的,它們互相解密,加解密可以反過來;可以被公開的那個叫 公鑰 。

以上有個缺點就是如果明文訊息很大,那麼對於簽名的加解密過程以及最終的比對都是災難性的資源消耗。
如何解決數字簽名的明文訊息過大問題? 單向雜湊函式
- 根據任意長度的訊息,計算出固定長度的雜湊值
- 計算速度快,能快速計算出雜湊值
- 訊息不同,雜湊值也不同
- 具備單向性,不會逆向出明文 基於以上特點,改進一下:

單向雜湊函式包含:MD4,MD5,SHA1等,有關雜湊函式更多內容請檢視 雜湊函式
使用 混合密碼 加密明文,結合數字簽名以後的流程如下

這樣看起來是不是比較完美了,事實上還存在 公鑰 (簽名用)被偽造的風險。偽造者自己生成 金鑰對 再拿到接受者的 公鑰 就可以給接收者發假訊息了。
PS:我們回頭看一下簽名的加密設計方式、私鑰加密,公鑰解密。如果跟普通的加密用法一樣:私鑰解密、公鑰假面,行不行?答案是否定的,因為誰都能拿到公鑰,用公鑰加密就無法確認傳送者的身份了。
如何防止數字證書的公鑰被偽造?證書
- 什麼是證書? 權威機構 通過對證書申請者提交認證的公鑰施加數字簽名並加上申請者的一些個人資訊如郵箱,而生成證書。CA就是這樣的一個權威機構,也存在一些提供認證服務盈利的企業。
為了方便比對我們在混合密碼結合數字證書的流程圖中只加上 混合密碼公鑰的證書認證,如下圖

那麼iOS的簽名機制是這樣的麼?
不是的,只是用到的原理類似,iOS簽名機制沒這麼複雜,因為只是簽名沒有加密。 還是來直接看圖吧:

事實上,在簽名當中還需要帶有 一些額外的資訊,比如:
- 確定唯一app的資訊(appi)
- 該app許可權相關資訊,如keychain可訪問組資訊
- 非釋出環境的 限制的可安裝裝置列表資訊
至於為什麼需要這些資訊,這裡不做過多解釋,建立過證書的同學應該很熟悉。這些資訊都放在了mobileprovision
檔案當中了。
那麼為何不直接放到證書當中去呢?畢竟多一個檔案需要再次簽名。
我們知道,一個證書是可以供同一開發者多個app使用的,如果把app相關的資訊直接放到證書裡面,對於多個app 就需要 建立多個證書,達不到證書公用的目的。
最終完整的簽名流程如下
