本文假定你已經熟練掌握了iOS創建證書,發佈app以及真機調試
信息傳輸如何防止被竊聽?
怎麼加密?
-
對稱加密
加解密同一密鑰,速度快,但無法解決密鑰共享問題 -
非對稱加密
用於加密的密鑰(公鑰)可以公開解決了密鑰共享問題,加密速度慢。
所以使用混合密碼
混合密碼的問題
接收者的公鑰是公開的,任何人都可以向接受者發消息,會衍生以下問題
- 消息被篡改
- 僞裝發送者
- 發送者否認發送消息
如何解決?數字簽名
注意:公鑰和私鑰是成對的,它們互相解密,加解密可以反過來;可以被公開的那個叫 公鑰 。
數字簽名是驗證消息的合法性和確定發送人(一個私鑰對應一個發送者,拿該發送者的公鑰來驗證即可)。
以上有個缺點就是如果明文消息很大,那麼對於簽名的加解密過程以及最終的比對都是災難性的資源消耗。
如何解決數字簽名的明文消息過大問題? 單向散列函數
- 根據任意長度的消息,計算出固定長度的散列值
- 計算速度快,能快速計算出散列值
- 消息不同,散列值也不同
- 具備單向性,不會逆向出明文
基於以上特點,改進一下:
單向散列函數包含:MD4,MD5,SHA1等,有關散列函數更多內容請查看 哈希函數
使用 混合密碼 加密明文,結合數字簽名以後的流程如下
這樣看起來是不是比較完美了,事實上還存在 公鑰 (簽名用)被僞造的風險。僞造者自己生成 密鑰對 再拿到接受者的 公鑰 就可以給接收者發假消息了。
PS:我們回頭看一下簽名的加密設計方式、私鑰加密,公鑰解密。如果跟普通的加密用法一樣:私鑰解密、公鑰假面,行不行?答案是否定的,因爲誰都能拿到公鑰,用公鑰加密就無法確認發送者的身份了。
如何防止數字證書的公鑰被僞造?證書
- 什麼是證書?
權威機構 通過對證書申請者提交認證的公鑰施加數字簽名並加上申請者的一些個人信息如郵箱,而生成證書。CA就是這樣的一個權威機構,也存在一些提供認證服務盈利的企業。
爲了方便比對我們在混合密碼結合數字證書的流程圖中只加上 混合密碼公鑰的證書認證,如下圖
那麼iOS的簽名機制是這樣的麼?
不是的,只是用到的原理類似,iOS簽名機制沒這麼複雜,因爲只是簽名沒有加密。
還是來直接看圖吧:
事實上,在簽名當中還需要帶有 一些額外的信息,比如:
- 確定唯一app的信息(appi)
- 該app權限相關信息,如keychain可訪問組信息
- 非發佈環境的 限制的可安裝設備列表信息
至於爲什麼需要這些信息,這裏不做過多解釋,創建過證書的同學應該很熟悉。這些信息都放在了mobileprovision
文件當中了。
那麼爲何不直接放到證書當中去呢?畢竟多一個文件需要再次簽名。
我們知道,一個證書是可以供同一開發者多個app使用的,如果把app相關的信息直接放到證書裏面,對於多個app 就需要 創建多個證書,達不到證書公用的目的。
最終完整的簽名流程如下