原文地址:medium.freecodecamp.org/https-expla…
密碼學是一門很難理解的學科。它充滿了數學證明。但是對我們來說,其中大部分的複雜性,是沒有必要去理解其在高層次到底發生了什麼。
如果你點開這篇文章,希望建立下一代HTTPS協議,那非常抱歉僅有鴿子是不夠的。不過可以先煮杯咖啡,然後慢慢享受這篇文章。
Alice, Bob and … pigeons?
你通過網路做的任何事情(讀該篇文章,在亞馬遜上買東西,上傳貓的照片)都可歸結為傳送資訊給伺服器並從伺服器獲取資訊。
這可能有點抽象。讓我們想象一下這些資訊是通過信鴿傳遞的。我知道這看起來可能有點隨意,但是請相信我https就是用相同的方式工作的,雖然它在速度上快很多。
同理,我們不討論客戶端,伺服器和黑客。我們將談論Alice, Bob 和 Mallory.如果你不是第一次嘗試理解密碼學的概念,這幾個名字你應該不陌生,因為它們經常出現在技術文獻裡。
第一次天真的通訊
如果Alice想給Bob傳送一條訊息,她把訊息綁在信鴿的腿上然後傳送給Bob。Bob收到訊息,然後讀訊息,一切看起來都很好。
但如果Mallory在空中劫持了Alice的信鴿並換掉了訊息會怎麼樣呢?Bob將沒有辦法知道Alice傳送的訊息在運送途中被更改了。
這就是http工作的方式。非常可怕是不是?我不會在HTTP上傳送我的銀行證書,你應該也不會這麼做。
密碼
現在如果Alice和Bob都很狡猾。他們同意使用密碼來寫他們的訊息。他們將每個字元在字母表中的位置移動三個位置。如:D → A, E → B, F → C。明文資訊“secret message”將變成“pbzobq jbppxdb”。
現在如果Mallory劫持信鴿,她將不能把資訊改成一些有意義的,也不能理解訊息裡說了些什麼。因為她不知道密碼是什麼。但是Bob可以輕鬆地反向應用密碼然後解密訊息(A → D, B → E, C → F)。然後密文“pbzobq jbppxdb”可解密成“secret message”。
成功!
這就是所謂的對稱金鑰加密。因為如果你知道怎麼加密資訊你也就知道如何解密。
上面描述的編碼通常稱為凱撒密碼。在現實生活中,我們使用更加複雜的編碼,但是主要的思想還是一樣的。
我們怎麼決定祕鑰?
對稱祕鑰加密在除了傳送方和接收方,沒有其他人知道使用了什麼祕鑰時是安全的。在凱撒密碼中,祕鑰就是一個偏移量即每個字母移動的偏移數。在我們的例子中我們使用的偏移量是3,但也可以是4或者12。
問題在於如果Alice和Bob在利用信鴿傳送訊息之前沒有見過面,他們沒有辦法安全地建立一個祕鑰。如果他們在訊息中同時傳送祕鑰,那Mallory可以劫持訊息並發現祕鑰。這就允許Mallory讀取或者修改訊息。
這就是屬於中間人攻擊的一個經典例子。並且唯一的避免方式就是一起改變加密系統。
攜帶盒子的鴿子
所以Alice和Bob想出了一個更好的系統。當Bob想給Alice傳送一條訊息時,他遵循以下的流程:
- Bob給Alice傳送一隻不含訊息的鴿子
- Alice傳送回一隻攜帶一個盒子的鴿子,盒子上有一把開啟的鎖,但自己保留鑰匙。
- Bob把訊息放進盒子裡,關上鎖,並把盒子傳送給Alice.
- Alice接受盒子,用鑰匙開啟它然後讀取訊息。
這種方式Mallory無法通過劫持資訊篡改訊息,因為她沒有祕鑰。相同的流程用同樣應用於Alice給Bob傳送訊息。
Alice和Bob就是應用了俗稱的非對稱祕鑰加密。它被叫做非對稱是因為你可以加密訊息(鎖上盒子)但是不能解密訊息(開啟關上的盒子)。在技術文獻中這個盒子被稱為公鑰,開啟它的鑰匙被稱為私鑰。
如何信任盒子
如果你仔細思考你可能會發現我們還存在一個問題。當Bob接收到開啟的盒子後如何確定它是來自Alice的並且Mallory沒有攔截鴿子並替換成Mallory自己有祕鑰的盒子呢。
Alice決定她將給盒子簽名,通過這種方式當Bob接受到盒子時他檢查簽名然後知道它是Alice傳送過來的盒子。
你們可能會想,Bob第一次怎麼辨別Alice的簽名呢?這是一個好問題。Alice和Bob也有這個問題,所以,他們決定讓Ted給盒子簽名,而不是Alice。
誰是Ted? Ted就是著名的,值得信耐的朋友。Ted將他的簽名給每一個人,每個人也相信他將只會給合法的人簽名盒子。
只要當Ted確認請求籤名的人是Alice時,他才會對盒子簽名Alice。因此Mallory無法從Ted那獲取Alice的簽名來假冒Alice,Bob也會知道那個信盒是假冒的。因為Ted只在鑑定完請求者的身份後才會給他們的信盒簽名。
Ted在技術上常被稱作為證書頒發中心,你正在閱讀這篇文章的瀏覽器就附帶了各式各樣的證書頒發中心。
所以當你第一次訪問一個站點,你信任它的盒子。因為你信任Ted,並且Ted告訴你那個盒子時合法的。
盒子很重
Alice和Bob現在有一個可信耐的系統去通訊,但是他們發現攜帶盒子的鴿子比僅僅攜帶訊息的鴿子更慢。
他們決定他們將僅使用盒子方法(非對稱加密)選取一個祕鑰,使用對稱加密來加密訊息(還記得凱撒密碼嗎)
這種方式結合了兩者的優勢。非對稱加密的可靠性以及對稱加密的效率。
在現實世界中沒有慢的鴿子,但是無論如何使用對稱加密總是比使用對稱加密慢,因此我們僅使用它用於交換祕鑰。
現在你知道HTTPS是如何工作的,你的咖啡也應該好了,去享受咖啡吧。
翻譯若有不正之處,歡迎指出!