3分鐘告訴你什麼是 非對稱加密、對稱加密、公鑰、私鑰、數字證書、數字簽名、資訊摘要、中間人攻擊、CA、根證書

我妻禮彌發表於2018-06-10

非對稱加密、對稱加密、公鑰、私鑰、數字證書、數字簽名、資訊摘要,其實這些都是安全通訊中的概念,既然如此我們不妨從通訊開始入手。

情景

禮和彌是一對異國戀人,儘管相距很遠,但是卻不影響彼此之間的愛慕之情,她們喜歡通過網路來交流。

對稱加密

一天禮要給彌傳送一份非常私密的內容。禮不希望通訊過程中被人擷取而洩密祕密。這個時候,自然想到的方法就是對通訊內容進行加密,當然除了加密外,還需要讓禮能夠解密。

禮認為可以 我可以生成 一個祕鑰 ,然後用這個祕鑰對內容進行加密,然後我把我生成的祕鑰和加密的演算法告訴彌,然後她在用我告訴她的祕鑰和加密演算法進行解密。


上面的加密解密過程就屬於對稱加密,對稱加密,需要一個祕鑰和一個對稱加密演算法。 常見的對稱加密演算法有:

  • DES
  • 3DES
  • AES

禮把自己的想法告訴了彌,彌聽完後,提出了一個問題——“你怎麼把祕鑰給我”。禮想了會兒,的確,不可能通過網路發給她,萬一被人把你的祕鑰被人偷看了怎麼辦。乾脆下次見面的時候告訴她?不行,下次見面不知道是什麼時候了,難道這中間都不跟他通訊嗎!想到這裡禮就很煩,我就想安全通訊而已,怎麼這麼麻煩。

非對稱加密

又過了一段時間,禮興奮的跟彌說,我找到解決辦法了,我們可以使用非對稱加密演算法來加密我們的內容。
什麼是非對稱加密演算法?彌問道。

非對稱加密演算法 不同於 對稱加密,它有一對祕鑰,一個稱為 公鑰(publicKey) ,另一個稱為 私鑰(privateKey)並且只知道公鑰是無法推算出私鑰。
另外,這種演算法還有一個特別神奇的功能,那就是 通過公鑰加密的內容,只有私鑰才可以解開,而通過私鑰加密的內容,只有公鑰才可以解開。

非對稱加密,需要一對祕鑰和一個非對稱加密演算法。 常見的非對稱加密演算法有:

  • RSA
  • DSA )

禮說,我們可以利用這個特性來加密我們的通訊內容。那怎麼利用能,彌問道。

假如我要和你通訊

  • 首先,你要生成一對祕鑰,然後把公鑰發給我。等等,公鑰被看到也沒有關係嗎,彌問道。沒關係,沒關係,你聽我說完就知道了。
  • 然後,我拿到公鑰後,對內容進行加密,然後傳給你,利用通過公鑰加密的內容,只有私鑰才可以解開的特性,就算公鑰沒偷看,也解不開。只有持有私鑰的你才能解開。
  • 最後,你收到公鑰後就可以通過私鑰來解開我傳送的內容了。

反過來,你要和我通訊也一樣

  • 首先,我生成一對祕鑰,然後把公鑰發給你。
  • 你收到後,加密要傳送的內容,然後發給我
  • 我收到加密後的內容後,在通過我的私鑰解密。

嗯,的確這樣一來,我們每個人只有生成一對祕鑰,就可以安全通訊了。

安全與速度,二者都要兼得

兩人,使用上面的方法進行通訊一段時間後,發現了一個問題。那就是非對稱演算法,加密解密速度太慢,完全趕不上對稱加密演算法。

怎麼辦了,彌想到了一個好辦法。 假設 禮和彌 要進行通訊

  • 首先,禮生成一對祕鑰,然後把公鑰發給彌
  • 彌收到公鑰後,生成一個對稱加密演算法的祕鑰,然後將對稱加密演算法和對稱加密演算法的祕鑰當做內容用公鑰加密後,在發回給彌。(其實這跟上面的步驟一樣,只是這裡的內容不是普通的內容,而是對稱加密演算法和對稱加密演算法的祕鑰)
  • 禮收到加密內容後,用私鑰解開內容,這樣他就安全的得到了對稱加密的演算法和祕鑰。這樣一來兩個人就相當於商量好了加密方式和祕鑰。(參考對稱加密那一章所遇到的問題)
  • 最後,兩人就可以通過 加密解密更加快速的 對稱加密演算法 來加密自己的通訊內容。

