加密是一個很難理解的東西,這裡頭滿是數學證明。不過,除非你是在開發一個加密系統,否則無需瞭解那些高階的複雜知識。
如果你看這篇文章是為了創造下一個 HTTPS 協議,很抱歉,請出門左走,鴿子是遠遠不夠的。不然的話,先去煮一壺咖啡,再來看文章吧~
愛麗絲、鮑勃以及鴿子?
你在網路上進行的任何活動(閱讀這篇文章、在京東上購物、分享貓咪的照片),都是通過伺服器傳送和接收資訊。
這可能有點抽象。那就讓我們設想這些資訊都是通過信鴿傳播的。看起來可能有點奇怪,不過請相信我,HTTPS 的工作原理和信鴿是一樣的,只是要快得多。
同樣,我們用愛麗絲、鮑勃以及馬洛裡來代稱伺服器、客戶機以及黑客。如果之前你嘗試過理解加密系統的原理,那這些名字你不會感到陌生,因為他們在技術文獻中經常出現。
第一次簡單的通訊
如果愛麗絲想要和鮑勃通訊,她會將信件綁在信鴿的腿上,然後信鴿帶著愛麗絲的信飛到鮑勃那裡去。鮑勃收到信後,知道了愛麗絲對她的愛意。到目前為止,一切看起來都還不錯。
但要是馬洛裡在途中攔截下正在飛行的鴿子,然後將信件內容篡改了呢?鮑勃不會知道愛麗絲寫來的這封信在途中是被篡改過的。
這就是 HTTP 的工作方式。很恐怖吧?所以,我不會通過 HTTP 傳送我的銀行卡資訊,你也不應該這樣做。
加密
假設愛麗絲和鮑勃非常的狡猾,他們約定好以一種密文的形式寫信。他們將每個字母在字母表上移動三個位置,例如:D —> A,E —> B,F —> C。而諸如 “secret message” 這樣的句子,就會變成 “pbzobq jbppxdb”。
如果馬洛裡再次攔截下鴿子,並試圖篡改信件內容。他會無從下手,因為她不知道密文的規則,即便改了也會毫無意義,令人不知所云。但是鮑勃會根據密文的規則輕鬆的解讀出信件的內容,也就是 A —> D,B —> E,C — > F。加密的句子 “pbzobq jbppxdb” 會被解密成 “secret message”。
酷斃了!
這就是對稱加密(symmetric key cryptography),因為你知道了如何加密也就知道了如何解密。
上面舉例的加密方法就是非常有名的凱撒密碼(Caesar cipher)。在現實生活中,我們使用的是更加酷更加複雜的加密方法,但主要的原理都是一樣的。
如何確定加密規則?
除了傳送者和接受者,沒有其他人知道加密規則,在這種情況下,對稱加密是非常安全的。在凱撒密碼中,加密的關鍵在於每個字母移動的偏移量。在我們的例子裡,偏移量設定為3,但也可以是4或者12。
問題在於,如果愛麗絲和鮑勃在用鴿子通訊之前從未謀面,他們就沒有安全的辦法來制定加密規則。如果他們把加密規則寫在信裡通過鴿子傳遞,馬洛裡就可以攔截鴿子從而竊取加密規則。之後,每次愛麗絲和鮑勃通的信,馬洛裡都可以攔截下並且通過他們的加密規則去破解和修改。
這就是典型的中間人攻擊,避免它的唯一辦法就是同時更改加密系統。
攜帶盒子的信鴿
因此,愛麗絲和鮑勃制定了一個更加安全的加密系統。當鮑勃要傳送資訊給愛麗絲時,他會進行如下步驟:
- 鮑勃給愛麗絲寄去一隻鴿子,鴿子沒有攜帶任何信件。
- 愛麗絲在鴿子腿上綁了一個帶鎖但是沒有上鎖的盒子,鑰匙儲存在自己手裡,然後將鴿子寄回給鮑勃。
- 鮑勃把信件放在盒子裡,上鎖。鴿子又飛回到愛麗絲那裡。
- 愛麗絲收到鴿子後,用手中的鑰匙開啟盒子,然後表情愉悅的看鮑勃寫給她的情書。
這樣一來,馬洛裡因為沒有盒子的鑰匙,即便攔截下鴿子也無法修改信件內容。當愛麗絲要給鮑勃寫信時,遵循的也是以上這些步驟。
愛麗絲和鮑勃使用的這種新的加密方式通常叫做非對稱加密(asymmetric key cryptograpy)。為啥叫做非對稱呢?因為即便你知道如何加密(給盒子上鎖),你也沒有辦法解密(開啟盒子的鎖)。在技術上,這個盒子就是公鑰(public key),而開啟盒子的鑰匙叫做私鑰(private key)。
為啥要相信這個盒子?
如果你看的很認真,那麼可能會注意到一個問題。當鮑勃收到沒有上鎖的盒子,他怎麼確定這個盒子沒有被馬洛裡調包呢?
愛麗絲決定給盒子簽名,當鮑勃收到盒子後檢查上面的簽名就可以知道盒子是不是愛麗絲髮過來的那個。
有些人可能會想,鮑勃如何第一時間識別出愛麗絲的簽名呢?好問題!愛麗絲和鮑勃也想到了這個麻煩,所以他們決定,讓特德在盒子上簽名,愛麗絲不用簽了。
特德是何方神聖?特德是一個眾所周知並且相當值得信賴的傢伙。特德可以在任意盒子上簽名,大家都很信任特德,因為他只給那些合法的朋友所持有的盒子簽名。
特德會給愛麗絲的盒子簽名,是因為他確定這個請求籤名的人是真的愛麗絲。所以,馬洛裡無法把自己的盒子偽裝成是愛麗絲的盒子,因為鮑勃會知道這個是假的,上面沒有特德的簽名。
在技術上,特德指的是證書頒發機構。你用來看這篇文章的瀏覽器裡就附帶了來自於各個證書頒發機構的簽名。
所以,當你第一次訪問某個網站,之所以信任他的盒子,是因為信任特德,特德告訴你盒子是合法的。
盒子很重啊
現在,愛麗絲和鮑勃終於有了一個安全可靠的系統去進行通訊。但同時,他們也意識到攜帶盒子的鴿子比只攜帶資訊的鴿子飛行起來要慢好多。
他們決定只在傳送和接收關於制定加密規則(還記得凱撒密碼嗎?)的資訊的時候使用盒子加密(非對稱加密)。
通過這種方式,他們既得到了非對稱加密的可靠性,又兼顧了對稱加密的高效率。雙贏!
在現實世界,不存在慢鴿子。儘管如此,通過非對稱加密方式加密資訊依然比用對稱加密方式要慢,所以我們只用這種加密方式來交換金鑰。
好啦,你的咖啡應該煮好了, HTTPS 是如何工作的你也知道了。去喝吧,你值得來一杯。