证书-解决非对称加密的公钥信任问题
個站原文鏈接
非對稱加密存在的問題
非對稱加密已經完美了嗎?
對稱加密解決了信息傳輸的安全問題,但是引出了密鑰配送問題。
非對稱加密通過公鑰加密、私鑰解密的方式,避免了密鑰在配送過程中被盜取。
但使用了非對稱加密,就真的高枕無憂了嗎?
當然不是!
有這樣一句話不知道你是否聽過:網絡時代,你連屏幕對面是人是狗都不知道!
設想熊小貓正和兔小白在網絡上通過公鑰加密的方式聊天,熊小貓怎么確定對面的人真的是兔小白呢?
你可能會回答我:熊小貓用兔小白的公鑰加密信息,假的兔小白沒有兔小白私鑰是無法解密的,那么也不可能和熊小貓聊天。
通信過程如下圖:
沒錯,這就是公鑰加密的特性。但是你有沒有思考過,熊小貓手中用來加密信息的的 “兔public key" 是如何得來的?
嗯,一定是 “兔小白” 發給他的。而問題恰恰就出在這里。
對稱加密的問題
熊小貓手里的公鑰有沒有可能并不是兔小白的公鑰?是不是細思極恐,后背發涼?
假如攻擊者偽裝成兔小白,把他的公鑰發給了熊小貓,那么會發生什么事情呢?
熊小貓使用假冒兔小白的公鑰對信息加密。而攻擊者隨后截獲他發出的任何信息,都可以用自己的私鑰解密!!熊小貓的小秘密完全被暴露了!
攻擊者利用了非對稱加密公鑰公開的特性,偽裝成通信方施加攻擊。
問題已經非常清晰:熊小貓如何驗證拿到的公鑰就是兔小白的公鑰?換句話講,兔小白如何證明他就是他?
鋪墊了這么多,今天的主角要登場了!證書,就是用來證明公鑰身份合法性的。
證書
證書的作用
證書是能夠證明你身份的文件。最常見的就是身份證。你去檢測核酸,怎么證明你就是你,而不是別人替你來檢查?你需要出示身份證,經過驗證后才能檢測核酸。
我們看看身份證上都有什么有用的信息。
身份證用來證明人的合法身份,公鑰證書證明公鑰的合法性。證書上的信息其實和身份證差不多,我們做個對比。
身份證姓名:對應證書的公鑰所有者
身份證號:通信方公鑰
身份證簽發機關:證書頒發者
身份證有效期限:證書有效期
身份證防偽條紋:認證機構對公鑰的簽名
通信開始前,熊小貓需要從可信賴的證書機構手中拿到兔小白的公鑰證書,而不是從自己聲稱自己為 “兔小白“ 的人手中獲得。增加這個環節,是為了確保你拿到的公鑰真的是通信人的公鑰。
證書的工作機制
通過下圖來說明證書的使用流程。
這個過程有如下幾步:
引入證書以及如此復雜的流程,是為了解決公鑰密鑰的信任問題。
認證機構
引入證書后,除了通信雙方,出現了第三方----“認證機構”。認證機構主要負責證書的生成和管理。
認證機構的工作
生成證書
認證機構會對申請證書的用戶身份進行認證。認證通過后,對其公鑰進行簽名,按照證書格式規范生成證書。
作廢證書
如果兔小白的私鑰泄露了,那么兔小白需要立即更改自己的私鑰和公鑰,作廢之前的證書并生成新的證書。
作廢的證書需要讓所有與之通信的人知曉。否則熊小貓仍舊使用作廢的證書加密,攻擊者可以拿兔小白的私鑰為所欲為。
認證機構一般是通過黑名單的方式作廢證書。所有作廢的證書會保存到證書作廢清單(CRL),全稱為Certificate Revocation List。
熊小貓需要從認證機構手中拿到最新的CRL,并且驗證兔小白的證書是否已經作廢。如果已經作廢,熊小貓需要更新兔小白的證書,使用新的公鑰加密信息。
認證機構的層級
證書中除了有兔小白的公鑰信息,還有認證機構對兔小白公鑰生成的簽名。目的一是為了確保簽名不被篡改,二是確保該證書確實是該認證機構頒發的。
熊小貓拿到證書后需要用認證機構的公鑰對兔小白公鑰簽名進行驗證。
證書為了解決消息接收方公鑰的信任問題而出現。但證書中又引入了認證機構的公鑰用來驗簽。
現在問題來了。認證機構公鑰的信任問題又應如何解決呢?如果這是一家攻擊者偽裝的認證機構,那么這一套復雜的認證機制豈不是白費?
其實這樣的例子在生活中是真實存在的。
商品有一種常見的防偽方式:防偽碼。消費者刮開商品的防偽碼,到對應的網站查詢驗證真偽。例如名貴白酒有使用這種方式。
造假商的對策是也搭建一套驗證真偽的網站。網址和正規網站非常相近,頁面高仿正規網站。消費者很難察覺到異常,在假網站驗證假酒,得到正品的驗證結果。
這個例子的底層問題是一樣的:如何驗證認證機構的真偽?
為了解決這個問題,認證機構引入了層級的概念。
我們還以防偽碼的例子解釋認證機構層級。為了確保消費者不被假的認證網站所欺騙,國家搭建了一套驗證防偽網站真偽的網站。你只需要輸入認證網站的網址進行查詢,就能知道此網站的真偽。
消費者為了驗證酒的真假,需要按如下流程操作
這兩個網站形成了層級:A網站驗證B網站真偽,B網站驗證防偽碼的真偽。
證書也是如此。每個認證機構的公鑰都要由上一級認證機構頒發證書并提供驗證。但這個鏈條不能無止境的延伸下去,一定會有終點。終點的認證機構是最高級別的認證機構,稱為 根 CA。根 CA 自己給自己頒發證書,自己對自己的公鑰進行簽名。
你仍舊不信任根 CA?抱歉,你也只能信任根CA。
認證機構的信任問題
認證機構的層級是為了解決認證機構的信任問題。但其實信任問題并沒有被完全解決。回到假酒驗證的例子上,驗證防偽網站真偽的A網站,我為什么會信任它呢?這個網站會不會也是假的?
證書驗證的鏈條總有盡頭,最終會落到根CA。你只能選擇信任根CA,他說自己是真的就是真的。
但是這安全嗎?我們需要再看看為什么會產生信任。
以我個人網購的經歷為例。在天貓出現前,淘寶上經常會買到假貨。所以我曾經只在京東買大件電子產品。那么我為什么信任京東呢?好像潛移默化的就產生了信任。之前并沒有仔細想過這個問題,現在總結有如下原因:
由于這些原因我選擇信任京東,在上面購買大件電子產品。這些讓我信任的情報累加,不斷加強了我的信任感。從不信任到將信將疑,最終到充分信任。
回到證書上,我們選擇一款瀏覽器時一般會通過自己的經驗、朋友推薦、廣告宣傳、公司知名度做出選擇。信任了這款瀏覽器那么也可以認為信任了這款瀏覽器內置的證書。從而信任了整個認證機構鏈條。
但問題往往就出現在 “信任” 上。想一想你的 Chrome 瀏覽器是從官方網站下載的嗎?有沒有可能是偽造或者被篡改的 Chrome?
我之所以信任我的chrome瀏覽器,因為它是我用Mac電腦自帶的Safari瀏覽器打開google的官方網站下載的。偽造的概率已經非常低。
當你已經小心翼翼,收集各種情報做出了判斷,那么你就只能選擇相信。沒有絕對的安全。
總結
證書的出現是為了解決通信方公鑰的信任問題。但同時引出了認證機構的公鑰信任問題。雖然存在認證機構層級認證,但并不徹底解決信任問題。最終我們回歸本源,看看信任是如何產生的。此時我們發現,本來就沒有絕對可靠的信任,我們收集大量信息,只能不斷提高可信程度。最終,基于大量的可信信息,我們也只能選擇信任。
總結
以上是生活随笔為你收集整理的证书-解决非对称加密的公钥信任问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “约见”面试官系列之常见面试题之第四十五
- 下一篇: head first设计模式 官方源码