資訊摘要、數字簽名

雖說 對稱加密演算法 比 非對稱加密演算法 要快很多,但是遇到要加密的資訊很多時,速度也會很慢。而且並不是所有的資訊都需要加密,一些不怕被人看到的資訊,我只需要防止他被人更改就行了。
那如何防止在通訊過程中資訊不被別人修改呢,那就是使用 資訊摘要和數字簽名。

資訊摘要

什麼是資訊摘要 就像一片文章的摘要一樣,資訊摘要就是一段資訊的摘要。它有以下特徵

  • 無論輸入的訊息有多長,計算出來的訊息摘要的長度總是固定的
  • 用相同的摘要演算法對相同的訊息求兩次摘要,其結果必然相同
  • 一般地,只要輸入的訊息不同,對其進行摘要以後產生的摘要訊息也幾乎不可能相同
  • 訊息摘要是單向的,只能進行正向的資訊摘要,而無法從摘要中恢復出任何的原資訊

以上這些神奇的特性是通過摘要演算法來實現的,常用的摘要演算法有:

  • MD5
  • SHA-1
  • SHA-256
  • SHA-512

這樣一來,我們就可以將非常長的訊息,用較短的摘要表示了,並且如果有人修改了我的訊息,那麼對應的摘要就會變。我們在發資訊的時候,摘要也跟著一起發出去,如果資訊被改了,那麼接收者一算,發現,資訊的摘要和原本的摘要不一致,就知道資訊被篡改了。

數字簽名

其實上面的考慮並周到,如果黑客連摘要一起改了怎麼辦?所以必須讓黑客無法更改資訊摘要,做法也很簡單,就是對資訊摘要進行簽名。
所謂的 簽名(動詞) 其實就是使用 私鑰對資訊摘要進行加密的過程
所謂的 簽名(名詞) 其實就是 私鑰對資訊摘要進行加密後的密文 數字簽名一般指的是 私鑰對資訊摘要進行加密後的密文

這樣一來 我的摘要是加密的 ,如果黑客修改數字簽名,那我解密後的簽名,就不是原來的簽名了,除非碰巧解密後的簽名正好是 被修改的訊息的簽名,但這種機率太低太低,幾乎不可能。

中間人攻擊

真的可以高枕無憂了嗎?
還是禮和彌發資訊這個場景

  • 彌首先生成了一對祕鑰,然後把公鑰發給禮。
  • 這時候,黑客出現了,他也生成了一對祕鑰。然後他劫持了 彌給禮 發的訊息,並偷偷把 彌的公鑰換成自己的公鑰,然後還把原來的公鑰給存了起來,最後再發給禮。
  • 禮收到公鑰後,還以為是這是彌的公鑰,於是生成一個對稱加密演算法的祕鑰,然後將對稱加密演算法和對稱加密演算法的祕鑰當做內容用公鑰加密後,在發回給彌。
  • 這時,黑客再次劫持,用自己的私鑰解開了加密內容。這樣黑客就有了 對稱加密演算法和對稱加密演算法的祕鑰了。這還不算完,他把這內容再用之前取出的彌的公鑰加密,然後在發給彌。
  • 彌收到後,還以為是禮發來的,興高采烈的用私鑰解開,取出裡面的 對稱加密演算法和祕鑰。後期兩人就用此對稱加密演算法來加密通訊內容。
  • 遺憾的是,這對稱加密的祕鑰不光兩人有,黑客也有,兩人的通訊內容還是被看的一清二楚。

中間人攻擊的恐怖之處在於,整個攻擊過程,通訊雙方無法察覺到任何異議,但通訊內容卻暴露在黑客的眼中。

數字證書 、CA

上面的問題出在公鑰被黑客偷偷換了。 或者說是資訊在傳輸過程中被修改了。 解決辦法也很簡單,那就是不使用公鑰而是使用數字證書(以下簡稱證書)。

