(轉)一個故事講完https

(轉)一個故事講完https

1  序言

今天來聊一聊https 安全傳輸的原理。算法

在開始以前,咱們來虛構兩我的物, 一個是位於中國的張大胖(怎麼又是你?!), 還有一個是位於米國的Bill (怎麼仍是你?!)。瀏覽器

這倆哥們隔着千山萬水,經過網絡聯繫上了, 兩我的臭味相投,聊得火熱。安全

此時正值米國大選, 張大胖親切地「致電」Bill, 對米國總統大選的狀況表示強烈地關注。 Bill則回電說謝謝關心米國人的事情咱們米國人本身作主,不用大家歪果仁瞎操心......微信

張大胖繼續「致電」說其實咱們支持特朗普, 由於希拉里太情緒化,太難打交道了, 咱們挺但願看到特朗普上臺這樣米國就會變成 The Divided State of America ......網絡

Bill 回電: 拉倒你吧你, 咱們米國的政體有着強大的糾錯性, 雖然有時候發展得慢, 有時候會走上岔路, 但很快就會回到正途,幾百年來穩定得很,不像大家像坐了過山車同樣.....ide

兩我的越聊越投機,天南地北,海闊天空,還夾雜着很多隱私的話題。post

2 老是有一種被偷看的感受

有一天, Bill 忽然意識到: 壞了, 咱們的通訊是明文的, 這簡直就是網絡上裸奔啊, 任何一個不懷好意的傢伙均可以監聽咱們通訊,打開咱們發送的數據包,窺探咱們的隱私啊。網站

張大胖說: 「你不早點說,我剛纔是否是把個人微信號給你發過去了? 我是否是告訴你我上週去哪兒旅遊了?   估計已經被人截取了吧!」加密

Bill  提議: 「要不咱們作個數據的加密? 每次傳輸以前, 你把消息用一個加密算法加密, 而後發到我這裏之後我再解密, 這樣別人就沒法偷窺了,像這樣: 」spa

 

張大胖冰雪聰明,一看就明白了, 這加密和解密算法是公開的,那個密鑰是保密的, 只有兩人才知道, 這樣生成的加密消息(密文) 別人就沒法得知了。 他說: 「Bill 老兄,你生成一個密鑰, 而後把密鑰發給我, 我們這就開啓加密消息, 讓那些偷窺狂人們哭去吧!」

(碼農翻身注:這叫對稱加密算法, 由於加密和解密用的是同一個密鑰)

一炷香功夫過去了, Bill 仍是沒有迴音, 張大胖忍不住地催促: 「快發啊?!!!」

Bill 終於回覆了: 「 我感受有一雙眼睛正在虎視眈眈地盯着咱們的通話, 若是我把密鑰發給你, 也被他截取了, 那加密豈不白費工夫?」

張大胖沉默了, 是啊, 網絡是不安全的, 這密鑰怎麼安全地發過來啊 ? 

「奧,對了,我下週要去米國旅遊,到時候咱們見一面,把密碼肯定下來,寫到紙上,誰也偷不走, 這不就結了?」 

「哈哈, 這卻是終極解決之道 」  Bill 笑了, 「不過,我不只僅和你聊天, 我還要和易卜拉欣,阿卜杜拉, 弗拉基米爾,克里斯托夫,瑪格麗特, 橋本龍太郎, 李賢俊, 許木木,郭芙蓉,呂秀才等人通訊, 我總不能打着飛的,滿世界的和人交換密碼吧? 」

張大胖內心暗自佩服Bill同窗的好友居然遍及全球,看來他對加密通訊的要求更增強烈啊!

但是這個加密解密算法須要的密鑰雙方必須得知道啊, 可是密鑰又沒法經過網絡發送, 這該死的偷窺者!

3  RSA : 非對稱加密

Bill 和 張大胖的通訊沒法加密,說話謹慎了很多, 直到有一天, 他們據說了一個叫作RSA的非對稱加密算法,一會兒來了靈感。

這個RSA算法很是有意思,它不是像以前的算法, 雙方必須協商一個保密的密鑰, 而是有一對兒鑰匙, 一個是保密的,稱爲私鑰,另一個是公開的,稱爲公鑰。

更有意思的是,用私鑰加密的數據,只有對應的公鑰才能解密,用公鑰加密的數據, 只有對應的私鑰才能解密

 

 

有了這兩個漂亮的特性, 當張大胖給Bill發消息的時候, 就能夠先用Bill的公鑰去加密(反正Bill的公鑰是公開的,地球人都知道), 等到消息被Bill 收到後, 他就能夠用本身的私鑰去解密(只有Bill才能解開,私鑰是保密的 )

 

反過來也是如此, 當Bill 想給張大胖發消息的時候,就用張大胖的公鑰加密, 張大胖收到後,就用本身的私鑰解密。

這樣以來,通訊安全固若金湯, 沒有任何人能窺探他們的小祕密了。

4 非對稱加密+對稱加密

兩人實驗了幾回,  張大胖說: 「Bill  , 你有沒有感受這個RSA的加密和解密有點慢啊?」

Bill嘆了口氣 :「是啊, 我也注意到了, 剛纔搜了一下,這個RSA算法比以前的對稱密鑰算法要慢上百倍。咱們就是加個密而已,如今搞得都無法用了」

