HTTPS演化過程(對稱加密、非對稱加密、公鑰、私鑰、數字簽名、數字證書)
主要感謝《碼農翻身》,還有網上的文章,大家可以看看這本書。
1.對稱資料加密
就像上圖所示, 這加密和解密演算法是公開的,那個金鑰是保密的, 只有兩人才知道, 這樣生成的加密訊息(密文) 別人就無法得知了。這叫對稱加密演算法,因為加密和解密用的是同一個金鑰。
問題來了,這個金鑰的雙方必須得知道,但是通過網路傳送又不安全,這該怎麼辦呢?這時候就出現了非對稱資料加密。
2.RSA:非對稱加密
這個RSA演算法非常有意思,它不是像之前的演算法, 雙方必須協商一個保密的金鑰, 而是有一對兒鑰匙, 一個是保密的,稱為私鑰,另外一個是公開的,稱為公鑰。
更有意思的是,用私鑰加密的資料,只有對應的公鑰才能解密,用公鑰加密的資料, 只有對應的私鑰才能解密。
有了這兩個漂亮的特性, 當張大胖給Bill發訊息的時候, 就可以先用Bill的公鑰去加密(反正Bill的公鑰是公開的,地球人都知道), 等到訊息被Bill 收到後, 他就可以用自己的私鑰去解密(只有Bill才能解開,私鑰是保密的 )【也就是A傳送訊息給B時候,利用B的公鑰,然後B收到後利用私鑰解密接收。】
反過來也是如此, 當Bill 想給張大胖發訊息的時候,就用張大胖的公鑰加密, 張大胖收到後,就用自己的私鑰解密。
3.非對稱加密+對稱加密
為什麼會出現這種情況呢?
因為RSA的加密和解密的速度比較慢,RSA的演算法比之前的對稱金鑰演算法要慢上百倍。
回到咱們最初的問題,我們想用一個金鑰來加密通訊,那個對稱加密演算法是非常快的,但是苦於金鑰無法安全傳輸, 現在有了RSA ,我想可以結合一下, 分兩步走 (1) 我生成一個對稱加密演算法的金鑰, 用RSA的方式安全發給你, (2) 我們隨後就不用RSA了, 只用這個金鑰,利用對稱加密演算法來通訊,這樣即可以保證安全又可以加快速度。【也就是隻利用RSA傳輸金鑰,保證金鑰的安全。然後利用對稱加密進行資訊傳輸。】
這樣以來既解決了金鑰的傳遞問題, 又解決了RSA速度慢的問題,不錯。
於是兩人就安全地傳遞了對稱加密的金鑰, 用它來加密解密,果然快多了!
4.中間人攻擊
這個話題,主要是針對你如何確認對面的人是你想通訊的人。
假如啊,Bill給你發公鑰的時候, 有個中間人,截取了Bill的公鑰, 然後把自己的公鑰發給了你,冒充Bill ,你發的訊息就用中間人的公鑰加了密,那中間人利用自己的金鑰不就可以解密看到訊息了【這個是利用自己的金鑰,然後自己的私鑰接收】?同時,還可以用Bill的公鑰加密,發給Bill , Bill和我根本都意識不到, 還以為我們在安全傳輸呢!【這個是利用Bill的公鑰,傳送自己的資訊給Bill。】
看來問題出現在公鑰的分發上!雖然這個東西是公開的,但是在別有用心的人看來,擷取以後還可以幹壞事 !
但是怎麼安全地分發公鑰呢? 似乎又回到了最初的問題: 怎麼安全的保護金鑰(之前是利用非對稱保護私鑰的傳輸,現在是考慮如何保證公鑰的傳送方)?
可是似乎和最初的問題還不一樣,這一次的公鑰不用保密,但是一定得有個辦法宣告這個公鑰確實是Bill的, 而不是別人的。
5.資訊摘要、數字簽名、數字證書
簡單來講是這樣的, Bill可以把他的公鑰和個人資訊用一個Hash演算法生成一個訊息摘要, 這個Hash演算法有個極好的特性,只要輸入資料有一點點變化,那生成的訊息摘要就會有鉅變,這樣就可以防止別人修改原始內容。
可是作為攻擊者的中間人笑了: “雖然我沒辦法改公鑰,但是我可以把整個原始資訊都替換了, 生成一個新的訊息摘要, 你不還是辨別不出來?”
張大胖說你別得意的太早 , 我們會讓有公信力的認證中心(簡稱CA)用它的私鑰對訊息摘要加密,形成簽名:
這還不算, 還把原始資訊和資料簽名合併, 形成一個全新的東西,叫做“數字證書”
張大胖接著說:當Bill把他的證書發給我的時候, 我就用同樣的Hash 演算法, 再次生成訊息摘要,然後用CA的公鑰對數字簽名解密, 得到CA建立的訊息摘要, 兩者一比,就知道有沒有人篡改了!
如果沒人篡改, 我就可以安全的拿到Bill的公鑰嘍,有了公鑰, 後序的加密工作就可以開始了。
那麼這個CA的公鑰怎麼保證他的安全性?
附註:我們利用上面數字證書保證傳輸安全的前提就是,我們預設CA的公鑰是安全的。因為CA的公鑰安全,所以得出的訊息摘要是安全的,這就可以與Hash演算法得出的訊息摘要比較是否相同,從而確保訊息的安全的。
6.HTTPS
數字證書的例項:HTTPS協議。這個協議主要用於網頁加密。
1.首先,客戶端向伺服器發出加密請求。
2.伺服器用自己的私鑰加密網頁以後,連同本身的數字證書,一起傳送給客戶端。
3.客戶端(瀏覽器)的”證書管理器”,有”受信任的根證書頒發機構”列表。客戶端會根據這張列表,檢視解開數字證書的公鑰是否在列表之內。
4.如果數字證書記載的網址,與你正在瀏覽的網址不一致,就說明這張證書可能被冒用,瀏覽器會發出警告。
5.如果這張數字證書不是由受信任的機構頒發的,瀏覽器會發出另一種警告。
6.如果數字證書是可靠的,客戶端就可以使用證書中的伺服器公鑰,對資訊進行加密,然後與伺服器交換加密資訊。
總結:
更加詳細詳細可以參考上面第二個連結。