證書是什麼東西,簡單理解就是一個被權威機構認證的公鑰。就像我們的畢業證會被學校蓋個章一樣,權威機構也會為公鑰"蓋個章"。 這樣的權威機構,我們稱作CA(Certificate Authority)數字證書認證中心。 只是這個蓋章的過程,可能和你想的不一樣。

  • 首先申請證書的人,會把申請資料提供給CA,這些資料包括,公鑰、公司名稱、網址等。
  • CA稽核後,會將稽核通過的資料生成資訊摘要,然後 CA會用自己的私鑰對資訊摘要進行簽名,這樣證書就無法被篡改了。(CA也有一對祕鑰,其中公鑰是公開的,但是私鑰會進行特別的保護,嚴禁洩漏和盜用)

數字證書的內容包含以下部分

  • 版本號—標識證書的版本(V1 V2 V3)
  • 序列號—證書的唯一識別符號。
  • 簽名 —簽名演算法和內容
  • 頒發者—證書頒發者相關資訊
  • 主體 —證書擁有者相關資訊包含公鑰、證書過期時間等
  • 頒發者唯一識別符號—證書頒發者的唯一識別符號 V2 V3
  • 主體唯 一識別符號—證書擁有者的唯一識別符號 V2 V3
  • 擴充套件 —可選的標準和專用的擴充套件 V2 V3

由於證書中的簽名可以防止黑客篡改,所以,數字證書可以用來代替公鑰。

因此禮和彌的安全通訊的過程變成以下這個樣子了

  1. 首先,禮生成一對祕鑰,然後把公鑰等相關資訊發給CA
  2. CA確認無誤後,為其頒發證書。
  3. 禮將證書發給彌
  4. 彌收到證書後,確認證書的資訊,然後用 “CA的公鑰” 解開證書中的簽名,然後對證書內容做摘要,最後比較兩個摘要是否一致,如果一致就說明證書沒有被竄改。
  5. 如果證書沒有被篡改,取出裡面的公鑰,生成一個對稱加密演算法的祕鑰,將對稱加密演算法的和祕鑰用公鑰加密,然後發給禮。
  6. 之後就可以安全通訊了(其實這也是HTTPS協議的加密過程)

(這裡提一個小問題,第四步中的CA的公鑰是怎麼來的)

根證書

CA的公鑰是怎麼來的?
CA發給我嗎?那傳送的過程還是會出現篡改的情況啊。
除非CA的公鑰也是一個證書!!!

其實CA的公鑰的確是一個證書。
那這個證書又是誰簽發的呢?

答案是 CA的CA,也可以成為根CA,就同根DNS伺服器一樣,全世界的根CA也就那麼幾個,負責所有CA的證書的簽發。

說以上一章的第四步可以細分為

  1. 彌收到禮的證書
  2. 彌用根CA的公鑰解開CA證書的簽名,然後校驗CA證書的真實性
  3. 校驗通過後,在用CA證書的公鑰解開禮的證書的簽名,然後校驗證書的真實性
  4. 校驗通過之後,就可以認為禮的證書是真實可信的。

有些人可能有要問了,根CA的公鑰是怎麼來的?
感覺陷入了一個死迴圈了。
其實並不會,因為根CA的"公鑰",其實也是一個證書,但是這個證書有些特殊,他的簽發單位是它自己。

這種型別的證書也叫 自簽名證書

另外根CA的證書,會內建在我們的作業系統和瀏覽器中。也就是說根CA的證書,天生就有,不需要去下載安裝。

總結

  • 對稱加密:這種加密演算法只需要一個 祕鑰,且相較於非對稱加密 ,加密和解密速度較快
  • 對稱加密:這種加密演算法需要一對 祕鑰,其中一個叫公鑰,另一個叫私鑰。相較於對稱加密來說 ,加密和解密速度較慢
  • 公鑰:非對稱加密中可以被公開的祕鑰,用於對資訊加密,可被封裝成證書。
  • 私鑰:非對稱加密中要保管好的祕鑰,用於對公鑰加密的資訊解密,還可用於簽名
  • 資訊摘要:通過資訊摘要演算法,將原資訊摘要為一個固定長度的摘要
  • 數字簽名:資訊摘要被私鑰加密後的密文
  • 數字證書:可以簡單理解為 被CA承認且無法篡改的公鑰
  • CA:簽發證書的權威機構
  • 根CA:CA的CA,可以簽發CA的證書
  • 根證書:根CA的自簽名證書
  • 中間人攻擊:一句話說不清楚,你還是去看中間人攻擊那一章吧!

相關文章