用信鴿解釋HTTPS

原文地址:https://medium.freecodecamp.o...瀏覽器

密碼學是一門很難理解的學科。它充滿了數學證實。可是對咱們來講,其中大部分的複雜性,是沒有必要去理解其在高層次到底發生了什麼。安全

若是你點開這篇文章,但願建立下一代HTTPS協議,那很是抱歉僅有鴿子是不夠的。不過能夠先煮杯咖啡,而後慢慢享受這篇文章。服務器

Alice, Bob and … pigeons?

你經過網絡作的任何事情(讀該篇文章,在亞馬遜上買東西,上傳貓的照片)均可歸結爲發送信息給服務器並從服務器獲取信息。網絡

這可能有點抽象。讓咱們想象一下這些信息是經過信鴿傳遞的。我知道這看起來可能有點隨意,可是請相信我https就是用相同的方式工做的,雖然它在速度上快不少。併發

同理,咱們不討論客戶端,服務器和黑客。咱們將談論Alice, Bob 和 Mallory.若是你不是第一次嘗試理解密碼學的概念,這幾個名字你應該不陌生,由於它們常常出如今技術文獻裏。編碼

第一次天真的通訊

若是Alice想給Bob發送一條消息,她把消息綁在信鴿的腿上而後發送給Bob。Bob收到消息,而後讀消息,一切看起來都很好。加密

但若是Mallory在空中劫持了Alice的信鴿並換掉了消息會怎麼樣呢?Bob將沒有辦法知道Alice發送的消息在運送途中被更改了。spa

這就是http工做的方式。很是可怕是否是?我不會在HTTP上發送個人銀行證書,你應該也不會這麼作。翻譯

密碼

如今若是Alice和Bob都很狡猾。他們贊成使用密碼來寫他們的消息。他們將每一個字符在字母表中的位置移動三個位置。如:D → A, E → B, F → C。明文信息「secret message」將變成「pbzobq jbppxdb」。code

如今若是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是如何工做的,你的咖啡也應該好了,去享受咖啡吧。

翻譯如有不正之處,歡迎指出!

相關文章
相關標籤/搜索