加密、數字簽名和數字證書
對稱加密算法中,加密和解密使用的是同一個秘鑰,是以秘鑰的保護是非常重要的,對稱加密和解密過程如下圖:
對稱算法加密過程
<a href="https://s3.51cto.com/wyfs02/M00/A4/B2/wKioL1mvvsuiJa7CAAhYSOJpHlw952.bmp" target="_blank"></a>
對稱算法解密過程
<a href="https://s1.51cto.com/wyfs02/M01/06/01/wKiom1mvvwrRiGXeAAfImDkIBEo454.bmp" target="_blank"></a>
盡管對稱秘鑰能夠滿足對内容的加密了,但是對稱算法還是存在以下兩個問題的。
1、秘鑰洩密風險:務端與用戶端彼此之間必須約定将使用的密鑰,而這個約定的過程本身就可能存在洩密的風險;
2、如果有100甚至更多的用戶端要向伺服器發送檔案。那麼,伺服器可能需要有100多次約定密鑰的過程。
由此可見,無論是安全性還是可用性上,對稱密鑰都是存在問題的。而兩個問題則是必須解決的。
非對稱算法加密和解密使用的是不同的秘鑰,加密算法有一對秘鑰,分别是公鑰和私鑰,公鑰是公開的,私鑰則是自己保管。
非對稱算法加密過程
<a href="https://s1.51cto.com/wyfs02/M02/A4/B2/wKioL1mvvxnAPhJVAAetLCUyqfo998.bmp" target="_blank"></a>
非對稱算法解密過程
<a href="https://s4.51cto.com/wyfs02/M02/A4/B2/wKioL1mvvyziq9EPAAdXiC_aypw581.bmp" target="_blank"></a>
加密是指對某個内容加密,加密後的内容還可以通過解密進行還原。 比如我們把一封郵件進行加密,加密後的内容在網絡上進行傳輸,接收者在收到後,通過解密可以還原郵件的真實内容。
簽名就是在資訊的後面再加上一段内容,可以證明資訊沒有被修改過。簽名一般是對資訊做一個hash計算得到一個hash值,注意,這個過程是不可逆的,也就是說無法通過hash值得出原來的資訊内容。在把資訊發送出去時,把這個hash值加密(使用非對稱算法的私鑰進行加密)後做為一個簽名和資訊一起發出去。接收方在收到資訊後,會重新計算資訊的hash值,并和資訊所附帶的hash值(解密後)進行對比,如果一緻,就說明資訊的内容沒有被修改過,因為這裡hash計算可以保證不同的内容一定會得到不同的hash值,是以隻要内容一被修改,根據資訊内容計算的hash值就會變化。當然,不懷好意的人也可以修改資訊内容的同時也修改hash值,進而讓它們可以相比對,為了防止這種情況,hash值一般都會加密後(也就是簽名)再和資訊一起發送,以保證這個hash值不被修改。
數字簽名解決了資訊安全上面的不可抵賴性和不可篡改性問題。
基于非對稱密鑰算法,Bob生成了一對公私鑰。Bob将公鑰釋出在公開的密鑰庫中。而Alice在向Bob發送加密檔案或者驗證Bob簽名的檔案時,均要從公鑰庫取到Bob的公鑰。我們已經知道,一般來說公鑰就是一段固定長度的字元串,并沒有特定的含義。
為了讓Alice能夠友善的辨識公鑰,我們可以考慮對給公鑰附加一些資訊,例如該公鑰使用的算法,該公鑰的所有者(主題),該公鑰的有效期等一系列屬性。這樣的資料結構我們稱作PKCS10資料包
<a href="https://s1.51cto.com/wyfs02/M02/A4/B2/wKioL1mvv-zTnMCpAAC6fpatIJg317.jpg" target="_blank"></a>
公鑰的主題我們采用唯一标示符(或稱DN-distinguished name),以盡量唯一的标示公鑰所有者。以下是基于抽象文法表示法所定義的PKCS10資料結構:
我們已經有了PKCS10資料包,除了公鑰資訊外,還有公鑰的持有者,公鑰的版本号等資訊。然而這樣的資料結構其實并沒有任何權威性。例如有一天一個叫做Richard的人想冒充Bob,也生成一對公私鑰,并且使用了相同的公鑰主題封裝為P10資料結構。Alice其實并沒有辦法分辨哪個是真實Bob的公鑰。
為了解決這個問題,就需要一個權威的第三方機構,對P10結構的資料進行認證。就如同對P10檔案蓋上一個權威的章,防止仿照。這樣的權威機構,我們稱作CA(Certificate Authority)數字證書認證中心。而CA如何為P10資料蓋章呢?非常簡單,就是我們前文已經提到的數字簽名技術:
<a href="https://s5.51cto.com/wyfs02/M01/06/01/wKiom1mvwCzTSY6FAAD_5NSlBDI694.jpg" target="_blank"></a>
① 如上圖所示,CA機構其實也持有一張私鑰。一般來說,CA會對這份私鑰進行特别的保護,嚴禁洩漏和盜用。
② Bob将自己的公鑰附加上一系列資訊後,形成了P10資料包(請求包),并發送給CA。
③ CA機構通過其他一些手段,例如檢視Bob的身份資訊等方式,認可了Bob的身份。于是使用自己的私鑰對P10請求進行簽名。(也可能會先對資料進行一些簡單修改,如修改有效期或主題等)
④ 這樣的簽名結果,我們就稱作數字證書。
數字證書同樣遵循一個格式标準,我們稱作X509标準,我們一般提到的X509證書就是如此。
基于數字證書,我們可以再來看看Bob如何給Alice發送一份不可否認、不可篡改的檔案:
<a href="https://s4.51cto.com/wyfs02/M02/A4/B2/wKioL1mvwDnz6cTeAADYhNvFEUw516.jpg" target="_blank"></a>
第一步:Bob除了對檔案進行簽名操作外,同時附加了自己的數字證書。一同發給Alice。
<a href="https://s1.51cto.com/wyfs02/M01/06/01/wKiom1mvwGrD6qRfAAC3h8RFkH4719.jpg" target="_blank"></a>
第二步:Alice首先使用CA的公鑰,對證書進行驗證。如果驗證成功,提驗證書中的公鑰,對Bob發來的檔案進行驗簽。如果驗證成功,則證明檔案的不可否認和不可篡改。
可以看到,基于數字證書後,Alice不在需要一個公鑰庫維護Bob(或其他人)的公鑰證書,隻要持有CA的公鑰即可。數字證書在電子商務,電子認證等方面使用非常廣泛,就如同計算機世界的身份證,可以證明企業、個人、網站等實體的身份。同時基于數字證書,加密算法的技術也可以支援一些安全互動協定(如SSL)。
參考:https://yq.aliyun.com/articles/54155
本文轉自 老鷹a 51CTO部落格,原文連結:http://blog.51cto.com/laoyinga/1963167