1. 程式人生 > >幾個例子理解對稱加密與非對稱加密、公鑰與私鑰、簽名與驗籤、數字證書、HTTPS加密方式

幾個例子理解對稱加密與非對稱加密、公鑰與私鑰、簽名與驗籤、數字證書、HTTPS加密方式

# 原創,轉載請留言聯絡

為什麼會出現這麼多加密啊,公鑰私鑰啊,簽名啊這些東西呢?說到底還是保證雙方通訊的安全性與完整性。例如小明發一封表白郵件給小紅,他總不希望給別人看見吧。而各種各樣的技術就是為了保障通訊的安全。(本文務必從上到下看)

1.對稱加密與非對稱加密

  • 對稱加密:

對稱加密是最快速的一種加密方式。加密和解密用的是同樣的金鑰。

對稱加密是怎麼實現的呢?舉個例子說明。

小明寫了一封信給小紅。他用箱子裝著信,同時箱子上鎖,他去快遞店把這個箱子和開啟箱子的鑰匙一起快遞給小紅。小紅收到箱子後,用鑰匙開啟箱子,看信。這就是對稱加密的傳輸過程。

但是為什麼現在很少用這種方式進行。萬一你的快遞中途丟了(在傳輸過程中可以資料認為被黑客截獲),那麼拿到你快遞的人,也可以用快遞裡的鑰匙開啟這個箱子,所以資訊就洩露了。並且更嚴重的是,別人可以把你的信取出來,寫一封詐騙的信,再寄給小紅,那麼小紅就受騙啦。所以對稱加密並不安全。

 

  • 非對稱加密

非對稱加密就比較特殊了。非對稱加密存在著公鑰和私鑰,公鑰是用來加密內容的,私鑰是用來解密內容的

比如小明有幾個朋友,小A、小B、小C。小明和這幾個朋友平時有祕密交流。小明自己拿著私鑰,然後給每一個朋友一把公鑰。

朋友寫信給小明時:比如小A有機密資訊要告訴小明。他寫了一封信,用小明給他的公鑰加密,這時候這封信是加密的,誰都看不到的,誰都不能解密,只有小明的私鑰可以。所以在傳輸過程中就不怕被別人篡改了。記住,公鑰是拿來加密的,小A拿著的是公鑰。私鑰是解密的,小明拿著的是私鑰。這裡附上一個比較容易記的方法。當你收信的時候,你肯定不想信給別人看過,這是私人的東西,所以收信方用的是私鑰。

那麼問題來了......當小明想發信給小A的時候應該怎麼辦呢?

其實,小A也有自己的私鑰,他也把自己的公鑰發給小明呀。

小明持有的鑰匙:小明的私鑰,小A的公鑰,小B的公鑰,小C的公鑰...

小A持有的鑰匙:小A的私鑰,小明的公鑰,小B的公鑰,小C的公鑰...

小B持有的鑰匙:小B的私鑰,小明的公鑰,小A的公鑰,小C的公鑰...

小C持有的鑰匙:小C的私鑰,小明的公鑰,小A的公鑰,小B的公鑰...

看起來對稱加密是很完美,但是他也有缺點,那就是他的加密速度十分的慢,一般只用來加密一些很短的資料,如果資料過長,他的加密速度比對稱加密慢十幾倍甚至上百倍。

 

 

2.簽名與驗籤

簽名與驗證是什麼呢?

簽名與驗證是基於公鑰和私鑰的。

 

  • 簽名與驗籤的理解

小明想快遞一封信給小紅,小明是一個很隨和的人,別人看了他的信的內容都無所謂,但是一定不能修改!小明為了讓小紅完整的讀到他的信,他用私鑰對信進行了簽名。小紅收到信之後,用小明給她的公鑰進行了驗籤。如果驗籤通過,則表明小明的信沒有被修改過,全部內容都是小明寫的。

注意,私鑰是用來簽名的。公鑰是用來驗籤的。

 

 

3.HTTPS的原理

在說數字證書之前,最好先理解一下HTTPS的原理。

如果你認真地看完上面的文字,你現在應該知道對稱加密比較快,但是不安全。非對稱加密比較慢,但是比較安全。當然是越快越好對不,那麼怎麼解決對稱加密的不安全性呢?可以利用非對稱加密的方式,給對稱加密的鑰匙加密,然後傳輸給客戶端,這不就解決對稱金鑰的不安全性了嗎?所以,在HTTPS中,對稱加密與非對稱加密都有用到的!

例如,小明第一次瀏覽GOOGLE。這時候GOOGLE應該要把對稱加密的鑰匙發給小明呀,以後小明才能傳輸一些加密的資訊給GOOGLE,而且加密也快。那麼怎麼保證這把鑰匙的安全傳輸呢?這就要用到非對稱加密了。GOOGLE先把公鑰傳輸給小明。然後用自己的私鑰加密對稱加密的鑰匙。再傳輸給小明。小明收到後,就可以用GOOGLE的公鑰解開得到對稱加密的鑰匙啦。到了這步,就能保證對稱加密的鑰匙的安全啦。

自此之後,小明要搜什麼內容,就先用對稱加密的鑰匙把內容加密,然後傳輸給GOOGLE。GOOGLE拿到後,用對稱加金鑰匙解密,並且處理完之後,用對稱加密的鑰匙加密,再發回去給小明。小明收到再解密......

 

看起來已經天衣無縫了,但是還是有問題。

萬一小明剛開始收到的公鑰不是GOOGLE的公鑰呢?而是黑客發過去的公鑰,那麼小明本來想與GOOGLE交流的,不就變成與黑客交流了?

為了解決這個問題,數字證書出現了!~~

 

 

4.數字證書

上面的問題出現後,出現瞭解決方案。下面接著上面的例子講:

GOOGLE可以使用由數字證書認證機構(CA,certificate Authority)和其他相關機關頒發的公開金鑰證書。然後給小明發公鑰時,小明就可以知道這個肯定是GOOGLE的公鑰了。

詳細過程是這樣的:

1.GOOGLE伺服器把自己的公鑰登入至數字證書認證機構。

2.數字證書機構用自己的私鑰對GOOGLE的公鑰進行簽名(還記得簽名的作用?不記得看回去),並頒發公鑰證書(證明的作用)。

3.要知道的一點是:每個人的瀏覽器都事先植入數字證書機構的公鑰的!!!小明的也是,你的也是,我的也是。

4.小明收到了(公鑰證書+GOOGLE的公鑰)後,發現有公鑰證書耶,然後用自己瀏覽器的數字證書機構的公鑰對GOOGLE的公鑰進行驗籤!如果驗籤成功,則代表GOOGLE的公鑰是沒有修改過的,可以放心食用。後面的過程不用說了吧,和上面例子的一樣。