# 原創,轉載請留言聯系
為什么會出現這么多加密啊,公鑰私鑰啊,簽名啊這些東西呢?說到底還是保證雙方通信的安全性與完整性。例如小明發一封表白郵件給小紅,他總不希望給別人看見吧。而各種各樣的技術就是為了保障通信的安全。(本文務必從上到下看)
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的公鑰解開得到對稱加密的鑰匙啦。到了這步,就能保證對稱加密的鑰匙的安全啦。(這里有誤,修正於2018.12.10:)小明用GOOGLE的公鑰加密對稱加密的鑰匙,再傳輸給GOOGLE服務器。GOOGLE服務器收到后,就可以用私鑰解開的到對稱加密的鑰匙啦。到了這步,就能保證對稱加密的鑰匙的安全傳輸啦。
自此之后,小明要搜什么內容,就先用對稱加密的鑰匙把內容加密,然后傳輸給GOOGLE。GOOGLE拿到后,用對稱加密鑰匙解密,並且處理完之后,用對稱加密的鑰匙加密,再發回去給小明。小明收到再解密......
看起來已經天衣無縫了,但是還是有問題。
萬一小明剛開始收到的公鑰不是GOOGLE的公鑰呢?而是黑客發過去的公鑰,那么小明本來想與GOOGLE交流的,不就變成與黑客交流了?
為了解決這個問題,數字證書出現了!~~
4.數字證書
上面的問題出現后,出現了解決方案。下面接着上面的例子講:
GOOGLE可以使用由數字證書認證機構(CA,certificate Authority)和其他相關機關頒發的公開密鑰證書。然后給小明發公鑰時,小明就可以知道這個肯定是GOOGLE的公鑰了。
詳細過程是這樣的:
1.GOOGLE服務器把自己的公鑰登錄至數字證書認證機構。
2.數字證書機構用自己的私鑰對GOOGLE的公鑰進行簽名(還記得簽名的作用?不記得看回去),並頒發公鑰證書(證明的作用)。
3.要知道的一點是:每個人的瀏覽器都事先植入數字證書機構的公鑰的!!!小明的也是,你的也是,我的也是。
4.小明收到了(公鑰證書+GOOGLE的公鑰)后,發現有公鑰證書耶,然后用自己瀏覽器的數字證書機構的公鑰對GOOGLE的公鑰進行驗簽!如果驗簽成功,則代表GOOGLE的公鑰是沒有修改過的,可以放心食用。后面的過程不用說了吧,和上面例子的一樣。
