數字簽名與數字證書入門級解讀

這篇文章不解釋具體的概念定義而是以通俗易懂的語言來解讀數字簽名與數字證書,我們先來理一理需要用到的知識點。

算法基礎

摘要算法
摘要算法是單向算法,明文只能轉換成密文,密文卻無法轉換成明文,這種算法也叫HASH算法,如SHA1,MD5,CRC等。可以這樣理解,幾乎很難找到兩個不同的明文能生成同一個摘要。所以摘要算法能夠用於驗證數據的完整性,防篡改。

一般在軟件發佈時會同時公佈軟件的摘要信息,用戶下載軟件後再自行計算一次摘要,如果和發佈者公佈的值一致,則認爲該軟件由發佈者發佈未經更改過。

對稱加密
即加密和解密都用同樣的密鑰,如 AES,DES。

非對稱加密
非對稱加密即有兩個密鑰,一個用於加密(私鑰),一個用於解密(公鑰),並且是成對出現。用一個加密後需用另一個解密。公鑰是公開的(大家都能看到),而私鑰只能自己知道。常見的算法是RSA。

RSA算法的原理是基於這樣的數學事實:兩個大質數相乘得到的大數難以被因式分解。即一個大數很難被因式分解。

對稱加密和非對稱加密的作用都是對明文進行保護,但是他們都面臨着一個問題,怎樣分發密鑰才安全?對稱加密需要在網絡中傳輸密鑰顯然不安全,而非對稱加密確沒有該問題。由於非對稱密鑰的公鑰是公開的,所以即使在網絡中傳輸也無所謂,所以現在互聯網上大多都使用的非對稱加密。但是這又產生了新的問題,怎樣保證公鑰的真實性,如果通信中有中間人存在,並且它僞造了通信呢?帶着這些問題,數字簽名和數字證書應運而生。

數字簽名

數字簽名的計算方法:算出內容HASH值,然後用私鑰加密,這就是數字簽名。
客戶收到信息後,用公鑰解密數字簽名得到HASH值,然後算出內容的HASH值,兩者相對比。

數字簽名的作用: 不可抵賴與數據完整性
不可抵賴:如果公鑰能解密,則內容一定是與該公鑰對應的私鑰加密而來,即可證明來源。
數據完整性:數字簽名的HASH值和自己計算出的HASH值一致,即可證明該內容是完整的未經修改過。

但是數字簽名不能確保"公鑰"的真實性,第三方可偷換"公鑰",達到與僞服務器通信的目的,這樣又產生了數字證書。

數字證書

由權威證書中心CA(certificate authority,簡稱CA)頒發,作用是證明"公鑰"的真實信。
數字證書裏面包含了服務器的公鑰,服務器的域名以及服務器所屬的公司信息等內容,並且該信息是用CA的私鑰進行加密的。客戶請求服務時,服務器會同時發送數字簽名和數字證書給客戶。證書工作流程如下:

  1. 服務器向CA中心申請證書,CA負責覈實服務器的真實性,並在證書裏內置服務器域名證書使用者信息
  2. 客戶瀏覽器或操作系統裏內置有權威CA的公鑰信息(即CA公鑰不需要在網絡中傳輸)
  3. 客戶請求服務時,服務器把自己申請的數字證書和內容的數字簽名一同發給客戶
  4. 客戶收到信息後在本地CA列表裏查找CA公鑰對數字證書解密,拿到真正的簽名公鑰,再用該公鑰去解密數字簽名,拿到HASH值去對比完整性

數字證書能解密就能證明它確實由CA所頒發,但還不能證明該證書是對應該服務器的(因爲如果僞造者也申請有正規的數字證書,並且他通過中間人的方式把真實服務器的證書替換掉,用它的證書給傳你呢?)。那麼怎麼證明呢?證書裏是帶有服務器域名信息的,只有訪問的域名和證書裏面授權的域名相匹配,那麼該證書才授信。

所以這兩點,保證了服務器的公鑰的真實性。那麼如果有中間人攻擊的情況呢?即使中間人截獲了請求也沒法對內容進行修改,因爲他沒有私鑰,沒法對內容進行加密。如果用自己的私鑰加密那客戶就沒法進行解密了。

這裏還有一個疑問,萬一我通過域名劫持的方式把對方的域名攔截到我的服務器,並在我的服務器中導入對方的證書呢,這種情況是否可行?這樣也不行,因爲你還是沒有對方的私鑰,沒法對傳輸的信息進行加密。

綜上,所以數字簽名能保證服務器公鑰的真實性,並且能夠防止中間人攻擊

漏洞
CA的公鑰是存儲在本地計算機列表的,如果手動往列表裏面導入了不可信的CA公鑰,那麼CA就可以仿冒,失去了權威性。

瀏覽器顯示授信的站點就一定安全?
不一定!通常用戶是通過HTTPS判斷真實網站,現在假冒網站也用上了HTTPS,這部分極度依賴CA的可靠性,由於部分CA對申請證書的監管要求不高,導致釣魚網站也能申請正規的CA證書。
普通用戶可能需要警惕,網站使用SSL證書僅表示網站加密傳輸數據,並不意味着它是一個合法的網站,或者它實際上是它聲稱的那個網站。需要通過兩種方式來識別:
1.訪問的域名是否顯示爲你要訪問的服務器域名
2.查看證書詳情裏的真實身份信息是否爲該網站真實的身份信息

參考

圖片理解數字簽名和驗簽過程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章