1. 程式人生 > >數字簽名,數字證書,CA認證等概念理解

數字簽名,數字證書,CA認證等概念理解

ca 認證 https openssl

本文將介紹數字簽名,數字證書以及CA相關知識。

加密相關知識可見我的上一篇博文:http://watchmen.blog.51cto.com/6091957/1923426

本文參考文獻引用鏈接:

1、https://www.zhihu.com/question/25912483

2、https://blog.jorisvisscher.com/2015/07/22/create-a-simple-https-server-with-openssl-s_server/

3、https://zh.m.wikipedia.org/zh-hans/%E6%95%B0%E5%AD%97%E8%AF%81%E4%B9%A6%E8%AE%A4%E8%AF%81%E6%9C%BA%E6%9E%84

4、http://blog.csdn.net/until_v/article/details/40889565【推薦必看】

5、http://www.youdzone.com/signature.html【經典,推薦必看】

6、http://blog.csdn.net/sszgg2006/article/details/8199175【推薦必看】

7、http://www.tuicool.com/articles/7buueeQ【經典,推薦必看】


前言:

我們知道常用的RSA(非對稱加密算法中常用的一種,還有其他算法)公鑰與私鑰主要用於不對稱加密/解密,另外一種用法我們一般稱之為數字簽名(Digital Signature)與認證(Authentication),也即在這裏私鑰加密=數字簽名,解密=用公鑰認證,接下來就將展現簽名與認證相關知識


註:本文中的加密算法默認指的就是RSA,摘要算法主要有 MD5 和 SHA1

所謂信息摘要,其實就是某種 HASH 算法。將信息明文轉化為固定長度的字符,它具有如下特點:

① 無論輸入的消息有多長,計算出來的消息摘要的長度總是固定的 ;

② 用相同的 摘要算法對相同的消息求兩次摘要,其結果必然相同;

③ 一般地,只要輸入的消息不同,對其進行摘要以後產生的摘要消息也 幾乎不可能相同;

④ 消息摘要函數是單向函數,即只能進行正向的信息摘要,而無法從摘要中恢復出任何的消息;

⑤ 好的摘要算法,沒有人能從中找到 “ 碰撞 ” ,雖然 “ 碰撞 ” 是肯定存在的。即對於給定的一個摘要,不可能找到一條信息使其摘要正好是給定的。或者說,無法找到兩條消息,是它們的摘要相同。



什麽是認證?

認證是安全通信的前提,如果認證出問題,A不是和A想要聊天的人B在聊天,而是和一個C(假冒B)在聊天,則接下來所有的安全措施都是白搭。以目前常用的數字證書(Digital Certificate)認證為例。

好,接下來我們詳細講解CA認證相關知識


CA(數字證書認證機構,Certificate Authority,CA是縮寫),也可以稱之為電子商務認證中心或者電子商務認證授權機構。CA是負責發放和管理數字證書的權威機構,並作為電子商務交易中受信任的第三方,承擔公鑰體系中公鑰的合法性檢驗的責任。【有點抽象,我們接著往下看】

CA的主要工作:CA中心為每個使用公開密鑰的用戶發放一個數字證書,數字證書的作用是證明證書中列出的用戶合法擁有證書中列出的公開密鑰。數字證書中的CA數字簽名(用CA的私鑰對用戶申請摘要信息進行加密)使得攻擊者不能偽造和篡改證書。

總結:因此CA主要功能是發放、認證、管理數字證書。

CA本身也會有一個證書,因為為了讓網絡用戶信任CA,任何人都可以使用這個證書驗證CA簽發的證書(CA的數字簽名),默認這個證書在系統預裝的時候就會攜帶。

數字證書申請:用戶想得到一份屬於自己的證書,需要向CA提出申請(申請資料包括用戶的公鑰及用戶信息),在CA判別申請者的身份後,將該公鑰與申請者的身份信息綁定在一起,對這2個信息做一個hash處理,得出一個hash值,CA用私鑰對這個hash進行加密,也就是CA的數字簽名,簽名之後,便會形成證書(證書內容是公鑰和申請者身份信息,以及CA的數字簽名,簽名加密的內容是這2個信息的摘要hash值)。

即:數字證書=公鑰(CA分配)+申請者身份信息+CA的數字簽名


實際案例1:


  • 數字簽名:

小麗已經事先拿到老王的公鑰,老王要給小麗寫信,為了安全,決定使用數字簽名的方式

1、老王把信寫好

2、老王得出這封信的摘要信息:信的摘要digest(通過對信做hash運算得出摘要)

3、老王對信的摘要digest,使用私鑰進行加密得出數字簽名(signature)

4、老王將:信+數字簽名 發送給小麗

5、小麗收到老王發送過來的 信+數字簽名