「回到我們最初的問題,咱們想用一個密鑰來加密通訊,那個對稱加密算法是很是快的,可是苦於密鑰沒法安全傳輸, 如今有了RSA ,我想能夠結合一下, 分兩步走 (1) 我生成一個對稱加密算法的密鑰, 用RSA的方式安全發給你,  (2) 咱們隨後就不用RSA了, 只用這個密鑰,利用對稱加密算法來通訊,  如何?   」

Bill 說: 「你小子能夠啊, 這樣以來既解決了密鑰的傳遞問題, 又解決了RSA速度慢的問題,不錯。」 

因而兩人就安全地傳遞了對稱加密的密鑰, 用它來加密解密,果真快多了!

5 中間人攻擊

張大胖把和Bill 聊天的狀況給老婆彙報了一次。

老婆告誡他說: 「你要當心啊, 你肯定網絡那邊坐着的確實是Bill ?」

張大胖着急地辯解說:「確定是他啊,我都有他的公鑰,咱們倆的通訊都是加密的。」

老婆提醒道:"假如啊,Bill給你發公鑰的時候, 有個中間人,截取了Bill的公鑰, 而後把本身的公鑰發給了你,冒充Bill ,你發的消息就用中間人的公鑰加了密, 那中間人不就能夠解密看到消息了?"

張大胖背後出汗了,是啊,這個中間人解密之後,還能夠用Bill的公鑰加密,發給Bill ,  Bill和我根本都意識不到, 還覺得咱們在安全傳輸呢!

 

 

看來問題出如今公鑰的分發上!  雖然這個東西是公開的, 可是在別有用心的人看來,截取之後還能夠幹壞事 !

 

6 你究竟是誰?

可是怎麼安全地分發公鑰呢? 彷佛又回到了最初的問題: 怎麼安全的保護密鑰?

但是彷佛和最初的問題還不同,這一次的公鑰不用保密,可是必定得有個辦法聲明這個公鑰確實是Bill的, 而不是別人的。

怎麼聲明呢?

張大胖忽然想到: 現實中有公證處,它提供的公證材料你們都信任,那在網絡世界也能夠創建一個這樣的具有公信力的認證中心, 這個中心給你們頒發一個證書, 用於證實一我的的身份。

這個證書裏除了包含一我的的基本信息以外,還有包括最關鍵的一環:這我的的公鑰!

這樣以來我拿到證書就能夠安全地取到公鑰了 ! 完美!

但是Bill 立刻潑了一盆冷水:證書怎麼安全傳輸? 要是證書傳遞的過程當中被篡改了怎麼辦?

張大胖內心不禁地咒罵起來: 我操, 這簡直就是雞生蛋,蛋生雞的問題啊。

天無絕人之路, 張大胖很快就找到了突破口: 數字簽名

簡單來說是這樣的, Bill能夠把他的公鑰和我的信息用一個Hash算法生成一個消息摘要, 這個Hash算法有個極好的特性,只要輸入數據有一點點變化,那生成的消息摘要就會有鉅變,這樣就能夠防止別人修改原始內容。

 

但是做爲攻擊者的中間人笑了: 「雖然我沒辦法改公鑰,可是我能夠把整個原始信息都替換了, 生成一個新的消息摘要, 你不仍是辨別不出來?」

張大胖說你別得意的太早 , 咱們會讓有公信力的認證中心(簡稱CA)用它的私鑰對消息摘要加密,造成簽名:

這還不算, 還把原始信息和數據簽名合併, 造成一個全新的東西,叫作「數字證書」

 

張大胖接着說:當Bill把他的證書發給個人時候, 我就用一樣的Hash 算法, 再次生成消息摘要,而後用CA的公鑰對數字簽名解密, 獲得CA建立的消息摘要, 二者一比,就知道有沒有人篡改了!

若是沒人篡改, 我就能夠安全的拿到Bill的公鑰嘍,有了公鑰, 後序的加密工做就能夠開始了。

雖然很費勁, 可是爲了防範大家這些偷窺者,實在是沒辦法啊。

 

 

中間人惡狠狠地說: 「算你小子狠! 等着吧,我還有別的招。 對了,我且問你, 你這個CA的公鑰怎麼拿到? 難道不怕我在你傳輸CA公鑰的時候發起中間人攻擊嗎? 若是我成功的假裝成了CA,你這一套體系完全玩完。」

張大胖語塞了,折騰了半天,又回到了公鑰安全傳輸的問題!

不過轉念一想,想解決雞生蛋,蛋生雞的問題必須得打破這個怪圈才行,我必須得信任CA,而且經過安全的的方式獲取他們的公鑰,這樣才能把遊戲玩下去。

(公衆號碼農翻身注:這些CA自己也有證書來證實本身的身份,而且CA的信用是像樹同樣分級的,高層的CA給底層的CA作信用背書,而操做系統/瀏覽器中會內置一些頂層的CA的證書,至關於你自動信任了他們。 這些頂層的CA證書必定得安全地放入操做系統/瀏覽器當中,不然世界大亂。)

7  https 

終於能夠介紹https了,前面已經介紹了https的原理, 你把張大胖替換成瀏覽器, 把Bill 替換成某個網站就好了。

一個簡化的(例以下圖沒有包含Pre-Master Secret)https流程圖是這樣的, 若是你理解了前面的原理,這張圖就變得很是簡單:

 

相關文章
相關標籤/搜索