快速瞭解iOS簽名機制

本文假定你已經熟練掌握了iOS建立證書,發佈app以及真機調試微信

信息傳輸如何防止被竊聽?

加密

怎麼加密?

  • 對稱加密 加解密同一密鑰,速度快,但沒法解決密鑰共享問題app

  • 非對稱加密 用於加密的密鑰(公鑰)能夠公開解決了密鑰共享問題,加密速度慢。函數

因此使用混合密碼

混合密碼系統

混合密碼的問題

接收者的公鑰是公開的,任何人均可以向接受者發消息,會衍生如下問題優化

  • 消息被篡改
  • 假裝發送者
  • 發送者否定發送消息

如何解決?數字簽名

注意:公鑰和私鑰是成對的,它們互相解密,加解密能夠反過來;能夠被公開的那個叫 公鑰加密

數字簽名過程
數字簽名是驗證消息的合法性和肯定發送人(一個私鑰對應一個發送者,拿該發送者的公鑰來驗證便可)。

以上有個缺點就是若是明文消息很大,那麼對於簽名的加解密過程以及最終的比對都是災難性的資源消耗。設計

如何解決數字簽名的明文消息過大問題? 單向散列函數

  • 根據任意長度的消息,計算出固定長度的散列值
  • 計算速度快,能快速計算出散列值
  • 消息不一樣,散列值也不一樣
  • 具有單向性,不會逆向出明文 基於以上特色,改進一下:

優化後的簽名過程

單向散列函數包含:MD4,MD5,SHA1等,有關散列函數更多內容請查看 哈希函數調試

使用 混合密碼 加密明文,結合數字簽名之後的流程以下 code

混合密碼結合數字簽名

這樣看起來是否是比較完美了,事實上還存在 公鑰 (簽名用)被僞造的風險。僞造者本身生成 密鑰對 再拿到接受者的 公鑰 就能夠給接收者發假消息了。cdn

PS:咱們回頭看一下簽名的加密設計方式、私鑰加密,公鑰解密。若是跟普通的加密用法同樣:私鑰解密、公鑰假面,行不行?答案是否認的,由於誰都能拿到公鑰,用公鑰加密就沒法確認發送者的身份了。blog

如何防止數字證書的公鑰被僞造?證書

  • 什麼是證書? 權威機構 經過對證書申請者提交認證的公鑰施加數字簽名並加上申請者的一些我的信息如郵箱,而生成證書。CA就是這樣的一個權威機構,也存在一些提供認證服務盈利的企業。

爲了方便比對咱們在混合密碼結合數字證書的流程圖中只加上 混合密碼公鑰的證書認證,以下圖

證書認證

那麼iOS的簽名機制是這樣的麼?

不是的,只是用到的原理相似,iOS簽名機制沒這麼複雜,由於只是簽名沒有加密。 仍是來直接看圖吧:

證書籤名

事實上,在簽名當中還須要帶有 一些額外的信息,好比:

  • 肯定惟一app的信息(appi)
  • 該app權限相關信息,如keychain可訪問組信息
  • 非發佈環境的 限制的可安裝設備列表信息

至於爲何須要這些信息,這裏不作過多解釋,建立過證書的同窗應該很熟悉。這些信息都放在了mobileprovision文件當中了。 那麼爲什麼不直接放到證書當中去呢?畢竟多一個文件須要再次簽名。 咱們知道,一個證書是能夠供同一開發者多個app使用的,若是把app相關的信息直接放到證書裏面,對於多個app 就須要 建立多個證書,達不到證書公用的目的。 最終完整的簽名流程以下

iOS簽名流程


筆者和朋友作了一個小副業,微信公衆號,替你省錢,分享還能賺點小錢; 幫忙關注,支持一下,權當請我喝咖啡,謝謝。 若是很差用,能夠取消。

微信公衆號
相關文章
相關標籤/搜索