6、小麗對信使用hash得出摘要digest-2

7、小麗對數字簽名 進行解密得出摘要digest-3【在這裏其實就是digest】

8、小麗對比digest-2 和digest-3,如果相同,則表示這封信確實是由老王所發。

這8個步驟解釋了什麽是數字簽名

總結:數字簽名=發送者用自己的私鑰對所要發送的信息的摘要信息進行加密,得出的值我們可以稱之為數字簽名


  • 數字證書:

突然有一天,有人潛入了小麗的電腦,把老王的公鑰換成老張的公鑰,時間一久,小麗覺得不對勁,發現老王的信不像是老王寫的。於是就告訴老王為公鑰做一個認證

於是老王找到CA認證中心(Certificate Authority),申請為公鑰做認證。

CA拿到老王的公鑰以及申請信息之後,使用自己的私鑰對這2個信息的摘要信息進行加密,生成數字證書(Digital Certificate)【其實在這裏,CA做的是數字簽名操作】

總結:數字證書=老王的公鑰+老王的申請信息+CA的數字簽名

老王拿到這個數字證書之後,以後再給小麗寫信的時候,就是下面這種

1、老王把信寫好

2、老王得出這封信的摘要信息:信的摘要digest(通過對信做hash運算得出摘要)

3、老王對信的摘要digest,使用私鑰進行加密得出數字簽名(signature)

4、老王將:信+數字簽名+數字證書 發送給小麗

5、小麗收到老王發送過來的 信+數字簽名 +數字證書

6、小麗對信使用hash得出摘要digest-2

7、小麗對數字簽名signature 進行解密得出摘要digest-3【在這裏其實就是digest】

8、小麗對比digest-2 和digest-3,如果相同,則表示這封信確實是由老王所發。

那麽這個老王是不是真的老王而不是老張呢?於是就有下面的額外幾個步驟

9、小麗用CA的公鑰(CA的公鑰已事先對外公布)對數字證書中的CA的數字簽名進行解密,得出值A,

然後對證書中的老王的公鑰和老王的申請信息做一個摘要再做一個hash,得出值A2,如果A2=A,則證明這個證書的公鑰是老王的。



實際案例2:


我們來用一個國人最常見的HTTPS訪問做案例:


百度公司已經事先找CA認證過,因此擁有數字證書(內容是公鑰+申請信息+CA的數字簽名)


我們在客戶端輸入https://www.baidu.com,這就意味著本機的客戶端向這個域名對應的服務器發送加密的訪問web請求,請求的東西是一個html頁面。

web服務器接受到請求之後,將頁面+這個頁面的數字簽名+百度的數字證書返回給客戶端


客戶端收到之後,使用CA的公鑰(本機自帶的CA數字證書,一般是系統預裝含有,或者是後期安裝)驗證百度的數字證書,然後得出:百度的公鑰和申請信息的摘要信息的hash值,然後再和CA的數字簽名內容進行計算比對。


一般來說,這個申請信息中就包含有這些網址域名信息,如果數字證書記載的網址,與你正在瀏覽的網址不一致,就說明這張證書可能被冒用,瀏覽器發出警告,也就是說如果這個www.baidu.com域名不在這個申請信息裏面,那麽就會有下面這種提示:【瀏覽器無法上傳圖片,先以圖片內文字代替】


此網站的安全證書有問題

此網站出具的安全證書是為其他網站地址頒發的

單擊此處關閉網頁

繼續瀏覽此網站(不推薦)


如果這張數字證書不是由受信任的機構頒發的,也就是不被信任的CA頒發的,瀏覽器會發出另外一種警告。【瀏覽器無法上傳圖片,先以圖片內文字代替】


您與該站點交換的信息不會被其他人查看或更改,但該站點的安全證書有問題。

該安全證書由您沒有選定信任的公司頒發,可以查看證書以便確認您是否信任該驗證機構

...

是否繼續



如果證明數字證書是可靠的,那麽就意味著證書中的baidu的服務器的公鑰是可靠的,那麽接下來的數據傳輸,客戶端將會使用這個公鑰來對數據進行加密。通過這個公鑰就可以加密我們在實際通信中使用的對稱密鑰(非對稱算法時間成本太大,因此使用非對稱算法傳遞對稱密鑰,之後再使用對稱密鑰)


註意:我們在實際數據傳輸的時候,使用的是對稱加密,並不是非對稱加密,主要原因是因為非對稱加密的時間成本太大,具體的區別本文暫時沒有記錄,近期將更新。


更多內容,請自行搜索:數字證書和數字簽名



本文出自 “清風攬月的博客” 博客,請務必保留此出處http://watchmen.blog.51cto.com/6091957/1924747

數字簽名,數字證書,CA認證等概念理解