iOS 中的代碼簽名(一)—— 數字簽名基本概念

在繼續深刻了解以前,首先要了解一些關於數字簽名的基本概念,關於這些基本概念,阮一峯的這篇博客已經作了很是好的解釋,能夠先移步一看。html

若是用 A 來表示文章中的鮑勃,B 來表示蘇珊,Z 來表示道格,那麼文章最後的所描述的狀況能夠用下圖來表示:git

enter image description here

在阮一峯的文章中,貌似到這裏就已經結束了,Z 是不管如何都沒法竊取和修改 A、B 之間發送的信息了。然而實際狀況並無這麼簡單,在有了 CA 的狀況下,Z 依舊能夠去竊取 A、B 之間的信息。安全

若是 Z 得到了 CA 的私鑰,那麼 Z 就能夠用 CA 的公鑰首先將信息解密,而後換成本身的信息,而後再用 CA 的私鑰從新加密,這樣一來,B 依舊獲得了錯誤的信息。加密

enter image description here

因此爲了防止這種狀況發生,通常的 CA 都會想進各類辦法去保證本身的私鑰的安全,由於一旦 CA 的私鑰泄露,CA 就徹底沒有信任度可言。對於通常的 Z 來講,這種方式的成本比較大,因此他們會想另一種方式:假裝成 CA。spa

若是 Z 假裝成了 CA,那麼他就分別給 A、B 本身的證書,讓 A、B 錯誤的信任了本身,覺得本身是萬無一失的。htm

enter image description here

那麼這種狀況下,保證 A、B 之間信息傳遞安全的重點就在於,如何保證 A、B 和 CA 之間的信息傳遞是安全的不會被篡改的。仔細想一想,保證 A、B 之間的信息安全其實和保證 CA 與 A、B 之間的信息安全是同樣的,所以,CA 和 A、B 之間的通訊依舊使用了 A、B 之間的飛遁陳加密方式。blog

這個時候,有意思的事情就來了:CA 爲了保證和 A、B 之間信息傳遞安全,必須找一個另一個 CA 來確保本身和 A、B 之間信息傳遞的安全,而另一個 CA 單靠本身也沒法保證和 A、B 之間信息傳遞的安全,他也必須再找一個 CA 來保證安全。這樣子就產生了一個問題:在當前這套機制中,除非找到一個能夠獨立確保信息傳遞的安全的 CA,這套機制才能完美無缺,不然這種依賴關係就會一直傳遞下去。ip

在上面這個過程當中,各個 CA 產生了一種鏈式的依賴關係,一樣 CA 所簽發的證書也產生了一種鏈式的依賴關係,一個證書必須被其餘的 CA 簽發的證書的信任後(所謂信任就是指經過其餘 CA 的證書確保了獲取當前 CA 證書的過程是安全的),纔是可信的。這種鏈式的信任關係就叫作證書的信任鏈rem

爲了保證這套機制可以完美無缺,一種特殊的 CA 的產生了—— Root CA ,A、B 在出生的時候就會帶着 Root CA 的證書,這樣就確保了和 Root CA 之間的通訊是絕對安全的;在信任了 RootCA 的證書(通常被稱做根證書)以後,RootCA 信任的 CA 也能夠安全的和 A、B 進行通訊了。在這之後,A、B 終於能夠放心的進行通訊了。這種機制保證了接受方能夠得知接受到的信息是不是發送方發出的原始信息。get

相關文章
相關標籤/搜索